Zookeeper 最初是由雅虎(Yahoo!)开发的分布式协调服务项目,2008 年开源后成为 Apache软件基金会维护的顶级项目。它的设计目标是解决分布式系统中的协调问题,如配置管理、服务发现、分布式锁等。
单个Zookeeper 如果出现故障会导致服务不可用,需要手动重启。Zookeeper 集群支持多节点部署,部分节点宕机就不影响服务,另外所有写操作通过 Leader 同步到多数节点,保证数据的一致性。总之Zookeeper集群好处多多。
这几天用Docker来安装了个 Zookeeper 最小集群,3 个节点(1 Leader + 2 Follower),允许 1 个节点宕机。在这里记录一下安装步骤。
第一步,创建文件夹
由于我使用的是 Windows 环境,在 D盘建立了一个专门存放 docker 数据卷的目录。
如图所示,创建了三个zookeeper文件夹,分别用来存放 Zookeeper 的三个节点。
每个文件夹下myid分别对应不同的id。zookeeper1的myid文件内容为1,zookeeper2的myid文件内容为2,zookeeper3的myid文件内容为3。
第二步,创建docker-compose.yml
services:
zoo1:
image:zookeeper:3.8# 建议指定版本
hostname:zoo1
ports:
-"2181:2181"
environment:
ZOO_MY_ID:1
ZOO_SERVERS:"server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181"
volumes:
- type:bind
source:D:/docker-data/zookeeper-cluster/zookeeper1/data
target:/data
- type:bind
source:D:/docker-data/zookeeper-cluster/zookeeper1/datalog
target:/datalog
networks:
-zk_net
zoo2:
image:zookeeper:3.8
hostname:zoo2
ports:
-"2182:2181"
environment:
ZOO_MY_ID:2
ZOO_SERVERS:"server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181"
volumes:
- type:bind
source:D:/docker-data/zookeeper-cluster/zookeeper2/data
target:/data
- type:bind
source:D:/docker-data/zookeeper-cluster/zookeeper2/datalog
target:/datalog
networks:
-zk_net
zoo3:
image:zookeeper:3.8
hostname:zoo3
ports:
-"2183:2181"
environment:
ZOO_MY_ID:3
ZOO_SERVERS:"server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181"
volumes:
- type:bind
source:D:/docker-data/zookeeper-cluster/zookeeper3/data
target:/data
- type:bind
source:D:/docker-data/zookeeper-cluster/zookeeper3/datalog
target:/datalog
networks:
-zk_net
networks:
zk_net:
driver:bridge
在这个配置文件做了以下几件事:
1、定义了三个 Zookeeper 节点:zookeeper1、zookeeper2和zookeeper3
2、每个节点都指定了唯一的ZOO_MY_ID(Zookeeper 的 ID)
3、所有节点都在同一个虚拟网络zoo-net中
4、每个节点都映射了不同的端口:2181,2182,2183
第三步,启动集群
在docker-compose.yml文件所在目录执行:
docker-compose up -d
-d 参数表示“后台运行”。
等几秒钟,集群就搭好了!
查看容器是否运行成功:
docker ps
第四步,测试集群
使用客户端连接集群:
docker exec -it zookeeper1 zkCli.sh
其中 zookeeper1 替换为容器名称。
最后看到命令提示符,就代表创建集群成功了。
[zk: localhost:2181(CONNECTED) 0]
查看集群信息:
config
操作一下:
# 创建一个节点
create /test-node "Hello Zoo"
# 查看这个节点:
get /test-node
# 查看所有节点:
ls /
# 递归查看所有节点
ls -R /
还有其他命令:
# 查看节点创建时间
stat /your/node | grep ctime
# 查看ACL权限
getAcl /your/node
第五步,关闭和清理集群
当我们不需要用的时候,可以一键关闭并删除容器:
docker-compose down
如果还想把所有数据也清掉,加上-v参数:
docker-compose down -v
现在已经成功用 Docker Compose 搭建了一个 3 节点的 Zookeeper 集群,zookeeper集群到此结束,接下来就可以使用 Springboot 整合并使用zookeeper集群了。
领取专属 10元无门槛券
私享最新 技术干货