Joining a client

上一节讨论consul架构时提到consul agent分为server及client两种模式。

本节我们将启动一个client,并加入到当前server集群:

image-20211016165213724

实验准备

启动新的一台EC2实例,准备将它作为Client加入到当前集群。

通过安全组的设置,保证与当前Cloud9环境的网络通畅。

image-20211016181127681

ip地址 说明
172.31.60.3 Cloud 9环境,以dev模式运行,作为consul server
172.31.58.144 新的EC2实例,作为client准备加入consul server集群

上一节启动consul server使用的命令是consul agent -dev -http-port=8080,这种情况将监听本地IP的端口:

image-20211016181830245

如果以这种模式运行,新的client加入时,会报connection refused错误

image-20211016181900383


所以应当让consul监听0.0.0.0的连接:

consul agent -dev -client=0.0.0.0 -bind [SERVER-IP]

image-20211016182509042

client加入到 Consul 集群

client加入到consul集群的命令如下:

consul agent -join [SERVER-IP] -bind [CLIENT-IP] -data-dir [PATH-TO-FOLDER]

consul agent -join 1.2.3.4 -bind 5.6.7.8 -data-dir /path/dir  # example

image-20210413110115058

根据实际server及client的ip做替换:

consul agent -join 172.31.60.3 -bind  172.31.58.144 -data-dir /home/ec2-user/consul  

image-20211016182642964


加入新的client后,访问consul UI,成功查看到新加入的node:

image-20211016182616486


client的自动连接

如果主动停止掉server,client会立即报错:

image-20211016182825506

重新运行server,等待一段时间后client会自动重新连接到server:

image-20211016182948420

连接配置详解

在连接命令中,有三个参数-join、-bind、-data-dir

consul agent -join [SERVER-IP] -bind [CLIENT-IP] -data-dir [PATH-TO-FOLDER]
  • join:客户端要连接到远程server端,这是server的ip地址
  • bind:本地绑定的ip,其他节点会以这个ip来进行访问客户端。如果本地机器有多块网卡,则必须配置这个参数,否则会报如下错误: image-20211016173915721
  • data-dir: 所有agent都必须配置这个参数(dev模式除外),用于持久化存储集群的状态,当集群重启时,读取目录下的文件进行状态恢复。它的文件组织结构如下: image-20211016183518780

命令总结

Consul Server运行的命令:

consul agent -dev -client=0.0.0.0 -bind [SERVER-IP]

Client命令:

consul agent -join [SERVER-IP] -bind [CLIENT-IP] -data-dir [PATH-TO-FOLDER]

i.e:

consul agent -join 134.209.155.89 -bind 165.22.222.190 -data-dir /root/consul