consul集群搭建及数据迁移

  • Post author:
  • Post category:其他


consul分布式集群搭建

环境准备

三台机器:

vm-a    10.200.110.90    centos7

vm-b    10.200.110.91    centos7

vm-c    10.200.110.93    centos7

Consul官网(https://www.consul.io/downloads.html)下载相应系统的consul可执行文件并放系统PATH环境变量目录内。

我下载的是consul_1.4.3_linux_amd64.zip,在上面的每台机器上解压,并拷贝到/usr/local/bin目录下。

unzip consul_1.4.3_linux_amd64.zip

mv cosul /usr/local/bin

集群启动

10.200.110.90启动consul

consul agent -server -bootstrap-expect=3 -data-dir=/tmp/consul -node=10.200.110.90 -bind=10.200.110.90 -client=0.0.0.0 -datacenter=shenzhen -ui

10.200.110.91启动consul

consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node 10.200.110.91 -bind=10.200.110.91 -client=0.0.0.0 -datacenter shenzhen -ui

10.200.110.93启动consul

consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node 10.200.110.93 -bind=10.200.110.93 -client=0.0.0.0 -datacenter shenzhen -ui

参数说明:

server: 以server身份启动。默认是client

bootstrap-expect:集群要求的最少server数量,当低于这个数量,集群即失效。

data-dir:data存放的目录,更多信息请参阅consul数据同步机制

node:节点id,集群中的每个node必须有一个唯一的名称。默认情况下,Consul使用机器的hostname

bind:监听的ip地址。默认绑定0.0.0.0,可以不指定。表示Consul监听的地址,而且它必须能够被集群中的其他节点访问。Consul默认会监听第一个private IP,但最好还是提供一个。生产设备上的服务器通常有好几个网卡,所以指定一个不会出错

client: 客户端的ip地址,0.0.0.0是指谁都可以访问(不加这个,下面的ui :8500无法访问)

ui: 可以访问UI界面

-config-dir指定配置文件夹,Consul会加载其中的所有文件

-datacenter 指定数据中心名称,默认是dc1

此时三台机器都会打印:

2019/03/20 10:57:36 [INFO] agent: Started HTTP server on 127.0.0.1:8500 (tcp)

2019/03/20 10:57:36 [INFO] agent: started state syncer

2019/03/20 10:57:44 [ERR] agent: failed to sync remote state: No cluster leader

此时三台机器还未join,不能算是一个集群,三台机器上的consul均不能正常工作,因为leader未选出。


三台机器组成consul集群

consul集群:当一个consul agent启动后,它不知道任何其他节点,要学习到集群中的其他节点,agent必须加入一个已经存在的集群(cluster)。要加入这样的集群,它只需要知道这个集群中的一个节点即可。它加入后,将会和这个member gossip(交谈)并迅速发现集群中的其他节点。一个consul agent可以加入任何类型的其他agent,而不只是那些运行于server mode的agent。

分别登录第2台和第3台虚拟机上执行如下命令,让consul加入集群:

10.200.110.91加入10.200.110.90

[root@localhost consul-cluster]# consul join 10.200.110.90

Successfully joined cluster by contacting 1 nodes.

[root@localhost consul-cluster]#

10.200.110.93加入10.200.110.90

[root@localhost consul-cluster]# consul join 10.200.110.90

Successfully joined cluster by contacting 1 nodes.

[root@localhost consul-cluster]#

很快三台机器都会打印:

2019/03/20 10:59:12 [INFO] raft: Added peer d89335fd-cfb8-1fc0-3902-b847e125fa2c, starting replication

2019/03/20 10:59:12 [INFO] consul: cluster leadership acquired

2019/03/20 10:59:12 [INFO] consul: New leader elected: 10.200.110.90

证明此时leader已经选出,集群可以正常工作。访问:http://10.200.110.90:8500/

集群状态查看

[root@localhost ~]# consul operator raft list-peers

查看members状态:

[root@localhost ~]# consul members

集群参数get/set测试

10.200.110.93的set操作:

[root@localhost ~]# consul kv put addr nanshan

Success! Data written to: addr

[root@localhost ~]#

10.200.110.91的get操作:

[root@localhost consul-cluster]# consul kv get addr

nanshan

[root@localhost consul-cluster]#

在10.200.110.90可以正常设置key的值为value,并能正常查回来。三台机器获取key的值均为value,如此可知key的值已经在集群中同步。

consul数据迁移

需要备份的主要有两类数据:consul相关的配置文件、consul的服务器状态,采用下面的脚本备份就可以了:

ts=$(date +%Y%m%d%H%M%S)

# 备份配置文件

tar -czpf consul_config_$ts.tar.gz /etc/consul/config.json /etc/consul/consul.d

# 备份consul的服务器状态,注意由于该consul开启了ACL,执行consul snapshot save时必须带Management Token,关于consul ACL token的说明见上一篇”consul安全加固”

consul snapshot save –http-addr=http://10.12.142.216:8500 -token=b3a9bca3-6e8e-9678-ea35-ccb8fb272d42 consul_state_$ts.snap

# 查看一下生成的consul服务器状态文件

consul snapshot inspect consul_state_$ts.snap

最后将生成的consul_config_xxx.tar.gz、consul_state_xxx.snap拷贝到其它服务器妥善存储。

还原也比较简单,采用下面的脚本就可以了:

# 还原配置文件

tar -xzpf consul_config_20180521145032.tar.gz -C /

# 还原consul服务器状态

consul snapshot restore –http-addr=http://10.12.142.216:8500 -token=b3a9bca3-6e8e-9678-ea35-ccb8fb272d42 consul_state_20180521145032.snap

# 导出所有kv键值对,注意最后一个参数是导出键值对的前缀,为空字符串说明要导出所有

consul kv export –http-addr=http://192.168.29.143:18500  ” > /consul/backup/consul_kv_20210521.json

导入就更简单了:

consul kv import –http-addr=http://10.12.142.216:8500 -token=b3a9bca3-6e8e-9678-ea35-ccb8fb272d42 @consul_kv_20210521.json



版权声明:本文为weixin_42820531原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。