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