consul多数据中心搭建

自建IDC后面简称own、阿里云机房ali、腾讯云机房tx
own机房:内网10.10.10.0/24,边界节点,10.10.10.100/101.xxx.80.xxx
ali机房:内网10.10.10.0/24,边界节点,10.10.10.100/xxx.43.xxx.50
tx机房:内网10.10.10.0/24,边界节点,10.10.10.100/xxx.159.xxx.35
1、server、client节点部署
所有节点的consul服务均由supervisord守护管理。
idc机房配置3个server模式的节点,其它的均是client模式的节点,server和client配置各举例一个
server模式:(边界server节点的配置稍有不同,后面详细介绍):

1
2
3
4
5
6
7
8
9
10
11
12
[program:consul_server]
command=/usr/local/consul/bin/consul agent -server -bootstrap-expect 3 -data-dir /usr/local/consul/data/ -config-dir /usr/local/consul/config/ -node=own-server02 -bind=10.10.10.105 -dc=xxx-own
process_name=%(process_num)s
numprocs=1
directory=/usr/local/consul/bin/
autostart=true
autorestart=true
startsecs=1
redirect_stderr=true
stdout_logfile=/opt/log/consul/consul_server.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=5

client模式:

1
2
3
4
5
6
7
8
9
10
11
12
[program:consul_client]
command=/usr/local/consul/bin/consul agent -data-dir /usr/local/consul/data/ -node=own-client04 -bind=10.10.10.214 -config-dir=/usr/local/consul/config/ -dc=xxx-own
process_name=%(process_num)s
numprocs=1
directory=/usr/local/consul/bin/
autostart=true
autorestart=true
startsecs=1
redirect_stderr=true
stdout_logfile=/opt/log/consul/consul_client.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=5

ali、tx机房的server、client节点配置类似,有区别的参数就是-dc、-bind、-node即所属的数据中心、用于集群通信的监听ip、节点名称。
每次添加一个新的节点后,consul join加入到本地集群已有的任意一个节点即可加入这个集群(这个动作可以做到批量装机里面)。

2、集群之间的通信设置
每个集群选取一个处于server模式的节点作为边界节点,配置与集群内的其它server模式的节点稍有差异:

1
2
3
4
5
6
7
8
9
10
11
12
[program:consul_server]
command=/usr/local/consul/bin/consul agent -server -bootstrap-expect 3 -advertise-wan=101.xxx.80.xxx -data-dir /usr/local/consul/data/ -config-dir /usr/local/consul/config/ -node=own-server03 -dc=xxxx-own
process_name=%(process_num)s
numprocs=1
directory=/usr/local/consul/bin/
autostart=true
autorestart=true
startsecs=1
redirect_stderr=true
stdout_logfile=/opt/log/consul/consul_server.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=5

相比于其它server模式节点,需要指定-advertise-wan参数。如果不指定该参数,consul join -wan加入一个集群的时候,默认使用的是内外ip(节点环境是有内外网两个以上ip),造成集群之间通信失败(如果集群之间的内网没有互通)。
每个边界节点将-advertise-wan设置成公网ip,用于集群之间的通信。
如果边界节点开启了防火墙,需要将对方的ip地址加入白名单,或者将TCP/UDP的8302端口加入彼此的白名单。
最后任意一个边界节均可以查看到各个边界节点状态信息:

1
2
3
4
5
6
$ consul members -wan
Node Address Status Type Build Protocol DC
own-server02.xxxx-own 101.xxx.80.xxx:8302 alive server 0.x.x 2 xxxx-own
ali-server03.xxxx-ali xxx.43.xxx.50:8302 alive server 0.x.x 2 xxxx-ali
tx-server02.xxxx-tx xxx.159.xxx.35:8302 alive server 0.x.x 2 xxxx-tx
$

3、集群UI管理界面设置
将官方提供的ui界面文件部署在任意一个边界节点上,可以访问到任何一个集群的节点状态。客户端(http、dns、rpc)默认监听地址是127.0.0.1,访问ui的端口是http的8500端口,如果不设置客户端监听ip,需要一个代理(nginx)将本地的8500端口转发到外网,也可以直接指定client的监听ip:

1
2
3
4
5
6
7
8
9
10
11
12
[program:consul_server]
command=/usr/local/consul/bin/consul agent -server -bootstrap-expect 3 -advertise-wan=101.xxx.80.xxx -data-dir /usr/local/consul/data/ -config-dir /usr/local/consul/config/ -node=own-server03 -ui-dir /usr/local/consul/web/ -bind=10.10.10.100 -client=0.0.0.0 -dc=xxxx-own
process_name=%(process_num)s
numprocs=1
directory=/usr/local/consul/bin/
autostart=true
autorestart=true
startsecs=1
redirect_stderr=true
stdout_logfile=/opt/log/consul/consul_server.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=5

参数-client用来指定client监听ip,处于安全考虑可以监听在内网10.10.10.100,但是consul命令默认访问的是127.0.0.1端口,故监听0.0.0.0。配置成功后可以看到各个集群之间的状态:
consul02

----------------本文结束 感谢阅读----------------