consul之集群搭建

基本概念

(1) 每个节点运行的consul进程,都是一个consul agent , 节点包括server和client节点.
(2) Consul agent 分server 和 client 两种角色.
(3) 每个集群或数据中心需要3-5个server节点, 其它需要注册与发现服务的节点就是client节点,也就是你的应用所在节点是client节点.
(4) server节点用来保存数据,处理请求. client节点不保存数据, 转发请求到server节点.

Consul常用端口

类型 端口 说明
dns 8600 The DNS Server
http 8500 The HTTP API
https The HTTPS API
rpc 8400 The CLI RPC endpoint
serf_lan 8301 The Serf LAN port
serf_wan 8302 the Serf WAN port
server 8300 Server RPC address

集群环境

主机名 consul集群中node名 IP地址 Consul角色
node4 consul-server01 192.168.1.4 server
node5 consul-server02 192.168.1.5 server
node6 consul-server03 192.168.1.6 server
node101 consul-client01 192.168.1.101 client

==server节点==

(1) 建立相应的数据和配置目录
1
2
3
$ mkdir -p /opt/consul/data
$ mkdir -p /opt/consul/conf
$ mkdir -p /opt/consul/run/
(2) 安装consul
1
2
3
4
# 其它版本: https://www.consul.io/downloads.html
$ wget https://releases.hashicorp.com/consul/0.8.1/consul_0.8.1_linux_amd64.zip
$ unzip consul_0.8.1_linux_amd64.zip
$ mv consul /usr/local/bin/
(3) 创建运行consul专有用户
1
2
$ useradd -M -s /sbin/nologin consul
$ chown -R consul.consul /opt/consul/
(4) 创建配置文件

consul-server01

1
2
$ vim /etc/default/consul
CONSUL_FLAGS="-server -bootstrap -syslog -ui -data-dir=/opt/consul/data -config-dir=/opt/consul/conf -pid-file=/opt/consul/run/consul.pid -client=192.168.1.4 -bind=192.168.1.4 -node=consul-server01"

consul-server02

1
2
$ vim /etc/default/consul
CONSUL_FLAGS="-server -syslog -ui -data-dir=/opt/consul/data -config-dir=/opt/consul/conf -pid-file=/opt/consul/run/consul.pid -client=192.168.1.5 -bind=192.168.1.5 -node=consul-server02 "

consul-server03

1
2
$ vim /etc/default/consul
CONSUL_FLAGS="-server -syslog -ui -data-dir=/opt/consul/data -config-dir=/opt/consul/conf -pid-file=/opt/consul/run/consul.pid -client=192.168.1.6 -bind=192.168.1.6 -node=consul-server03"

注意:
(1) consul-server02 和 consul-server03 不需配置选项“-bootstrap”

(5) 创建Systemd配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ vim /etc/systemd/system/consul.service

[Unit]
Description=Consul service discovery agent
Requires=network-online.target
After=network-online.target

[Service]
User=consul
Group=consul
EnvironmentFile=-/etc/default/consul
Environment=GOMAXPROCS=2
Restart=on-failure
ExecStartPre=[ -f "/opt/consul/run/consul.pid" ] && /usr/bin/rm -f /opt/consul/run/consul.pid
#ExecStartPre=/usr/local/bin/consul configtest -config-dir=/opt/consul/conf
ExecStart=/usr/local/bin/consul agent $CONSUL_FLAGS
ExecReload=/bin/kill -HUP $MAINPID
KillSignal=SIGTERM
TimeoutStopSec=5

[Install]
WantedBy=multi-user.target
(6) 分别启动consul
1
systemctl start consul.service

==到此我们已经启动了三个Consul Server,这三个Consul Server现在还对彼此没有任何感知。它们都为单节点的集群,每个集群都仅包含一个成员。
可在各个节点运行如下命令查看.(以consul-server01为例)==

1
$ consul members --http-addr 192.168.1.4:8500
(7) 为了让三个Server间能互相感知,这里就要让其它二个Server加入另一个Server的集群中。
1
2
consul-server02加入consul-server01,在consul-server02上操作:
$ consul join --http-addr 192.168.1.5:8500 192.168.1.4
1
2
consul-server03加入consul-server01,在consul-server03上操作:
$ consul join --http-addr 192.168.1.6:8500 192.168.1.4
1
2
3
4
5
6
再次运行命令查看,就发现有三个成员了.
[root@node4 data]# consul members --http-addr 192.168.1.4:8500
Node Address Status Type Build Protocol DC Segment
consul-server01 192.168.1.4:8301 alive server 1.0.0 2 dc1 <all>
consul-server02 192.168.1.5:8301 alive server 1.0.0 2 dc1 <all>
consul-server03 192.168.1.6:8301 alive server 1.0.0 2 dc1 <all>

==client节点==

配置过程大部分同server节点相同,不同处如下列出.

TIPS:对于consul client,用容器运行也可以的,具体见,https://hub.docker.com/_/consul/

(4) 创建配置文件

consul-client01

1
2
$ vim /etc/default/consul
CONSUL_FLAGS="-syslog -data-dir=/opt/consul/data -config-dir=/opt/consul/conf -pid-file=/opt/consul/run/consul.pid -client=192.168.1.101 -bind=192.168.1.101 -join=192.168.1.4 -node=consul-client01"

==该节点是Client角色,所以我们不指定它启动为服务器模式,这里启动的时候就会自动加入一个已有集群,因为启动时加入了-join参数,该参数可以自动加入一个已知Consul集群。==

1
2
3
4
5
6
7
此时查询集群成员
[root@node101 conf]# consul members --http-addr 192.168.1.101:8500
Node Address Status Type Build Protocol DC Segment
consul-server01 192.168.1.4:8301 alive server 1.0.0 2 dc1 <all>
consul-server02 192.168.1.5:8301 alive server 1.0.0 2 dc1 <all>
consul-server03 192.168.1.6:8301 alive server 1.0.0 2 dc1 <all>
consul-client01 192.168.1.101:8301 alive client 1.0.0 2 dc1 <default>

参考

(1)https://www.hi-linux.com/posts/28048.html
(2)https://www.hi-linux.com/posts/6132.html