Rancher下部署Consul集群
环境
- Rancher版本V2.3.5
- Consul版本v1.7.1
部署节点:
- consul-server-test-node1
- consul-server-test-node2
- consul-client-test-node1
部署consul-server-test-node1节点
设置服务名称,设置镜像
设置端口映射
常用端口说明:
- 8500 http 端口,用于 http 接口和 web ui
- 8300 server rpc 端口,同一数据中心 consul server 之间通过该端口通信
- 8301 serf lan 端口,同一数据中心 consul client 通过该端口通信
- 8302 serf wan 端口,不同数据中心 consul server 通过该端口通信
- 8600 dns 端口,用于服务发现
数据持久化(可选)
数据默认存储路径为/consul/data
,配置文件的默认存储路径为/consul/config
配置启动参数
agent指令是consul的核心,它运行agent来维护成员的重要信息、运行检查、服务宣布、查询处理等等
-server : 定义agent运行在server模式
-ui:运行 web 控制台
-bootstrap-expect :在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap共用
-bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,0.0.0.0 表示所有网口,如果不指定默认未127.0.0.1,则无法和容器通信
-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
-ui-dir: 提供存放web ui资源的路径,该目录必须是可读的
-rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。
-config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载
-client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0
至此,node1节点已经部署完毕,因为Agent参数我们指定-bootstrap-expect 2
集群至少两台服务器,才能选举集群leader。虽然节点已经运行起来李,但是会报错。我们进日志看下详细的信息。
可以看到node1节点已经正常运行,集群地址为10.42.2.182
,记住这个IP,后面的server-node1节点和client节点都需要这个IP才能加入集群。同时我们看到集群一直在报[ERROR] agent: Coordinate update error: error="rpc error making call: No cluster leader"
的错误,这是因为我们指定了集群至少两个节点才能选举leader。现在集群只有1个节点。所以才会报错。
部署consul-server-test-node2节点
consul-server-test-node2节点的部署参考consul-server-test-node1节点的部署过程,不通的是数据持久化挂在的目录以及启动命令。启动命令为agent -server -ui -bind=0.0.0.0 -retry-join 10.42.2.182
。这里增加了-retry-join
命令,是为了把当前节点加入到集群中。10.42.2.182
为我们部署consul-server-test-node1后记录下来的集群地址。
部署完consul-server-test-node2节点,就可以通过WebUI看到有2个节点已经成功加入到集群中了
部署client节点
client节点的部署过程和server节点的部署基本一致,只需修改下启动命令,启动命令为agent -bind=0.0.0.0 -retry-join 10.42.4.182
。IP10.42.2.182
为集群地址。
至此Consul集群已经搭建完毕,通过WebUI可以集群已经有三个节点正常运行。
通过命令consul members
查看集群状态,有2个server节点,1个client节点
常用命令:
consul members
members指令输出consul agent目前所知道的所有的成员以及它们的状态,节点的状态只有alive、left、failed三种状态。
- -detailed:输出每个节点更详细的信息。
例如:consul members -detailed
- -rpc-addr:一个rpc地址,agent可以链接上来发送命令,如果没有指定,默认是127.0.0.1:8400。
- -status:过滤出符合正则规则的节点
consul version
打印consul的版本
Bronson
没有明白集群中client存在的意义,server节点也可以注册,是不是因为client占有的资源相对较少?
Pony
@Bronson : Client因为加入了LAN gossip协议组成网络中(高速局域网),可以识别故障的Server节点并找到可用的Server节点继续工作,其实Server模式负责的是用WAN gossip协议组成的网络进行跨广域网的数据同步(多个数据中心),这点Client模式是做不到的,Client模式也提供服务的注册和查询,但Client模式不存储节点数据,Client将请求转发给Server进行处理,节点注册数据在Server端是持久化保存的,Client的数量可以无限多,Server的数量是受控制的。总之:Client模式+LAN gossip协议组成了一个数据中心中的各个节点,Server负责投票选出Leader进行数据中心内的数据同步,这个Leader还负责利用WAN gossip协议跨广域网的与其他数据中心进行数据同步。
Mickey
集群地址每重新部署后IP会变的
Pony
@Mickey : 可以考虑创建StatefulSet类型的工作负载