搭建伪集群
1.安装jdk
2.安装rz上传命令
yum install lrzsz
3.上传zookeeper的解压包到虚拟机(手动选择解压包的位置进行上传)
rz
4.使用命令解压上传的压缩包
tar zxvf zookeeper-3.4.6.tar.gz
5.进入解压完成的目录
cd zookeeper-3.4.6
6.创建data目录,将conf下zoo_sample.cfg文件名改为zoo.cfg
mkdir data
cd conf
mv zoo_sample.cfg zoo.cfg
7.返回根目录,为了方便管理,找起来比较容易,建立/usr/local/zookeeper-cluster目录,将解压后的Zookeeper复制到以下三个目录:
/usr/local/zookeeper-cluster/zookeeper-1
/usr/local/zookeeper-cluster/zookeeper-2
/usr/local/zookeeper-cluster/zookeeper-3
mkdir /usr/local/zookeeper-cluster
cp -r zookeeper-3.4.6 /usr/local/zookeeper-cluster/zookeeper-1
cp -r zookeeper-3.4.6 /usr/local/zookeeper-cluster/zookeeper-2
cp -r zookeeper-3.4.6 /usr/local/zookeeper-cluster/zookeeper-3
8.配置每一个Zookeeper 的dataDir(zoo.cfg) clientPort 分别为2181, 2182 , 2183
修改/usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
vi /usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
修改:
clientPort=2181
dataDir=/usr/local/zookeeper-cluster/zookeeper-1/data
退出保存:wq
修改/usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg
vi /usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg
修改:
clientPort=2182
dataDir=/usr/local/zookeeper-cluster/zookeeper-2/data
退出保存:wq
修改/usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg
vi /usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg
修改:
clientPort=2183
dataDir=/usr/local/zookeeper-cluster/zookeeper-3/data
退出保存:wq
9.在每个zookeeper的 data 目录下创建一个 myid 文件,内容分别是1、2、3 。这个文件就是记录每个服务器的ID
——-知识点小贴士——
如果你要创建的文本文件内容比较简单,我们可以通过echo 命令快速创建文件 格式为: echo 内容 >文件名 例如我们为第一个zookeeper指定ID为1,则输入命令
cd /usr/local/zookeeper-cluster/zookeeper-1/data
echo 1 > myid
cd /usr/local/zookeeper-cluster/zookeeper-2/data
echo 2 > myid
cd /usr/local/zookeeper-cluster/zookeeper-3/data
echo 3 > myid
10.在每一个zookeeper 的 zoo.cfg配置客户端访问端口(clientPort)和集群服务器IP列表。ip填自己的
server.1=192.168.31.135:2881:3881
server.2=192.168.31.135:2882:3882
server.3=192.168.31.135:2883:3883
11.启动
/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh start
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh start
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh start
状态查询
/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh status
选主流程
当leader崩溃或者leader失去大多数的follower,这时候zk进入恢复模式,恢复模式需要重新选举出一个新的leader,让所有的Server都恢复到一个正确的状态。Zk的选举算法有两种:一种是基于basic paxos实现的,另外一种是基于fast paxos算法实现的。系统默认的选举算法为fast paxos。先介绍basic paxos流程:
1 .选举线程由当前Server发起选举的线程担任,其主要功能是对投票结果进行统计,并选出推荐的Server;
2 .选举线程首先向所有Server发起一次询问(包括自己);
3 .选举线程收到回复后,验证是否是自己发起的询问(验证zxid是否一致),然后获取对方的id(myid),并存储到当前询问对象列表中,最后获取对方提议的leader相关信息(id,zxid),并将这些信息存储到当次选举的投票记录表中;
4. 收到所有Server回复以后,就计算出zxid最大的那个Server,并将这个Server相关信息设置成下一次要投票的Server;
5. 线程将当前zxid最大的Server设置为当前Server要推荐的Leader,如果此时获胜的Server获得n/2 + 1的Server票数, 设置当前推荐的leader为获胜的Server,将根据获胜的Server相关信息设置自己的状态,否则,继续这个过程,直到leader被选举出来。
通过流程分析我们可以得出:要使Leader获得多数Server的支持,则Server总数必须是奇数2n+1,且存活的Server的数目不得少于n+1.
“`