注:在前面 Zookeeper基础入门 基础上搭建集群环境。
一 Zookeeper 集群模式一共有三种类型的角色
- Leader: 处理所有的事务请求(写请求),可以处理读请求,集群中只能有一个Leader
- Follower:只能处理读请求,同时作为 Leader的候选节点,即如果Leader宕机,Follower节点要参与到新的Leader选举中,有可能成为新的Leader节点。
- Observer:只能处理读请求。不能参与选举
二 集群安装
本例搭建的是伪集群模式,即一台机器上启动三个zookeeper实例组成集群,真正的集群模式无非就是实例IP地址不同,搭建方法没有区别。
- 进入zookeeper目录,创建一个专门用来放集群数据的cluster-data目录
//进入目录,创建cluster目录
cd apache-zookeeper-3.5.10-bin
mkdir cluster-data
cd cluster-data
//在cluster-data目录下创建三个目录,用于后面三台服务对应的数据存储
mkdir zoo1 zoo2 zoo3
//分别在zoo1,zoo2,zoo3目录下创建文件myid 文件,并写入当前实例的server id,即1,2,3
echo "1" > ./zoo1/myid
echo "2" > ./zoo2/myid
echo "3" > ./zoo3/myid
- 在conf目录下创建cluster-conf目录,用于存放三台服务对应的配置
//进入配置目录
cd apache-zookeeper-3.5.10-bin/conf
mkdir cluster-conf
//将单机环境的配置文件 复制一份到cluster-conf目录下做对应修改
cp zoo.cfg ./cluster-conf/zoo1.cfg
- 修改zoo1.cfg配置,原配置文件里有的,修改成下面的值,没有的则加上
//vi ./cluster-conf/zoo1.cfg
dataDir=/usr/local/zookeeper/apache-zookeeper-3.5.10-bin/cluster-data/zoo1
clientPort=2181
#participant 可以不用写,默认就是participant,也可以是observer角色
server.1=127.0.0.1:2001:3001:participant
server.2=127.0.0.1:2002:3002:participant
server.3=127.0.0.1:2003:3003:participant
说明:
server.A=B:C:D:E
- A 是一个数字,表示这个是第几号服务器;
- B 是这个服务器的 ip 地址;
- C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;
- D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。如果需要通过添加不参与集群选举以及事务请求的过半机制的 Observer节点,可以在E的位置,添加observer标识。
- 再把修改好的zoo1.cofg 分别再复制两份到zoo2.cfg,zoo3.cfg并做相应修改
//复制两份
cd ./cluster-conf
cp ./zoo1.cfg ./zoo2.cfg
cp ./zoo1.cfg ./zoo3.cfg
//vi zoo2.cfg
clientPort=2182
dataDir=/usr/local/zookeeper/apache-zookeeper-3.5.10-bin/cluster-data/zoo2
//vi zoo3.cfg
clientPort=2183
dataDir=/usr/local/zookeeper/apache-zookeeper-3.5.10-bin/cluster-data/zoo3
- 启动三个zookeeper实例
cd apache-zookeeper-3.5.10-bin
bin/zkServer.sh start conf/cluster-conf/zoo1.cfg
bin/zkServer.sh start conf/cluster-conf/zoo2.cfg
bin/zkServer.sh start conf/cluster-conf/zoo3.cfg
- 查看集群状态,根据命令 bin/zkServer.sh status conf/cluster-conf/zoo1.cfg 进行每台服务的状态查询
[root@localhost apache-zookeeper-3.5.10-bin]# bin/zkServer.sh status conf/cluster-conf/zoo1.cfg
ZooKeeper JMX enabled by default
Using config: conf/cluster-conf/zoo1.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[root@localhost apache-zookeeper-3.5.10-bin]# bin/zkServer.sh status conf/cluster-conf/zoo2.cfg
ZooKeeper JMX enabled by default
Using config: conf/cluster-conf/zoo2.cfg
Client port found: 2182. Client address: localhost. Client SSL: false.
Mode: leader
[root@localhost apache-zookeeper-3.5.10-bin]# bin/zkServer.sh status conf/cluster-conf/zoo3.cfg
ZooKeeper JMX enabled by default
Using config: conf/cluster-conf/zoo3.cfg
Client port found: 2183. Client address: localhost. Client SSL: false.
Mode: follower