本文演示 docker 下部署使用 consul。容器与宿主机的端口映射忽略,正常生产环境每个宿主机一个 consul,端口需要映射到宿主机
zookeeper 和 consul 比较
- 开发语言方面,zookeeper 采用 java 开发,安装的时候需要部署 java 环境;consul 采用 golang 开发,所有依赖都编译到了可执行程序中,即插即用。
- 部署方面,zookeeper 一般部署奇数个节点方便做简单多数的选举机制。consul 部署的时候分 server 节点和 client 节点(通过不同的启动参数区分),server 节点做 leader 选举和数据一致性维护,client 节点部署在服务机器上,作为服务程序访问 consul 的接口。
- 一致性协议方面,zookeeper 使用自定义的 zab 协议,consul 的一致性协议采用更流行的 Raft。
- zookeeper 不支持多数据中心,consul 可以跨机房支持多数据中心部署,有效避免了单数据中心故障不能访问的情况。
- 链接方式上,zookeeper client api 和服务器保持长连接,需要服务程序自行管理和维护链接有效性,服务程序注册回调函数处理 zookeeper 事件,并自己维护在 zookeeper 上建立的目录结构有效性(如临时节点维护);consul 采用 DNS 或者 http 获取服务信息,没有主动通知,需要自己轮训获取。
- 工具方面,zookeeper 自带一个 cli_mt 工具,可以通过命令行登录 zookeeper 服务器,手动管理目录结构。consul 自带一个 Web UI 管理系统, 可以通过参数启动并在浏览器中直接查看信息。
部署:
拉取镜像
docker search consul
复制代码
咱们用官方的镜像玩玩
docker pull consul
复制代码
不指定 tag 就拉取 last,当前版本是 1.5.2
启动 consul
启动节点 1(server 模式)
-node:节点的名称
-bind:绑定的