consul集群搭建

 consul的基本介绍就不多说,官方文档肯定比我说的好,英语渣渣就不献丑了。这里只分享consul集群部署和使用过程中的步骤和遇到的坑。(本文有很多抄袭的地方,但是忘了从哪里copy的了,都是记在我的onenote上的。。。。。如果有作者看见,请联系我,我加上链接,非常感谢)

 先来一张官网的图震贴,consul里面都是叫agent,但是区分server模式和client模式

 我的理解,server作为服务注册的中心服务器,而client只是作为支撑(感觉更多的是分摊server端的压力,因为官方建议是在每台应用服务器上装一个client),不保存任何数据和状态,用完就废弃

 server端建议最少3个节点,当然你也可以直接单点跑(你也可以在生产环境用dev模式跑,反正挂了不要来找我就行)

 

8500 端口基于HTTP协议,用于API接口或WEB UI访问

8600 端口作为DNS服务器,使我们可以通过节点名查询节点信息

8400 端口rpc通讯???

TCP/UDP/8301 端口用于单个数据中心所有节点之间的互相通讯,即对 LAN 池(包含位于同一局域网或数据中心上的节点)信息的同步。它使得整个数据中心能够自动发现服务器地址,分布式检测节点故障,事件广播(如领导选举事件)。

TCP/UDP/8302 端口用于单个或多个数据中心之间的服务器节点的信息同步,即对 WAN 池(只包含 server 的 WAN Gossip 池,这些服务器主要位于不同的数据中心,通常通过互联网或广域网进行通信。)信息的同步。它针对互联网的高延迟进行了优化,能够实现跨数据中心请求。

TCP/8300 端口用于服务器节点。client端通过该端口 RPC 协议调用server端节点。

本文的命令都是用的docker原生命令,没有采用docker-compose文件启动的形式,所以有些命令可能会非常长,我会对用到的参数做详细解释

假设有3台服务器(没那么多服务器,所以会出现server端和client端部署到同一台的情况):

172.16.0.123

172.16.0.124

172.16.0.125

 启动server端命令如下:

docker run -d --restart=always --name=consul --net=host -v /consul/data:/consul/data consul agent -server -ui -bind=172.16.0.123 -client=0.0.0.0 -bootstrap-expect=3 -node=gw1_server
docker run -d --restart=always --name=consul --net=host -v /consul/data:/consul/data consul agent -server -join=172.16.0.123 -bind=172.16.0.124 -client=0.0.0.0 -node=gw2_server
docker run -d --restart=always --name=consul --net=host -v /consul/data:/consul/data consul agent -server -join=172.16.0.123 -bind=172.16.0.125 -client=0.0.0.0 -node=gw3_server

 

consul agent -server 表示运行在server模式下

-ui:表示启动一个ui界面

-bind:当前界面的IP地址

-client:表示监听IP地址,应对多网口的情况,可以指定只监听从内网过来的通信

-node:可以不指定,但是如果client和server端部署在同一台机器时,需要配置,以防出现问题

-join:表示加入某个主节点(这里是123)

-bootstrap-expect=3:表示在一共有三个consul的server端接入时启动,该参数如果不设置会在单点起来之后就启动,然后就会报错

-v /consule/data:/consul/data : 因为是采用docker部署,consul会把注册好的服务数据暂存在本地,所以需要把data目录外部挂载,如果docker重启,不需要服务重新注册

 

 启动client端命令如下:

docker run -d --restart=always --net=host --name=consulclient -v /consul/clientdata:/consul/data -e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' consul agent -bind=172.16.0.123 -client=0.0.0.0 -server-port=18300 -http-port=18500 -dns-port=18600 -serf-lan-port=18301 -serf-wan-port=18302 -retry-join=172.16.0.136:8301 -retry-join=172.16.0.124:8301 -retry-join=172.16.0.123:8301 -node=gw1_client
CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}:该参数好像是说docker部署下面,如果shell退出会导致程序终止,未尝试出来有啥区别
因为server端和client端都在同一台,所以需要修改client端的服务端口
-server-port=18300:参考上文8300端口的解释
-http-port=18500:参考上文8500的端口解释
-dns-port=18600:参考上文8600的端口解释
-serf-lan-port=18301:参考上文8301端口的解释
-serf-wan-port=18302:参考上文8302端口的解释
-retry-join=:写server端的地址,注意这里有三个retry-join,如果第一个节点的挂了,client端会自动注册到第二个节点,保证业务系统的正常运行,但是在切换过程中会出现短暂的从consul查不到数据的情况
 
 
 
 
 
 

 

posted on 2018-11-02 14:22  linkinshi  阅读(545)  评论(0编辑  收藏  举报

导航