未分类
Consul集群部署
系统环境 主机名 IP地址 Consul角色 ConsulServer1 10.x.x.189 Server ConsulServer2 10.x.x.190 Server ConsulServer3 10.x.x.188 Server ConsulClient 10.x.x.219 Client 首先去官网下载执行文件:
1 2 3 |
wget https://releases.hashicorp.com/consul/0.9.3/consul_0.9.3_web_ui.zip unzip consul_0.9.3_linux_amd64.zip cp consul /usr/local/sbin/ |
创建启动文件/etc/systemd/system/consul.service:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[Unit] Description=consul agent Requires=network-online.target After=network-online.target [Service] EnvironmentFile=-/etc/sysconfig/consul Environment=GOMAXPROCS=2 Restart=on-failure ExecStart=/usr/local/sbin/consul agent $OPTIONS -config-dir /etc/consul.d/server/ ExecReload=/bin/kill -HUP $MAINPID KillSignal=SIGINT [Install] WantedBy=multi-user.target |
创建配置文件/etc/consul.d/server/config.json, 其中encrypt可以用命令生成(/usr/local/sbin/consul keygen)16位base64加密, 最新版本不要使用ur_dir参数, 要使用ui参数, 才能打开页面http://10.3.15.189:8500/ui/:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
{ "bind_addr": "10.x.x.189", "client_addr": "0.0.0.0", "datacenter": "dc1", "data_dir": "/data/consul/data", "ui": true, "encrypt": "ZHJM3OeHwvxpfnWjxs2JYQ==", "log_level": "ERR", "enable_syslog": true, "enable_debug": true, "node_name": "ConsulServer1", "server": true, "bootstrap_expect": 3, "leave_on_terminate": false, "skip_leave_on_interrupt": true, "rejoin_after_leave": true, "retry_join": [ "10.x.x.189:8301", "10.x.x.190:8301", "10.x.x.188:8301" ], "retry_interval": "30s", "raft_protocol": 2, "protocol": 3 } |
创建目录:
1 |
mkdir /data/consul/data |
启动:
1 |
systemctl start consul |
防火墙要打开相应端口:
1 2 3 |
#consul集群 -A INPUT --match multiport -m state --state NEW -m tcp -p tcp --dports 8300,8301,8302,8500,8600 -j ACCEPT -A INPUT -m state --state NEW -m udp -p udp --dport 8600 -j ACCEPT |
ConsolServer1启动成功. 其它二个服务器分别将/etc/consul.d/server/config.json和/etc/systemd/system/consul.service拷贝, 修改ip和node名字 客户端配置/etc/consul.d/client/config.json:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{ "bind_addr": "10.x.x.219", "client_addr": "10.x.x.219", "datacenter": "dc1", "data_dir": "/data/consul", "encrypt": "ZHJM3OeHwvxpfnWjxs2JYQ==", "log_level": "ERR", "enable_syslog": true, "enable_debug": true, "node_name": "ConsulClient", "server": false, "service": {"name": "Apache", "tags": ["HTTP"], "port": 80, "check": {"script": "curl localhost >/dev/null 2>&1", "interval": "10s"}}, "rejoin_after_leave": true, "enable_script_checks": true, "retry_join": [ "10.x.x.189:8301", "10.x.x.190:8301", "10.x.x.188:8301" ], "raft_protocol": 2, "protocol": 3 } |
验证: 查看members:
1 2 3 4 5 6 |
[root@opt1 consul]# consul members --http-addr 10.x.x.189:8500 Node Address Status Type Build Protocol DC Segment ConsulServer1 10.x.x.189:8301 alive server 0.9.3 3 dc1 <all> ConsulServer2 10.x.x.190:8301 alive server 0.9.3 3 dc1 <all> ConsulServer3 10.x.x.188:8301 alive server 0.9.3 3 dc1 <all> ConsulClient 10.x.x.219:8301 alive client 0.9.3 3 dc1 <default> |
查看DNS:
1 2 |
[root@opt1 consul]# dig @10.x.x.189 -p 8600 ConsulServer2.node.consul +short 10.3.15.190 |
参考: http://www.10tiao.com/html/357/201705/2247485185/1.html 命令行参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
-advertise:通知展现地址用来改变我们给集群中的其他节点展现的地址,一般情况下-bind地址就是展现地址 -bootstrap:用来控制一个server是否在bootstrap模式,在一个datacenter中只能有一个server处于bootstrap模式,当一个server处于bootstrap模式时,可以自己选举为raft leader。 -bootstrap-expect:在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap公用 -bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0 -client:consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1 -config-file:明确的指定要加载哪个配置文件 -config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载 -data-dir:提供一个目录用来存放agent的状态,所有的agent允许都需要该目录,该目录必须是稳定的,系统重启后都继续存在 -dc:该标记控制agent允许的datacenter的名称,默认是dc1 -encrypt:指定secret key,使consul在通讯时进行加密,key可以通过consul keygen生成,同一个集群中的节点必须使用相同的key -join:加入一个已经启动的agent的ip地址,可以多次指定多个agent的地址。如果consul不能加入任何指定的地址中,则agent会启动失败,默认agent启动时不会加入任何节点。 -retry-join:和join类似,但是允许你在第一次失败后进行尝试。 -retry-interval:两次join之间的时间间隔,默认是30s -retry-max:尝试重复join的次数,默认是0,也就是无限次尝试 -log-level:consul agent启动后显示的日志信息级别。默认是info,可选:trace、debug、info、warn、err。 -node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名 -protocol:consul使用的协议版本 -rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。 -server:定义agent运行在server模式,每个集群至少有一个server,建议每个集群的server不要超过5个 -syslog:开启系统日志功能,只在linux/osx上生效 -ui-dir:提供存放web ui资源的路径,该目录必须是可读的 -pid-file:提供一个路径来存放pid文件,可以使用该文件进行SIGINT/SIGHUP(关闭/更新)agent |
除了命令行参数外,配置也可以写入文件中,在某些情况下配置文件会更简单一些,例如:利用consul被用来管理系统。配置文件是json格式的,很容易编写。配置文件不仅被用来设置agent的启动,也可以用来提供健康检测和服务发现的定义。配置文件的一般样例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "datacenter": "east-aws", "data_dir": "/opt/consul", "log_level": "INFO", "node_name": "foobar", "server": true, "watches": [ { "type": "checks", "handler": "/usr/bin/health-check-handler.sh" } ] } |
下面看看详细的配置文件参数: Read more…