Zookeeper部署
Zookeeper部署
一、概述
Zookeeper是一个分布式服务框架,主要用来解决分布式应用经常遇到的一些数据管理问题,如:命令服务、状态服务、配置中心、集群管理等。
二、部署
2.1 下载
2.2 安装
2.2.1 二进制包部署
tar xf apache-zookeeper-3.7.1-bin.tar.gz
#解压二进制包
cp apache-zookeeper-3.7.1-bin /apps/zookeeper
#复制到部署目录中并修改名称
cd /apps/zookeeper
#进入目录
cp conf/zoo.sample.cfg conf/zoo.cfg
#从模板复制配置文件
bin/zsServer.sh start
bin/zsServer.sh start-foreground
#启动zookeeper
#默认监听端口:21812.2.2 使用systemd管理服务
cat << EOF > /usr/lib/systemd/system/zookeeper.service
[Unit]
Description=Zookeeper Service unit Configuration
After=network.target
[Service]
Type=forking
#Environment=JAVA_HOME=/apps/java/jdk1.8.0_311-amd64
ExecStart=/apps/zookeeper/bin/zkServer.sh start /apps/zookeeper/conf/zoo.cfg
ExecStop=/apps/zookeeper/bin/zkServer.sh stop
PIDFile=/data/zookeeper-data/zookeeper_server.pid
KillMode=none
User=root
Group=root
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
#创建service文件
systemctl daemon-reload
systemctl enable --now zookeeper
#启动服务三、配置
3.1 配置文件
配置文件模板位于conf/zoo.sample.cfg,拷贝重命名为zoo.cfg。
cp conf/zoo.sample.cfg conf/zoo.cfg
#从模板复制配置文件3.2 配置项
tickTime=2000
#服务器与服务器之间的单词心跳检测时间间隔,单位为ms。
initLimit=10
#集群中leader服务器与follower服务器初始连接心态次数,即多少个tickTime。
#首次连接,初始心跳超时时间。
syncLimit=5
#leader与follower之间连接完成后,后期检测发送和应答的心态次数,如果该follower在设置的时间内(syncLimit*tickTime)不能与leader进行通信,那么此follower被视为不可用。
#心跳超时时间。
dataDir=/tmp/zookeeper
#自定义的zookeeper保存数据的目录。
clientPort=2181
#客户端连接zookeeper服务的端口,zookeeper会监听这个端口,接受客户端的访问请求。
maxClientCnxns=128
#单个客户端IP可以和zookeeper保持的连接数。并非zookeeper的并发上限。
autopurge.snapRetainCount=3
#zookeeper自动清除功能。将autopurge.snapRetainCount最新快照和相应事务日志分别保留在dataDir和dataLogDir中,并删除其余部分。默认值为3,最小值为3。
autopurge.purgeInterval=1
#自动清理日志和快照文件时间间隔,单位小时。默认为0,不清理。四、集群
4.1 概述
为了保证数据一致性zookeeper集群只允许在leader节点写入。所有节点都可以读。
在集群中,如果写的占比较大,则集群数量过多,会造成数据同步负担,性能提升有限。如果读占比较大,则集群内节点较多,可以提高读的效率。
集群中有超过一半的节点正常,便可以正常提供访问。(3、4节点集群允许故障1个节点;5、6节点集群允许故障2个节点;7、8节点集群允许故障3个节点。即可用节点必须超过总数的一半,等于也不行。)
角色
Leader(领导者)
事务请求的唯一调度和处理者,保证集群事务处理的顺序。
集群内各服务器的调度者。
Follower(跟随者)
处理客户端非事务请求,转发事务请求给leader服务器。
参与事务请求Proposal的投票。
参与Leader选举投票。
Observer(观察者)
与learner的区别是,observer不参与Leader选举过程,也不参与写操作的“过半写成功”策略。因此Observer节点可以在不影响写性能的情况下提升集群的读性能。
4.2 创建集群
./zkServer.sh status
mode:standalone
#查看运行状态
cat << EOF >> /apps/zookeeper/conf/zoo.cfg
server.1=192.168.3.30:2888:3888
server.2=192.168.3.61:2888:3888
server.3=192.168.3.62:2888:3888
EOF
#添加集群配置
#端口2888:集群内机器通讯使用,数据同步端口。当节点为leader时才监听。
#端口3888:选举leader使用。
echo "1" > /data/zookeeper-data/myid
#配置myid
#所有节点都需要配置,id唯一。
./zkServer.sh start
#启动服务
#各节点需要在超时时间内启动。
./zkServer.sh status
#查看运行状态,mode:leader或follower4.3 选举
4.3.1 选举参数
ZXID(zookeeper transaction id):每个改变zookeeper状态的操作都会形成一个ZXID。
myid:服务器在集群中的唯一标识GID,通过myid配置文件指定,集群中唯一。
4.3.2 选举步骤
首次选举时,所有节点会发出投票,并且投自己为leader。投票中包含自己的myid和ZXID。
每个节点接受并检查对方的投票信息。如投票时间,以及状态是否为LOOKING状态。
优先检查ZXID,大的为leader。若ZXID相同(首次投票时)则比较myid,大的为leader。
4.3.3 成为leader的条件
leader具有最大的ZXID,集群中大多数follower得到响应并follow选出的leader。
4.3.4 心跳机制
leader与follower之间会使用ping进行心跳检测。
当leader无法响应PING时,follower会发起leader选举。
五、管理/操作
5.1 连接zookeeper
zkCli.sh -server 192.168.1.1:21815.2 操作命令
5.2.1 增
create /test "hello"5.2.2 删
delete /test5.2.3 改
set /test "new"5.2.4 查
get /test5.3 客户端工具
zooinspector
下载地址: