consul
下载
可以去官网下载,也可以通过go环境编译成二进制。
1 | # 安装版本 |
安装
将下载好的zip文件通过unzip
命令解压缩。之后将二进制文件移动到/usr/local/bin/
目录下。
1 | # 解压缩 |
配置自动补全
配置完成后,按tab
键补全的效果:
1 | [root@jw-etcd01 home]# consul |
执行命令:
1 | consul -autocomplete-install |
编写systemd服务
编写systemd
服务之后,方便服务的启动与暂停。
创建consul服务文件:
1 | touch /etc/systemd/system/consul.service |
将配置添加到此文件中,
1 | [Unit] |
说明:
Description
:描述consul
服务Documentation
:连接到consul
文档ConditionFileNotEmpty
:在启动服务之前,检查配置文件是否为空ExecStart
:启动consul
服务的命令ExecReload
:向consul
发送重载信号以触发consul
中的重新加载配置KillMode
:将consul
视为一个进程
配置文件
和etcd
类似,都可以通过命令行、环境变量、配置文件来启动consul
。
更多配置请参照官网。
服务端
一般配置
在以下位置创建配置文件:/etc/consul/consul.d/consul.hcl
1 | # 创建配置文件文件夹 |
注意:
datacenter
:集群的数据中心,多个集群可以同时使用多个数据中心。我们只部署一个集群就使用同一个数据中心data_dir
:agent
存储状态的数据目录encrypt
:指定用于加密consul
网络流量的base64密钥,可以用consul keygen
生存或者自己通过其他方式生成client_addr
:consul
将绑定客户端接口的地址,包括HTTP和DNS服务器。默认是127.0.0.1
,可以将其设置为以空格分割的列表
集群自动加入
我这里是因为搭建了dnsmasq
dns服务器。在该dns服务器的机器上配置了hosts
,这样可以通过它来管理和控制内网的dns。
1 | [root@jw-etcd03 consul.d]# cat /etc/hosts |
该配置表示,该内网中的所有用户访问test-consul.com
时跳转到172.19.19.124
。也可以称为dns 劫持
。
该retry_join
参数允许使用通过DNS地址,IP地址或使用云自动连接访问的公共Consul服务器配置所有Consul代理以自动形成群集。这消除了手动将Consul集群节点连接在一起的需要。
1 | retry_join = ["test-consul.com"] |
服务器配置
在以下位置创建配置文件/etc/consul/consul.d/server.hcl
:
1 | [root@jw-etcd03 consul.d]# cat server.hcl |
说明:
server
:此标志用于控制该agent
是处于服务器模式还是客户端模式bootstrap_expect
:此标志提供数据中心中预期的服务器数。不应提供此值,或者该值必须与群集中的其他服务器一致。和etcd
一样推荐使用单数。我这里因为演示不搭建那么多机器ui
:consul
自带的一个web界面。应该考虑选定的Consul机器而不是所有机器上运行Consul UI
客户端
Consul客户端通常需要Consul服务器所需的配置子集。所有Consul客户端都可以使用配置服务器时创建的文件consul.hcl
。
启动与测试
通过之前编写的systmed
服务来控制consul
服务。
1 | systemctl enable consul |
查看集群成员状态
1 | [root@jw-etcd02 consul]# consul members |
put
在jw-etcd01
(server)机器上put
一个值:
1 | [root@jw-etcd01 consul.d]# consul kv put name jiang_wei |
get
在jw-etcd02
(client)机器上get
一个值:
1 | [root@jw-etcd02 consul]# consul kv get name |
可以看出,成功。
ui
因为上面配置了ui
,还可以通过web界面来看服务状态。
浏览器访问:http://172.19.19.124:8500/ui/
。
给几个图,自己体会: