Zookeeper集群搭建
概念
Zookeeper 由 Apache Hadoop 的 Zookeeper 子项目发展而来,Google Chubby的一个开源实现。它是一个分布式应用程序协调服务,提供的功能包括:配置管理,名字服务,提供分布式同步、队列管理、集群管理等。 从设计模式角度来看,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper 就将负责通知已经在 Zookeeper 上注册的那些观察者做出相应的反应,从而实现集群中类似 Master/Slave 管理模式。
Zookeeper两种运行模式:
独立模式:只运行在一台服务器上适合测试环境;
复制模式:运行于一个群集上,适合生产环境。
#复制模式的Zookeeper通过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,它就能够保证服务继续。这跟Zookeeper的复制策略有关:Zookeeper确保对znode树的每一个修改都会被复制到集合体中超过半数的机器上#
Zookeeper两个角色:
leader,负责写服务和数据同步,剩下的是follower,提供读服务,leader失效后会在follower中重新选举新的leader,在整个Zookeeper集群模式下,整个集群是一个整体,在集群中的任何一个Zookeeper节点共享整个集群的服务。
实验环境
实验准备
源码安装
#修改主机名以及hosts文件(都改)
[[email protected] ~]# hostnamectl set-hostname zpserver1
[[email protected] ~]# vim /etc/hosts
#安装java环境
[[email protected] ~]# yum -y remove java*
[[email protected] ~]# ls
[[email protected] ~]# tar -zxvf jdk-8u171-linux-x64.tar.gz
[[email protected] ~]# mv jdk1.8.0_171/ /usr/local/java
[[email protected] ~]# vim /etc/profile
#修改环境变量,添加到末尾
export JAVA_HOME=/usr/local/java/
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
[[email protected] ~]# source /etc/profile
[[email protected] ~]# java -version
#安装zookeeper
[[email protected] ~]# ls
[[email protected] ~]# tar -zxvf zookeeper-3.4.10.tar.gz
[[email protected] ~]# mv zookeeper-3.4.10 /usr/local/zookeeper
[[email protected] ~]# vim /etc/profile
export ZK_HOME=/usr/local/zookeeper
export PATH=$ZK_HOME/bin:$PATH
[[email protected] ~]# source /etc/profile
#这里只能通过添加环境变量来添加命令
配置群集
#修改配置文件
[[email protected] ~]# cd /usr/local/zookeeper/conf/
[[email protected] conf]# mv zoo_sample.cfg zoo.cfg
[[email protected] conf]# vim zoo.cfg
[[email protected] zookeeper]# mkdir data
[[email protected] zookeeper]# cd data/
[[email protected] data]# vim myid
0
#每个服务器写自己的
Zpserver2:
1
Zpserver3:
2
#启动zookeeper
[[email protected] ~]# zkServer.sh start
[[email protected] ~]# zkServer.sh start
[[email protected] ~]# zkServer.sh start
#查看集群状态
[[email protected] ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: followe
[[email protected] ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader
[[email protected] ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
查看状态工具
Netcat
[[email protected] ~]# ls
[[email protected] ~]# tar -zxvf netcat-0.7.1.tar.gz
[[email protected] ~]# cd netcat-0.7.1/
[[email protected] netcat-0.7.1]# ./configure --prefix=/usr/local/netcat
[[email protected] netcat-0.7.1]# make && make install
[[email protected] ~]# ln -s /usr/local/netcat/bin/* /usr/bin/
#用法 格式:
#“echo [四字命令]|netcat localhost 2181”
conf:输出Zookeeper服务器配置的详细信息
cons:输出所有连接到服务器的客户端的完全的连接/会话的详细信息。包括“接收/发送”的包数量、会话ID、操作延迟、最后的操作执行等
dump:输出未经处理的会话和临时节点 envi:输出关于服务器运行环境的详细信息 reqs:输出未经处理的请求
ruok:测试服务是否处于正确状态。若是则会返回“imok”,否则不做任何反应
stat:输出关于性能和连接的客户端的列表。(通过此命令也可查看节点是leader还是follower)
wchs:输出服务器watch的详细信息
wchc:通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表
wchp:通过路径列出服务器watch的详细信息,它输出一个与session相关的路径
mntr:输出一些Zookeeper运行时信息,通过对这些返回结果的解析可以达到监控效果 Eg: [[email protected] ~]#
echo conf|netcat 192.168.3.2 2181
测试
#用客户端连接
[[email protected] ~]# zkCli.sh -server 192.168.3.2:2181
[zk: 192.168.3.2:2181(CONNECTED) 0] ls / ---显示/目录下文件
[zk: 192.168.3.2:2181(CONNECTED) 1] ls2 / ---显示根目录下,文件,查看当前节点数据并能看到更新次数等数据
[zk: 192.168.3.2:2181(CONNECTED) 3] create /20190520 "201905201999" ---创建文件并设置初始化内容,创建一个新的znode节点”20190520”
[zk: 192.168.3.2:2181(CONNECTED) 4] set /20190520 "justin ****" ---修改文件内容,对20190520所关联的字符串进行设置
[zk: 192.168.3.2:2181(CONNECTED) 6] get /20190520 ---查看节点状态
[zk: 192.168.3.2:2181(CONNECTED) 7] delete /20190520 ---删除文件
[zk: 192.168.3.2:2181(CONNECTED) 7] quit ---退出
扩展
事务日志
事务日志指zookeeper系统在正常运行过程中,针对所有的更新操作,在返回客户端“更新成功”的响应前,zookeeper会保证已经将本次更新操作的事务日志已经写到磁盘上,只有这样,整个更新操作才会生效。在dataLogDir指定的目录下存在一个文件夹version-2,日志文件的命名规则为log.,表示写入该日志的第一个事务的ID,十六进制表示。
快照日志
zookeeper的数据在内存中是以树形结构进行存储的,而快照就是每隔一段时间就会把整个DataTree的数据序列化后存储在磁盘中,这就是zookeeper的快照文件。在dataDir指定的目录下存在一个文件夹version-2,该文件夹中保存着快照日志文件,zookeeper快照文件的命名规则为snapshot.,其中表示zookeeper触发快照的那个瞬间,提交的最后一个事务的ID。
日志清理
在zookeeper 3.4.0以后,zookeeper提供了自动清理snapshot和事务日志功能,通过配置zoo.cfg下的autopurge.snapRetainCount和autopurge.purgeInterval这两个参数实现日志文件的定时清理。
autopurge.snapRetainCount这个参数指定了需要保留的文件数目,默认保留3个;
autopurge.purgeInterval这个参数指定了清理频率,单位是小时,需要填写一个1或者更大的数据,0表示不开启自动清理功能。