参考链接: https://ken.io/note/zookeeper-cluster-deploy-guide
一.前言
1.1ZooKeeper简介
ZooKeeper是一个开源的分布式应用程序协调服务,是Google的Chubby一个开源的实现。ZooKeeper为分布式应用提供一致性服务,提供的功能包括:分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)、分布式锁(Distributed Lock)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。
ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
1.2ZooKeeper集群角色说明
ZooKeeper主要有领导者(Leader)、跟随者(Follower)和观察者(Observer)三种角色。
二.准备工作
2.1集群节点规划
ZooKeeper在提供分布式锁等服务的时候需要过半数的节点可用。另外高可用的诉求来说节点的个数必须>1,所以ZooKeeper集群需要是>1的奇数节点。例如3、5、7等等。
本次我们规划三个节点,操作系统选用CentOS 7。
节点名 | IP | 说明 |
---|---|---|
zookeeper01 | 192.168.172.8 | zookeeper节点 |
zookeeper02 | 192.168.172.9 | zookeeper节点 |
zookeeper03 | 192.168.172.10 | zookeeper节点 |
2.2软件版本说明
项 | 说明 |
---|---|
Linux Server | Centos 7 |
JDK | 1.8.0_282 |
Zookeeper | zookeeper-3.4.14 |
2.3部署JDK8
所有节点均需要安装JDK8。
yum search jdk
yum install java-1.8.0-openjdk.x86_64 -y
java -version
三.部署流程
本次一共要部署3个zookeeper节点,所有文中没有指定机器的操作都表示每个节点都要执行该操作。
3.1下载Zookeeper和基础准备
- 1.下载ZooKeeper
官方镜像选择:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
cd /home/download
浏览器中访问: https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
下载需要的zookeeper版本,我这里下载的是zookeeper-3.4.14.tar.gz
- 2.创建ZooKeeper相关目录
创建应用目录
mkdir /usr/zookeeper
创建数据目录
mkdir /zookeeper
mkdir /zookeeper/data
mkdir /zookeeper/logs
解压到指定目录
tar -zvxf zookeeper-3.4.14.tar.gz -C /usr/zookeeper
- 3.配置环境变量
修改环境变量文件
vim /etc/profile
增加以下内容
export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.14
export PATH=$ZOOKEEPER_HOME/bin:$PATH
- 4.使环境变量生效
source /etc/profile
- 5.查看配置结果
echo $ZOOKEEPER_HOME
既然已配置环境变量,为了方便访问ZooKeeper目录
后续通过$ZOOKEEPER_HOME代替/usr/zookeeper/zookeeper-3.4.14
- 6.主机之间的解析做好解析,绑定hosts写入/etc/hosts中
vim /etc/hosts
192.168.172.8 zookeeper01
192.168.172.9 zookeeper02
192.168.172.10 zookeeper03
3.2配置Zookeeper
- 1.ZooKeeper基础配置
进入ZooKeeper配置目录
cd $ZOOKEEPER_HOME/conf
新建配置文件
vim zoo.cfg
写入以下内容并保存
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/data
dataLogDir=/zookeeper/logs
clientPort=2181
server.1=192.168.172.8:2888:3888
server.2=192.168.172.9:2888:3888
server.3=192.168.172.10:2888:3888
zoo.cfg配置信息:
zookeeper 的三个端口作用:
- 2181 : 对 client 端提供服务
- 2888 : 集群内机器通信使用
- 3888 : 选举 leader 使用
zk01:
echo "1" > /zookeeper/data/myid
zk02:
echo "2" > /zookeeper/data/myid
zk03:
echo "3" > /zookeeper/data/myid
- 3.防火墙配置
开放端口
firewall-cmd --add-port=2181/tcp --permanent
firewall-cmd --add-port=2888/tcp --permanent
firewall-cmd --add-port=3888/tcp --permanent
重新加载防火墙配置
firewall-cmd --reload
在本地测试环境,如果觉得配置防火墙策略太麻烦的话,可以直接关闭防火墙和设置selinux==disabled
systemctl stop firewalld
systemctl disable firewalld
vim /etc/sysconfig/selinux
SELINUX=disabled
3.3启动ZooKeeper
进入ZooKeeper bin目录
cd $ZOOKEEPER_HOME/bin
启动
sh zkServer.sh start
出现以下字样表示启动成功:
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper … STARTED
四.集群查看&测试连接工作
- 1.查看节点状态
sh $ZOOKEEPER_HOME/bin/zkServer.sh status
状态信息
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower
如果为领导者节点则Mode:leader
- 2.客户端连接测试
这里随机选其中一个节点作为客户端连接其他节点即可
指定Server进行连接
sh $ZOOKEEPER_HOME/bin/zkCli.sh -server 192.168.172.9:2181
正常连接后会进入ZooKeeper命令行,显示如下:
[zk: 192.168.172.9:2181(CONNECTED) 0]
- 3.输入命令测试
查看ZooKeeper根
[zk: 192.168.172.9:2181(CONNECTED) 0] ls /
[zookeeper]
五.备注
5.1zookeeper常用配置项说明
5.2附录
参考链接:
https://www.jianshu.com/p/abbc1411ed9d
https://zookeeper.apache.org/doc/current/zookeeperStarted.html