zookeeper单主机搭建集群时,2888端口(集群通信端口)没有被监听问题: zookeeper单主机搭建集群时,从节点的集群通信端口最终不会被监听,这种正常现象,一个主机搭建集群zookeeper内部会进行优化,集群通信无需从节点监听集群通信端口,不影响集群正常功能。我们这里展示的是多主机集群搭建。
1. 准备工作
- 安装Java:ZooKeeper需要Java环境,确保Java版本符合要求(一般使用JDK 8或以上)。
- 下载ZooKeeper:从Apache ZooKeeper官网下载最新的稳定版本。
- 服务器准备:准备至少三台服务器以保证集群的高可用性(奇数台服务器有助于选举机制)。
//如果没有java,下载java
yum install java-1.8.0-openjdk-devel -y
//验证java
java -version
//从zookeeper下载tar包导入主机,也可以直接通过以下命令下载
cd /
wget wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
tar -xf apache-zookeeper-3.8.4-bin.tar.gz
mv apache-zookeeper-3.8.4-bin.tar.gz zookeeper
2. 配置ZooKeeper
在每台服务器上进行以下配置:
- 配置
zoo.cfg前准备
: 在ZooKeeper解压目录的conf
文件夹中,复制zoo_sample.cfg
并重命名为zoo.cfg,并创建data目录
:
cd /zookeeper
cp conf/zoo_sample.cfg conf/zoo.cfg
mkdir data
- 编辑
zoo.cfg
: 打开conf/zoo.cfg
文件并进行如下修改:
tickTime=2000 #ZooKeeper中使用的基本时间单位,单位为毫秒。
initLimit=10 #ZooKeeper允许从服务器在启动时(与主服务器同步)花费的最大时间,单位为tickTime的倍数。
syncLimit=5 #ZooKeeper允许从服务器与主服务器之间保持同步的最大时间,单位为tickTime的倍数。
dataDir=/zookeeper/data #存储快照数据的目录,集群模式下每台服务器都要有一个独立的目录。
clientPort=2181 #客户端连接ZooKeeper服务器的端口号。
#集群服务器配置,格式为:server.X=hostname:peer_port:election_port。
server.1=192.168.1.101:2888:3888
server.2=192.168.1.102:2888:3888
server.3=192.168.1.103:2888:3888
- 配置
myid
文件: 在每台服务器的dataDir
目录下创建一个myid
文件,其中包含该服务器的编号(与zoo.cfg
中的server.X
一致)。例如:
echo "1" > /var/zookeeper/myid # 在192.168.1.101机器上
echo "2" > /var/zookeeper/myid # 在192.168.1.102机器上
echo "3" > /var/zookeeper/myid # 在192.168.1.103机器上
3. 启动ZooKeeper集群
- 启动ZooKeeper: 在每台服务器上进入ZooKeeper的解压目录并启动:
bin/zkServer.sh start
- 检查状态: 通过以下命令检查每台ZooKeeper节点的状态:
bin/zkServer.sh status
输出信息中可以看到是 leader
或 follower
。
4. 验证集群
查看所有端口是否正常监听,在每台主机执行如下命令
lsof -i :2888
lsof -i :3888
正常打印端口监听信息则证明没问题。
5. 常见问题排查
- 节点无法启动:检查
myid
文件和zoo.cfg
配置文件的正确性。 - 集群选举失败:确保所有节点的时钟同步,并检查网络连通性,防火墙是否关闭。