Docker在多台服务器部署consul集群
Docker在多台服务器部署consul集群
-
规划与准备
-
本次计划部署的consul集群有6个节点,3个server类型,3个client类型
节点IP
|
类型
|
端口
|
172.18.69.40
|
server1、client1
|
8500/8600、58500/58600
|
172.18.69.41
|
server2、client2
|
8500/8600、58500/58600
|
172.18.69.42
|
server3、client3
|
8500/8600、58500/58600
|
在第一台服务器中运行server作为leader
docker run -d --name consul-1 -h=172.18.69.40 --net=host -e CONSUL_BIND_INTERFACE=eth0 -v /data/consul/config:/config/file consul:1.9.5 agent -config-dir=/config/file -server=true -client=0.0.0.0 -bind=172.18.69.40 -ui -bootstrap-expect=2
接下来一台台加入集群
docker run -d -v /data/consul/config:/config/file --name consul-2 -h=172.18.69.41 --net=host -e CONSUL_BIND_INTERFACE=eth0 consul:1.9.5 agent -config-dir=/config/file -server=true -client=0.0.0.0 -join=172.18.69.40 -ui
接下来第二台加入集群
docker run -d -v /data/consul/config:/config/file --name consul-3 -h=172.18.69.42 --net=host -e CONSUL_BIND_INTERFACE=eth0 consul:1.9.5 agent -config-dir=/config/file -server=true -client=0.0.0.0 -join=172.18.69.40 -ui
- 接下来三个client加入集群
docker run -d -v /data/consu-client-1/config:/config/file --name consul-client1 -h=client1 -p 58500:8500 -p 58600:8600 -p 58300:8300 -p 58301:8301 -p 58302:8302 -e CONSUL_BIND_INTERFACE=eth0 consul:1.9.5 agent -config-dir=/config/file -server=false -client=0.0.0.0 -join=172.18.69.40 -ui
docker run -d -v /data/consu-client-2/config:/config/file --name consul-client2 -h=client2 -p 58500:8500 -p 58600:8600 -p 58300:8300 -p 58301:8301 -p 58302:8302 -e CONSUL_BIND_INTERFACE=eth0 consul:1.9.5 agent -config-dir=/config/file -server=false -client=0.0.0.0 -join=172.18.69.40 -ui
docker run -d -v /data/consu-client-3/config:/config/file --name consul-client3 -h=client3 -p 58500:8500 -p 58600:8600 -p 58300:8300 -p 58301:8301 -p 58302:8302 -e CONSUL_BIND_INTERFACE=eth0 consul:1.9.5 agent -config-dir=/config/file -server=false -client=0.0.0.0 -join=172.18.69.40 -ui
查看状态
-
查看投票状态
docker exec -t consul-1 consul operator raft list-peers
-
查看集群成员
docker exec -t consul-1 consul members
KV存储的导入导出
consul直接提供命令对KV里存储的数据进行导入导出,如下
$ ts=$(date +%Y%m%d%H%M%S)
# 导出所有kv键值对,注意最后一个参数是导出键值对的前缀,为空字符串说明要导出所有 $ docker exec -t consul-1 consul kv export --http-addr=http://127.0.0.1:8500 -token=“xxxx-xxxx-xxxx-xxxx-xxxxxx” > /config/file/consul_kv_$ts.json
# 查看下导出的json文件格式
$ cat /config/file/consul_kv_$ts.json
发现是每个键值对都是json数值中一项,其中key为键值对Key的名称,value为键值对Value的base64编码,使用base64 -d
命令编码就可以看到原始的value值,如:
$ echo 'eyJ2ZXJzaW9uX3RpbWVzdGFtcCI6IC0xfQ==' | base64 -d {"version_timestamp": -1}
导入就更简单了:
docker exec -t consul-1 consul kv import --http-addr=http://ip:8500 -token="xxxx-xxxx-xxxx-xxxx-xxxxxx" @./consul_kv_20180521150322.json
cat consul-kv.json |
docker exec -t consul-1 consul kv import -http-addr=http://ip:8500 -token="xxxx-xxxx-xxxx-xxxx-xxxxxx" -
http://t.zoukankan.com/gudanshiyigerendekuanghuan-p-10603516.html