ZooKeeper集群中有三种角色:Leader(领导者)、Follower(跟随者)、Observer(观察者)。
- Leader:事物请求(写操作)的唯一调度者和处理者,保证集群事物处理的顺序性,同时也是集群内部各个服务器之间的调度者。对于create、set、delete等有写操作的请求,都需要统一转发给leader处理,leader需要决定编号、执行操作,这个过程称之为事物。
- Follower:处理客户端非事物(读操作)请求(可直接响应)。它可以转发事物请求给leader、参与集群leader的选举投票。
- Observer:对于非事物请求可以独立处理(读操作),对于事务性请求会转发给leader处理。Observer节点接收来自leader的inform信息,更新自己的本地存储,不参与提交和选举投票。通常在不影响集群事物处理能力的前提下,提升集群的非事物处理能力。
由于笔者部署的是伪集群,在同一台服务上部署三个节点,所以需要复制两份从节点的配置文件,具体修改如下:
#数据存放路径(每个节点都需要配置自己的地址)
dataDir=/usr/local/var/run/zookeeper/data
#各节点服务器地址(每个配置文件的下方配置相同)
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
server.A=B:C:D
- A是一个数字,表示这是第几号服务器;集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值。zookeeper启动时读取次文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server;
- B是这个服务器的地址;
- C是这个服务器Follower与集群中的leader交换信息的端口;
- D是集群中的leader挂了,重新进行选举leader时所需要的端口;
cd /usr/local/var/run/zookeeper/data
# 在文件中添加与server对应的编号(注意上下不要有空行、左右不要有空格)
vim myid
启动前需要关闭防火墙(生产环境需要打开对应的端口)
# 分别启动三个节点的zk server(伪集群启动可使用不同的配置文件)
zkServer start /usr/local/etc/zookeeper/zoo.cfg
# 查看集群状态
zkServer status /usr/local/etc/zookeeper/zoo.cfg
注:连接不同zk端口使用如下指令:
zkCli -server ip:port
因篇幅问题不能全部显示,请点此查看更多更全内容