一、zookeeper集群搭建
下载zookeeper
wget http://download.o2o.idohoo.com/zookeeper-3.4.8.tar.gz
1、部署规划
A、zookeeper服务(java):
1号机:10.10.14.212
2号机:10.10.14.213
3号机:10.10.14.214
端口:2181
B、 以上三台机器能互相访问2888、3888、2181端口
2、安装
2.1下载安装包
通过”wget http://download.o2o.idohoo.com/zookeeper-3.4.8.tar.gz”获取安装包(具体包的版本根据具体情况下载)
2.2 安装
解压到/data/services/目录,进入目录
cd /data/services
tar –zxvf /data/download/zookeeper-3.4.8.tar.gz –C .
3、配置
3.1 新建myid文件(分别在212、213、214三台机上执行)
在“/data/services/zookeeper/data”目录下新建myid文件,编辑server对应ID信息,并保存,每台zookeeper服务机器改文件不同(每台机器都要加,ID不一样)
;
没此目录的话创建目录mkdir /data/services/zookeeper/data
1号机(212):echo 1 >/data/services/zookeeper/data/myid
2号机(213):echo 2 >/data/services/zookeeper/data/myid
3号机(214):echo 3 >/data/services/zookeeper/data/myid
3.2 配置文件修改
zookeeper配置文件路径:/data/services/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
添加配置:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/services/zookeeper-3.4.8/
clientPort=2181
server.1=10.10.14.212:2008:6008
server.2=10.10.14.213:2008:6008
server.3=10.10.14.214:2008:6008
这个tickTime时间是作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间隔,也就是每到tickTime时间2秒的时候就会发送一个心跳。
initLimit这个配置项是用来配置Zookeeper接收客户端(这里所说的客户端不是用户链接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到leader的Follower服务器)初始化连接是最长能忍受多少个心跳的时间间隔数。当已经超过10个心跳的时间(也就是tickTime)长度后Zookeeper服务器还没有收到客户端返回的信息,那么表明这个客户端连接失败。总的时间长度就是10*2000=20秒
syncLimit这个配置项标识leader与follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。
DataDir是保存数据的路径
lientPort这个端口开放来给客户端(应用程序)连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求。
server.1 server.2 server.3这些是标记是第几号服务器,集群中的每台ZK server都会有一个用于惟一标识自己的id,有两个地方会使用到这个id:myid文件和zoo.cfg文件中。myid文件存储在dataDir目录中,指定了当前server的server id。在zoo.cfg文件中,根据server id,配置了每个server的ip和相应端口。Zookeeper启动的时候,读取myid文件中的server id,然后去zoo.cfg 中查找对应的配置。2008第一个端口用来集群成员的信息交换,标识这个服务器与集群中的leader服务器交换信息的端口6008是在leader挂掉时专门用来进行选举leader所用的端口
3.3 配置zookeeper的java虚拟机内存(因为不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率,所以一般最好只有与java程序有关的都配置jvm启动参数,可以防止内存溢出,不配置的话会以默认的256k去防止内存溢出) 在/data/services/zookeeper/bin目录下添加java.env文件
cd /data/services/zookeeper/bin
vi java.env
内容:
#!/bin/bash
export JVMFLAGS="-Xms1024m -Xmx1024m $JVMFLAGS"
#-Xms为启动时分配内存,-Xmx为最大内存
4、启动
每机器都启动
sh /data/services/zookeeper/bin/zkServer.sh start
5、状态查看
sh /data/services/zookeeper/bin/zkServer.sh status
二、zookeeper集群测试(3台服务器只允许一台故障)
目前因为要与测试环境一致,所以只启动一台zookeeper212,就不启动三台zookeeper,如果需要启动三台zookeeper,而且由于ZooKeeper集群,会有一个Leader负责管理和协调其他集群服务器,因此服务器的数量通常都是奇数,例如3,5,7...等,这样2n+1的数量的服务器就可以允许最多n台服务器的失效。操作步骤如下:
1、先查看各个服务器的状态(三台的话一台leader二台follower)
命令
目录:cd /data/services/zookeeper/bin
sh zkServer.sh status
集群的情况下就是以下这种情况
独立模式情况下
https://www.cnblogs.com/freeweb/p/5216168.html #zookeeper常用的操作命令
https://www.cnblogs.com/raphael5200/p/5285583.html #zookeeper原理
https://www.cnblogs.com/z-sm/p/5691752.html #独立模式和负责模式
2、功能测试,数据同步。 查看三台机器数据是否同步
2.1 创建node
每台机器输入
Sh zkCli.sh -server 127.0.0.1:2181 #zookeeper客户端登陆
每台机都创建一个Node数据
结论:实际上只有一个机器会执行创建操作,这是正常的,其他的机器显示已经拥有这个数据
2.2 获取node数据
都可以数据
1号机:
2号机
3号机
2.3 在1号机重新设置node数据,并在三台机查看数据
1号机设置
1-3号机器获取新设置的node数据
结论:都能获取到,表示数据设置正常
2.4 在1号机删除node数据,再查看其他机器数据
结论:经检查3台机器都无node说明删除成功,获得数据
3、集群冗余测试
3.1 在leader宕机之后是否会重新选举出leader,并正常工作
A、选举之前,leader机在1号机
使用sh zkServer.sh status查看
B、停掉1号机服务,并查看1号机状态
sh zkServer.sh stop
sh zkServer.sh status
通过状态可以看到已经停止了
C、 查看2号3号机的状态
2号机
D、 通过数据同步测试看是否正常,参考部署2功能测试
3.2 宕机掉一台普通机器2号机看是否正常
A、先把原来宕机掉的1号机先起来,恢复zookeeper集群
B、然后再把2号机宕机,查看数据是否正常
2号机空压机
C、然后根据功能测试2进行数据测试(略)