1. 集群角色2. 集群搭建2.1 集群规划2.2 创建数据文件夹2.3 创建配置文件2.3.1 配置参数解读2.4 启动2.5 查看状态2.6 连接Zookeeper集群3. 常用命令4. 集群启动停止脚本4.1 伪集群启动4.2 集群启动脚本
1. 集群角色
zookeeper集群中的节点有三种角色
- Leader:处理集群的所有事务请求,集群中只有一个Leader
- Follower:只能处理读请求,参与Leader选举。
- Observer:只能处理读请求,提升集群读的性能,但不能参与Leader选举。
2. 集群搭建
2.1 集群规划
一主两从一观察
zoo.cfg
修改两个参数dataDir
、clientPort
配置文件 | dataDir | clientPort |
zoo1.cfg | /fcmp/zookeeper/zk1 | 2181 |
zoo2.cfg | /fcmp/zookeeper/zk2 | 2182 |
zoo3.cfg | /fcmp/zookeeper/zk3 | 2183 |
zoo4.cfg | /fcmp/zookeeper/zk4 | 2184 |
2.2 创建数据文件夹
root@redis01:/fcmp/zookeeper# mkdir zk1 root@redis01:/fcmp/zookeeper# mkdir zk2 root@redis01:/fcmp/zookeeper# mkdir zk3 root@redis01:/fcmp/zookeeper# mkdir zk4
每个文件夹创建一个文件
myid
写入一个值,这个值表示唯一标识。(注意上下不要有空行,左右不要有空格)root@redis01:/fcmp/zookeeper# echo 1 > ./zk1/myid root@redis01:/fcmp/zookeeper# echo 2 > ./zk2/myid root@redis01:/fcmp/zookeeper# echo 3 > ./zk3/myid root@redis01:/fcmp/zookeeper# echo 4 > ./zk4/myid root@redis01:/fcmp/zookeeper# cat ./zk4/myid 4
2.3 创建配置文件
zoo1.cfg
、 zoo2.cfg
、zoo3.cfg
、zoo4.cfg
修改对应的两个参数dataDir
、clientPort
# zookeeper时间配置中的基本单位(毫秒) tickTime=2000 #允许follower初始化连接到1eader最大时长,它表示tickTime时间倍数即:initLimit*tickTime initLimit=10 # 允许fol1ower与1eader数据同步最大时长,它表示tickTime时间倍数 syncLimit=5 # zookeper 数据存储目录及日志保存目录(如果没有指明dataLogDir,则日志也保存在这个文件中) dataDir=/fcmp/zookeeper/zk1 # 对客户端提供的端口号 clientPort=2181 # 单个客户端与zookeeper最大并发连接数 maxClientCnxns=60 # 保存的数据快照数量,之外的将会被清除 autopurge.snapRetainCount=3 # 自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。 autopurge·purgeInterval=l server.1=192.168.92.145:2001:3001 server.2=192.168.92.145:2002:3002 server.3=192.168.92.145:2003:3003 server.4=192.168.92.145:2004:3004:observer
2.3.1 配置参数解读
Server.A=B:C:D
- A是一个数字,表示这个是第几号服务器 集群模式下配置一个文件myid,这个文件在dataDir.目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server 。
- B是这个服务器的地址
- C是这个服务器Follower与集群中的Leader服务器交换信息的端口
- D是万一集群中的Leader月服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口
2.4 启动
以对应的配置文件启动不同的ZK
# 启动 root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh start ../conf/zoo1.cfg root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh start ../conf/zoo2.cfg root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh start ../conf/zoo3.cfg root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh start ../conf/zoo4.cfg
2.5 查看状态
查看第一台状态,是follower
root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh status ../conf/zoo1.cfg
查看第二台状态,是leader
root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh status ../conf/zoo2.cfg
查看第三台状态,是follower
root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh status ../conf/zoo3.cfg
查看第四台状态,是observer
root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh status ../conf/zoo4.cfg
2.6 连接Zookeeper集群
- 也可以就连一台,建议连接多台,使用
,
隔开,防止某一个挂了连接不上。
./zkCli.sh -server 192.168.92.145:2181,192.168.92.145:2182,192.168.92.145:2183
3. 常用命令
# 启动节点 ./zkServer.sh start ../conf/zoo1.cfg # 查看节点信息 ./zkServer.sh status ../conf/zoo1.cfg # 停止节点 ./zkServer.sh stop ../conf/zoo1.cfg # 进入集群客户端 ./zkCli.sh -server 192.168.92.145:2181,192.168.92.145:2182,192.168.92.145:2183
4. 集群启动停止脚本
4.1 伪集群启动
- 在
/root
目录下创建,在创建zk.sh
#!/bin/bash case $1 in "start"){ for i in zoo1.cfg zoo2.cfg zoo3.cfg zoo4.cfg do echo ------------ zookeeper $i 启动 ---------- /root/zookeeper/apache-zookeeper-3.7.0-bin/bin/zkServer.sh start /root/zookeeper/apache-zookeeper-3.7.0-bin/conf/$i done } ;; "stop"){ for i in zoo1.cfg zoo2.cfg zoo3.cfg zoo3.cfg do echo ------------ zookeeper $i 停止 ---------- /root/zookeeper/apache-zookeeper-3.7.0-bin/bin/zkServer.sh stop /root/zookeeper/apache-zookeeper-3.7.0-bin/conf/$i done } ;; "status"){ for i in zoo1.cfg zoo2.cfg zoo3.cfg zoo3.cfg do echo ------------ zookeeper $i 状态 ---------- /root/zookeeper/apache-zookeeper-3.7.0-bin/bin/zkServer.sh status /root/zookeeper/apache-zookeeper-3.7.0-bin/conf/$i done } ;; esac
- 赋予权限
chmod 777 zk.sh
- 使用脚本命令
# 启动集群 root@redis01:~# ./zk.sh start # 查看集群状态 root@redis01:~# ./zk.sh status # 停止集群 root@redis01:~# ./zk.sh stop
4.2 集群启动脚本
这是三台搭建在redis01、redis02、redis03机器上的启动脚本。
一般脚本会放在家目录下的bin目录下
/home/bigdata/bin
,创建zk.sh
#!/bin/bash case $1 in "start"){ for i in redis01 redis02 redis03 do echo ------------ zookeeper $i 启动 ---------- ssh $i "/root/zookeeper/apache-zookeeper-3.7.0-bin/bin/zkServer.sh start" done } ;; "stop"){ for i in redis01 redis02 redis03 do echo ------------ zookeeper $i 启动 ---------- ssh $i "/root/zookeeper/apache-zookeeper-3.7.0-bin/bin/zkServer.sh stop" done } ;; "status"){ for i in redis01 redis02 redis03 do echo ------------ zookeeper $i 启动 ---------- ssh $i "/root/zookeeper/apache-zookeeper-3.7.0-bin/bin/zkServer.sh status" done } ;; esac
赋予权限
chmod 777 zk.sh