2019独角兽企业重金招聘Python工程师标准>>>
1. 做什么事情?
consul作为一个服务发现的工具在国内外都收到欢迎, 它的多数据中心是其他如zookerper工具所不能比的, 本文的目的是搭建一个准产品环境下的consul cluster 作为产品测试和教学演示, cluster所用到的服务器有Docker提供,运行14.0的Ubuntu操作系统.
cluster详细:
节点名称 | server/client | ip |
---|---|---|
server1 | server agent | 172.17.0.2 |
server2 | server agent | 172.17.0.3 |
server3 | server agent | 172.17.0.4 |
client1 | client agent | 172.17.0.5 |
cluster简介:
集群将由4个consul节点, 其中三个是server,一个是client, 其中client节点会暴露一些端口方便我们检查集群情况和查看consul ui.
2. 材料准备
-
一台服务器: 这台服务器已经安装了Docker, 是4个consul的宿主机, 查看集群情况也在这台服务器上执行而不是进入Docker Container内部查看因为有UI界面
-
4个节点配置文件(.json)+4个运行脚本文件(.sh):
cat client1.json
{"data_dir": "/opt/consulclient","log_level": "INFO","node_name": "client1","server": false,"ui_dir": "/opt/consul/web","http_api_response_headers": {"Access-Control-Allow-Origin": "*"},"addresses": {"http": "0.0.0.0"},"start_join": ["172.17.0.2", "172.17.0.3", "172.17.0.4"]
}
cat runClient1.sh
consul agent -config-file=/wk/consul/client1.jsoncat server1.json
{"data_dir": "/opt/consul","log_level": "INFO","node_name": "server1","server": true,"bind_addr": "172.17.0.2","bootstrap": true,"retry_join": ["172.17.0.2", "172.17.0.3", "172.17.0.4"]
}
cat runServer1.sh
consul agent -config-file=/wk/consul/server1.json -ui-dir=/opt/consul/webcat server2.json
{"data_dir": "/opt/consul","log_level": "INFO","node_name": "server1","server": true,"bind_addr": "172.17.0.3","retry_join": ["172.17.0.2", "172.17.0.3", "172.17.0.4"]
}
cat runServer2.sh
consul agent -config-file=/wk/consul/server2.jsoncat server3.json
{"data_dir": "/opt/consul","log_level": "INFO","node_name": "server1","server": true,"bind_addr": "172.17.0.4","retry_join": ["172.17.0.2", "172.17.0.3", "172.17.0.4"]
}
cat runServer3.sh
consul agent -config-file=/wk/consul/server3.json
- consul docker image: 准备一个安装好consul的 docker image,里面安装了consul和consul ui, 命名为consul 如下图:
注意该image中有一个wk文件夹也是需要的, 这里当成一个工作目录存放外部资源
3. 操作流程
创建共享目录供Docker Container使用:
在准备的服务器上创建一个/share/consul目录, 这个存放上述的8个材料文件, 这些目录最后会被共享到容器, 容器中的consul agent会在这个目录下找, 在之后的操作可以看到该目录被共享到了容器中的wk目录下.
顺序运行如下命令:
docker run --name=server1 -itd -v /share:/wk consul sh /wk/consul/runServer1.sh
docker run --name=server2 -itd -v /share:/wk consul sh /wk/consul/runServer2.sh
docker run --name=server3 -itd -v /share:/wk consul sh /wk/consul/runServer3.sh
docker run --name=client1 -itd -p 8500:8500 -v /share:/wk consul sh /wk/consul/runClient1.sh
4. 检查结果
因为在client1中开放了端口所以可以在宿主机上检查集群具体两个检查如下:
- 查看集群成员:curl -s http://localhost:8500/v1/agent/members | python -m json.tool
[{"Addr": "172.17.0.3","DelegateCur": 4,"DelegateMax": 5,"DelegateMin": 2,"Name": "server2","Port": 8301,"ProtocolCur": 2,"ProtocolMax": 5,"ProtocolMin": 1,"Status": 1,"Tags": {"build": "0.7.4:'1c442cb","dc": "dc1","id": "ad134d56-ab5d-d130-0488-0ab65f5504ad","port": "8300","role": "consul","vsn": "2","vsn_max": "3","vsn_min": "2"}},{"Addr": "172.17.0.5","DelegateCur": 4,"DelegateMax": 5,"DelegateMin": 2,"Name": "client1","Port": 8301,"ProtocolCur": 2,"ProtocolMax": 5,"ProtocolMin": 1,"Status": 1,"Tags": {"build": "0.7.4:'1c442cb","dc": "dc1","id": "ad134d56-ab5d-d130-0488-0ab65f5504ad","role": "node","vsn": "2","vsn_max": "3","vsn_min": "2"}},{"Addr": "172.17.0.4","DelegateCur": 4,"DelegateMax": 5,"DelegateMin": 2,"Name": "server3","Port": 8301,"ProtocolCur": 2,"ProtocolMax": 5,"ProtocolMin": 1,"Status": 1,"Tags": {"build": "0.7.4:'1c442cb","dc": "dc1","id": "ad134d56-ab5d-d130-0488-0ab65f5504ad","port": "8300","role": "consul","vsn": "2","vsn_max": "3","vsn_min": "2"}},{"Addr": "172.17.0.2","DelegateCur": 4,"DelegateMax": 5,"DelegateMin": 2,"Name": "server1","Port": 8301,"ProtocolCur": 2,"ProtocolMax": 5,"ProtocolMin": 1,"Status": 1,"Tags": {"bootstrap": "1","build": "0.7.4:'1c442cb","dc": "dc1","id": "ad134d56-ab5d-d130-0488-0ab65f5504ad","port": "8300","role": "consul","vsn": "2","vsn_max": "3","vsn_min": "2"}}
]
- 查看consul ui: 在浏览器打开http://localhost:8500/ui/
5. 学习资料
- consul配置
- 集群搭建参考
- 访问问题参考