使用Docker搭建Consul集群

1. 做什么事情?

consul作为一个服务发现的工具在国内外都收到欢迎, 它的多数据中心是其他如zookerper工具所不能比的, 本文的目的是搭建一个准产品环境下的consul cluster 作为产品测试和教学演示, cluster所用到的服务器有Docker提供,运行14.0的Ubuntu操作系统.

cluster详细:

节点名称server/clientip
server1server agent172.17.0.2
server2server agent172.17.0.3
server3server agent172.17.0.4
client1client agent172.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.json

cat 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/web

cat 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.json

cat 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 如下图:

consul image

注意该image中有一个wk文件夹也是需要的, 这里当成一个工作目录存放外部资源

3. 操作流程

创建共享目录供Docker Container使用:

在准备的服务器上创建一个/share/consul目录, 这个存放上述的8个材料文件, 这些目录最后会被共享到容器, 容器中的consul agent会在这个目录下找, 在之后的操作可以看到该目录被共享到了容器中的wk目录下. file tree

顺序运行如下命令:

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中开放了端口所以可以在宿主机上检查集群具体两个检查如下:


[
    {
        "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"
        }
    }
]

5. 学习资料

转载于:https://my.oschina.net/jimmywa/blog/834108

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值