Zookeeper9:伪集群搭建

Zookeeper9:伪集群搭建

1. 集群角色

zookeeper集群中的节点有三种角色
  • Leader:处理集群的所有事务请求,集群中只有一个Leader
  • Follower:只能处理读请求,参与Leader选举。
  • Observer:只能处理读请求,提升集群读的性能,但不能参与Leader选举。

2. 集群搭建

2.1 集群规划

一主两从一观察
zoo.cfg 修改两个参数dataDirclientPort
配置文件
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.cfgzoo2.cfgzoo3.cfgzoo4.cfg修改对应的两个参数dataDirclientPort
# 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
notion image

2.5 查看状态

查看第一台状态,是follower
root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh status ../conf/zoo1.cfg
notion image
 
查看第二台状态,是leader
root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh status ../conf/zoo2.cfg
notion image
 
查看第三台状态,是follower
root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh status ../conf/zoo3.cfg
notion image
查看第四台状态,是observer
root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh status ../conf/zoo4.cfg
notion image
 

2.6 连接Zookeeper集群

  • 也可以就连一台,建议连接多台,使用隔开,防止某一个挂了连接不上。
./zkCli.sh -server 192.168.92.145:2181,192.168.92.145:2182,192.168.92.145:2183
notion image

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 伪集群启动

  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
  1. 赋予权限
chmod 777 zk.sh
  1. 使用脚本命令
# 启动集群 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