为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里搭建一个三个节点的集群,可是我只有两天服务器怎么办呢?我试过两台服务器组件集群,但是无法启动,所以这里部署一个【一台服务器三个节点】的伪集群。
我使用的安装文件是 apache-zookeeper-3.6.0-bin.tar.gz ,以下内容均以此版本进行说明。
1. 前期准备
zookeeper需要运行在Java环境下,【zookeeper-3.6.0】版本在jdk1.8下正常运行,这台云服务器安装的是JDK11【这里顺便测试一下能否在JDK11下运行】:
[root@aliyun ~]# java -version openjdk version "11" 2018-09-25 OpenJDK Runtime Environment 18.9 (build 11+28) OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
关闭防火墙:
# 查看防火墙状态 [root@aliyun ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1) # 如果是开启状态 关闭防火墙 [root@aliyun ~]# systemctl stop firewalld.service
2. 安装配置
2.1 解压
# 准备伪集群目录【zookeeper-cluster 数据文件夹 日志文件夹】【这里不知道有没有简单方法 知道的小伙伴在评论区分享一下 造福大家】 mkdir /usr/local/zookeeper-cluster cd /usr/local/zookeeper-cluster mkdir data log cd /usr/local/zookeeper-cluster/data mkdir 01 02 03 cd /usr/local/zookeeper-cluster/log mkdir 01 02 03 # 解压【这次不直接移动到/usr/local下】 [root@aliyun zookeeper]# tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz
2.2 修改配置
拷贝配置样本 zoo_sample.cfg 为 zoo.cfg 并进行修改【zookeeper 程序文件复制成三份后 zoo.cfg 还需要进行修改 将X修改成 1 2 3】【参数配置这里不再进行解释】可参考之前的《zookeeper 集群版》配置说明:
# 默认配置 tickTime=2000 initLimit=10 syncLimit=5 # 需要进行配置的 dataDir=/usr/local/zookeeper-cluster/data/0X dataLogDir=/usr/local/zookeeper-cluster/log/0X clientPort=218X # 【如果是多台服务器 则集群中每个节点通讯端口和选举端口可相同 伪分布式不能相同】 server.1=aliyun:2287:3387 server.2=aliyun:2288:3388 server.3=aliyun:2289:3389
2.3 复制zookeeper程序文件
# 复制到 zookeeper01 zookeeper02 zookeeper03 【这里只贴出一个】 cp -r /home/zookeeper/apache-zookeeper-3.6.0-bin/. /usr/local/zookeeper-cluster/zookeeper01
修改每个 zookeeper 程序文件的 zoo.cfg,这里只贴出 zookeeper01 的:
vim /usr/local/zookeeper-cluster/zookeeper01/conf/zoo.cfg # 默认配置【三个配置文件相同】 tickTime=2000 initLimit=10 syncLimit=5 # 配置数据和日志文件夹及客户端端口【三个配置文件不同】 dataDir=/usr/local/zookeeper-cluster/data/01 【另外两台 02 03】 dataLogDir=/usr/local/zookeeper-cluster/log/01 【另外两台 02 03】 clientPort=2181 【另外两台 2182 2183】 # 配置通讯端口和选举端口【三个配置文件相同】 server.1=aliyun:2287:3387 server.2=aliyun:2288:3388 server.3=aliyun:2289:3389
2.4 标识节点
分别在三个节点的数据存储目录下新建 myid 文件,并写入对应的节点标识。Zookeeper 集群通过myid 文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,选举出 leader节点。
echo "1" > /usr/local/zookeeper-cluster/data/01/myid echo "2" > /usr/local/zookeeper-cluster/data/02/myid echo "3" > /usr/local/zookeeper-cluster/data/03/myid
2.5 启动集群
/usr/local/zookeeper-cluster/zookeeper01/bin/zkServer.sh start /usr/local/zookeeper-cluster/zookeeper02/bin/zkServer.sh start /usr/local/zookeeper-cluster/zookeeper03/bin/zkServer.sh start # 【这里只贴出其中一个节点的成功日志】 ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-cluster/zookeeper01/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
2.5 集群验证
使用 jps 查看进程,可看到有三个zookeeper进程:
[root@aliyun ~]# jps -l 10993 org.apache.zookeeper.server.quorum.QuorumPeerMain 1652 org.apache.zookeeper.server.quorum.QuorumPeerMain 11048 org.apache.zookeeper.server.quorum.QuorumPeerMain
使用 zkServer.sh status 查看集群各个节点状态:
/usr/local/zookeeper-cluster/zookeeper01/bin/zkServer.sh status /usr/local/zookeeper-cluster/zookeeper02/bin/zkServer.sh status /usr/local/zookeeper-cluster/zookeeper03/bin/zkServer.sh status # 可以看到myid是2的是leader 1和3是follower【初始化的选举机制可自行了解一下】 [root@aliyun zookeeper01]# /usr/local/zookeeper-cluster/zookeeper01/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-cluster/zookeeper01/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: follower [root@aliyun zookeeper01]# /usr/local/zookeeper-cluster/zookeeper02/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-cluster/zookeeper02/bin/../conf/zoo.cfg Client port found: 2182. Client address: localhost. Mode: leader [root@aliyun zookeeper01]# /usr/local/zookeeper-cluster/zookeeper03/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-cluster/zookeeper03/bin/../conf/zoo.cfg Client port found: 2183. Client address: localhost. Mode: follower
至此,一台服务器实现三个节点的ZooKeeper伪集群,安装部署启动成功 😏