ZooKeeper安装
1.安装jdk
将JDK1.8文件上传到Linux操作系统中/home/文件目录下。
(1)解压文件,命令:tar -xvf jdk-8u291-linux-x64.tar.gz
(2)配置环境变量、编辑环境变量配置文件,命令:vim /etc/profile
在内容最后添加下面三行:
export JAVA_HOME=/home/jdk1.8.0_291
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
(3)使环境变量生效,命令:source /etc/profile
2.安装zookeeper
将文件apache-zookeeper-3.6.3-bin.tar.gz上传到Linux操作系统中/home/文件目录下。
(1)解压文件,命令:tar -xvf apache-zookeeper-3.6.3-bin.tar.gz
(2)在zk根目录下创建文件夹data/log 命令:mkdir data log
(3)复制配置文件并且修改名称,命令:cp zoo_sample.cfg zoo.cfg
修改配置文件,命令:vim zoo.cfg
dataDir=/home/apache-zookeeper-3.6.3-bin/data
dataLogDir=/home/apache-zookeeper-3.6.3-bin/log
(4)zk启动关闭命令
sh zkServer.sh start 或者 ./zkServer.sh start
sh zkServer.sh stop
sh zkServer.sh status
ZooKeeper配置文件参数介绍
zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg。其中各配置项的含义,解释如下:
1.tickTime:Client-Server通信心跳时间
Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。
tickTime=2000
2.initLimit:Leader-Follower初始通信时限
集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
initLimit=5
3.syncLimit:Leader-Follower同步通信时限
集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
syncLimit=2
4.dataDir:数据文件目录
Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
dataDir=/home/michael/opt/zookeeper/data
5.clientPort:客户端连接端口
客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
clientPort=2181
6.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
这个配置项的书写格式比较特殊,规则如下:
server.A=B:C:D
其中,A是一个数字,表示这个是第几号服务器;
集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
B是这个服务器的ip地址;
C是这个服务器与集群中的Leader服务器交换信息的端口
D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。例如:
server.1=192.168.64.3:2888:3888
server.2=192.168.64.4:2888:3888
server.3=192.168.64.5:2888:3888
Zookeeper集群搭建
ZK为什么设置为奇数个?
zookeeper有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。也就是说如果有2个zookeeper,那么只要有1个死了zookeeper就不能用了,因为1没有过半,所以2个zookeeper的死亡容忍度为0;同理,要是有3个zookeeper,一个死了,还剩下2个正常的,过半了,所以3个zookeeper的容忍度为1;同理你多列举几个:2 -> 0; 3 -> 1; 4 - >1; 5 -> 2; 6 -> 2会发现一个规律,2n和2n-1的容忍度是一样的,都是n-1,即偶数台和奇数台容灾效果相同,所以没有必要搭建偶数台。
开始搭建集群
(1)准备文件夹
在zookeeper根目录中创建新的文件夹zkCluster,在zkCluster里面创建zk1/zk2/zk3文件夹
在每个文件夹里创建data/log文件夹,命令:
mkdir {zk1,zk2,zk3}/{data,log}
(2)添加myid文件
分别在zk1/zk2/zk3中的data文件夹中创建新的文件myid,其中的内容依次为1/2/3,与zk节点号对应。
编辑myid文件,定义编号
(3)将zoo_sample.cfg复制为zoo1.cfg
(4)修改zoo1.cfg配置文件
配置完成后将zoo1.cfg复制两份,然后修改对应的文件夹目录和不同的端口(如果在同一台机器上搭建集群,clientPort必须配置不同的端口号,并且server.1,server.2,server.3的通信端口和选举端口必须配置不同端口号)。
(5)通过下面的命令启动zk集群
sh zkServer.sh start zoo1.cfg
sh zkServer.sh start zoo2.cfg
sh zkServer.sh start zoo3.cfg
然后查看状态
sh zkServer.sh status zoo1.cfg
sh zkServer.sh status zoo2.cfg
sh zkServer.sh status zoo3.cfg
Zookeeper的选举机制
- 超半数同意,即选举成功
- 最大值优先