简介
ZooKeeper
:1
个开源的分布式应用程序协调服务,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper
支持以单机模式安装运行,但它的长处在于通过分布式ZooKeeper
集群(1
个Leader
,多个Follower
),基于一定的策略来保证ZooKeeper
集群的稳定性和可用性,从而实现分布式应用的可靠性。
环境
网址
JDK
:《传送门》。ZooKeeper
:《传送门》。- 管理员指南:《传送门》。
版本
OS
:CentOS 7.7
、Ubuntu 16.04
。JDK
:1.8
。ZooKeeper
:3.6.1
。
节点
ZooKeeper
在提供分布式锁等服务的时候需要过半数的节点可用。- 高可用的本质:节点的个数必须大于
1
,所以ZooKeeper
集群的节点个数必须为大于1
的奇数节点。例如3
、5
、7
等。
主机名 | IP |
应用 |
---|---|---|
cluster-hadoop-01 |
172.18.20.3 |
ZooKeeper |
cluster-hadoop-02 |
172.18.20.4 |
ZooKeeper |
cluster-hadoop-03 |
172.18.20.5 |
ZooKeeper |
角色
ZooKeeper
的角色:领导者(Leader
)、跟随者(Follower
)和观察者(Observer
)。- 领导者:为客户端提供读和写的服务,负责投票的发起和决议,更新系统状态。
- 跟随者:为客户端提供读服务,如果是写服务则转发给
Leader
,在选举过程中参与投票。 - 观察者:为客户端提供读服务器,如果是写服务则转发给
Leader
,在选举过程中不参与投票,也不参与过半写成功策略,在不影响写性能的情况下提升集群的读性能。
功能
ZooKeeper
为分布式应用提供一致性服务,提供的功能包括:- 命名服务:
Naming Service
。 - 分布式锁:
Distributed Lock
。 - 集群维护:
Group Maintenance
。 - 分布式同步:
Distributed Synchronization
。
- 命名服务:
部署
基础
CentOS
- 关闭
SELinux
:
1 | setenforce 0 |
- 关闭防火墙:
1 | systemctl stop firewalld.service |
Common
- 修改主机名:
1 | echo "cluster-hadoop-01" > /etc/hostname |
- 内部解析:
1 | echo '127.0.0.1 localhost' > /etc/hosts |
- 提示符:
1 | echo 'export PS1="\u@\[\e[1;93m\]\h\[\e[m\]:\w\\$\[\e[m\] "' >> /root/.bashrc |
- 更换国内软件源: 《CentOS/Ubuntu的国内软件源》。
JDK
- 参考《Linux上安装JDK》,完成
JDK
的安装。
ZooKeeper
- 从
Apache
下载最新版本的ZooKeeper
二进制文件。 - 解压到指定目录:
1 | tar -zxf apache-zookeeper-3.6.1-bin.tar.gz -C /opt/ |
- 创建软连接:
1 | ln -sf /opt/zookeeper-3.6.1 /opt/zookeeper |
- 环境变量:
1 | echo '' >> /etc/profile |
- 创建工作目录:
1 | # 日志目录 |
- 编辑
zoo.cfg
:
1 | cp -a /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg |
1 | # CS心跳通信间隔(毫秒) |
- 编辑
zoo.cfg.dynamic
:
1 | vim /opt/zookeeper/conf/zoo.cfg.dynamic |
1 | # server.<positive id>=<address>:<port>:<port>[:role];[<client address>:]<client port> |
- 编辑
myid
:
1 | # 每个节点将自己的<positive id>的值填入<dataDir>目录的<myid>文件中 |
- 编辑
zkEnv.sh
:
1 | vim /opt/zookeeper/bin/zkEnv.sh |
1 | # 找到脚本中使用<JAVA_HOME>的地方,在其前面添加代码 |

- 编辑
zkServer.sh
:
1 | vim /opt/zookeeper/bin/zkServer.sh |
1 | # 找到<ZOOMAIN>赋值的下方添加配置 |

- 编辑
system
:
1 | vim /etc/systemd/system/zookeeper.service |
1 | [Unit] |
- 更改目录权限:
1 | chown -R root:root /opt/zookeeper |
- 同步到其他节点:
1 | rsync -azPS --delete /opt/zookeeper-3.6.1 cluster-hadoop-02:/opt/ |
- 启动服务:
1 | systemctl start zookeeper.service |
- 获取服务状态:
1 | systemctl status zookeeper.service |
- 获取版本信息:
1 | echo stat | nc cluster-hadoop-01 2181 |
- 客户端连接测试:
1 | /opt/zookeeper/bin/zkCli.sh -server cluster-hadoop-01:2181 |
维护
动态扩容
- 暂无。
排错
Ⅰ
问题描述
- 通过请求端口,获取版本信息时,有如下报错:
1 | echo stat | nc cluster-hadoop-01 2181 |
解决过程
- 查询后,发现是没在
zkServer.sh
中添加白名单的原因:
1 | vim /opt/zookeeper/bin/zkServer.sh |
1 | # 找到脚本中<ZOOMAIN>被赋值的地方,在其后面添加代码 |