ZooKeeper 集群高可用配置指南
前期准备与检查
在开始配置之前,请确保所有节点都已进行以下检查:
-
网络检查:
- 使用
ip addr
命令查看 IP 地址。 - 使用
systemctl status firewalld
命令检查防火墙状态。 - 使用
ping www.baidu.com
测试网络连通性。 - 检查
/etc/hosts
文件,确保主机名和 IP 地址的映射正确。
- 使用
-
时间同步检查:
- 使用
date
命令检查系统时间是否同步。集群中所有节点的时间必须保持一致。 - 安装ntp服务
yum install ntp
- 同步时间
ntpdate -u ntp1.aliyun.com
- 查看时间
date
- 使用
Zookeeper 安装与配置
1. 安装与解压
- 将 ZooKeeper 压缩包上传到
/opt/software/
目录下。 - 使用以下命令解压:
tar -zxvf /opt/software/apache-zookeeper-3.5.6-bin.tar.gz
- 重命名解压后的文件夹,方便管理:
mv apache-zookeeper-3.5.6-bin zookeeper-3.5.6
- 进入 ZooKeeper 目录:
cd /opt/module/zookeeper-3.5.6
2. 创建数据目录与 myid
文件
- 创建用于存放数据的目录:
mkdir data
- 进入
data
目录并创建myid
文件。myid
文件是 ZooKeeper 集群中每个节点身份的唯一标识。- 在主节点 (master) 上执行:
cd data echo 1 > myid cat myid
- 在从节点 slave1 上执行:
cd /opt/module/zookeeper-3.5.6/data echo 2 > myid cat myid
- 在从节点 slave2 上执行:
cd /opt/module/zookeeper-3.5.6/data echo 3 > myid cat myid
- 在主节点 (master) 上执行:
3. 配置 zoo.cfg
文件
- 进入配置目录:
cd /opt/module/zookeeper-3.5.6/conf
- 复制配置模板文件:
cp zoo_sample.cfg zoo.cfg
- 编辑
zoo.cfg
文件:vi zoo.cfg
- 在文件中修改或添加以下配置:
dataDir
:指定 ZooKeeper 数据文件的存储目录。dataDir=/opt/module/zookeeper-3.5.6/data
server
:定义集群中的每个节点。格式为server.<ID>=<主机名>:<心跳端口>:<选举端口>
,其中<ID>
必须与节点的myid
文件中的数字对应。server.1=master:2888:3888 server.2=slave1:2888:3888 server.3=slave2:2888:3888
4. 配置环境变量
- 编辑
/etc/profile
文件:vi /etc/profile
- 在文件末尾添加以下内容,以便于在任意位置执行 ZooKeeper 命令:
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.5.6 export PATH=$PATH:$ZOOKEEPER_HOME/bin
- 使配置立即生效:
source /etc/profile
集群同步与启动
1. 远程同步文件
为了方便,将配置好的文件远程复制到其他节点。
- 从主节点 master 复制环境变量配置文件:
scp -r /etc/profile slave1:/etc/ scp -r /etc/profile slave2:/etc/
- 在 slave1 和 slave2 上分别执行,使环境变量生效:
source /etc/profile
- 从主节点 master 复制 ZooKeeper 安装目录:
scp -r /opt/module/zookeeper-3.5.6 slave1:/opt/module/ scp -r /opt/module/zookeeper-3.5.6 slave2:/opt/module/
2. 启动与测试
在所有节点上分别执行以下命令:
- 启动 ZooKeeper 服务:
zkServer.sh start
- 检查 ZooKeeper 状态:
正确情况下,集群中会有一台机器显示为zkServer.sh status
leader
,其余的显示为follower
。 - 使用
jps
命令检查进程:
您应该能看到jps
QuorumPeerMain
进程。
3. 常见问题
问题: 虚拟机主机映射修改,然后按照不同顺序启动 ZooKeeper,集群状态是否正确?
回答:
是的,ZooKeeper 集群的启动顺序不影响其最终状态。ZooKeeper 选举机制保证了即使启动顺序不同,集群中的节点也能通过互相通信选举出新的 leader
。
在例子中,如果将主机映射修改(例如将第三个虚拟机映射到第一个位置),并按照第三个、第二个、第一个虚拟机的顺序启动,集群依然会正确选举出一个 leader
,其余的节点成为 follower
。这是因为 myid
文件中的唯一 ID 和 zoo.cfg
文件中的配置决定了每个节点在集群中的角色,而不是它们的启动顺序。只要所有节点都能成功连接并相互通信,它们就会自动完成选举过程。