consul集群搭建及数据迁移

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值