-
前置条件 : 安装JDK
-
创建一个 /opt/software 文件目录,将apache-zookeeper-3.5.7-bin.tar.gz 安装包拷贝,并解压
mkdir /opt/sofrware mkdir /opt/module tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/ # 将zookeeper解压到指定目录 # 进入到 /opt/zookeeper给文件修改名称 mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7
-
配置修改
# 1> 将/opt/module/zookeeper-3.5.7/conf 这个路径下的 zoo_sample.cfg 修改为 zoo.cfg cd /opt/module/zookeeper-3.5.7/conf/ # 进入到 conf目录下 mv zoo_sample.cfg zoo.cfg # 将zoo_sample.cfg 修改为 zoo.cfg # 2> 打开zoo.cfg文件,修改dataDir路径 mkdir /opt/module/zookeeper-3.5.7/zkData # 创建 zkData目录 vim zoo.cfg # 使用vim进入到zoo.cfg文件中 dataDir=/opt/module/zookeeper-3.5.7/zkData # 修改dataDir 为刚刚创建的zkData目录
-
启动Zookeeper
[root@localhost ~]# cd /opt/module/zookeeper-3.5.7/ [root@localhost zookeeper-3.5.7]# bin/zkServer.sh start
-
查看进程是否启动
[root@localhost zookeeper-3.5.7]# jps
-
查看状态
[root@localhost zookeeper-3.5.7]# bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: standalone
-
启动客户端
[root@localhost zookeeper-3.5.7]# bin/zkCli.sh
-
退出客户端
[zk: localhost:2181(CONNECTED) 0] quit
-
停止Zookeeper服务
[root@localhost zookeeper-3.5.7]# bin/zkServer.sh stop
- tickTime=2000 : 通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒
- initLimit=10 : LF初始通信时限
- Leader和Follower初始连接时能容忍的最大心跳数(tickTime的数量)
- syncLimit=5 : LF同步通信时限
- Leader和Follower之间通信时限,时间如果超过syncLimit*tickTime,Leader会认为Follower死亡,从服务器列表中删除Follower
- dataDir : 保存 Zookeeper中的数据
- 默认的是tmp目录,容易被Linux系统定期删除,所以一般不使用tmp目录
- clientPort=2181 : 客户端连接端口,通常不做修改
-
集群规划:打开三台虚拟机,搭建Zookeeper集群至少要三台
-
1、按照上面安装步骤给每一台虚拟机都安装Zookeeper
-
2、配置服务器编号
-
1》在/opt/module/zookeeper-3.5.7/zkData目录下创建myid文件
vim myid # 文件名必须为myid # 创建完成后,在文件中存放当前server对应的编号每个编号都不同 上下左右都不要存在空格 2
-
2》配置好的Zookeeper同步到其他机器上
[root@localhost module]# xsync zookeeper-3.5.7 # xsync是自己编写的shell脚本
-
-
3、配置zoo.cfg文件
-
1》该文件是之前重命名的zoo_sample.cfg的文件
-
2》在该文件中添加如下配置
#######################cluster########################## server.2=192.168.17.138:2888:3888 server.3=192.168.17.139:2888:3888 server.4=192.168.17.140:2888:3888 # 若不想使用ip地址填写到该zoo.cfg文件中,也可以在/etc/hosts文件中配置映射端口
-
对上述文件配置的解释
server.A=B:C:D # A : 是一个数组,表示这个是几号服务器,myid文件配置的数值就是A的值,Zookeeper启动的时候会 # 读取此文件,拿到里面的数据与zoo.cfg里面配置的信息比较从而判断到底是那个server # B : 是这个服务器的地址 # C : 是这个服务器Follower与集群中的Leader服务器交换信息的端口 # D : 万一集群中的Leader服务器挂了,需要一个端口来重新进行选取,选出一个新的Leader,而这个 # 端口就是用来执行选举时服务器相互通信的端口
-
-
3》同步zoo.cfg文件
[root@localhost conf]# xsync zoo.cfg
-
-
4、集群 *** 作
-
分别启动Zookeeper
[root@localhost zookeeper-3.5.7]# bin/zkServer.sh start # 每个窗口都使用该命令进行启动
-
查看状态
#################192.168.17.138################# [root@localhost zookeeper-3.5.7]# bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: follower #################192.168.17.139################# [root@localhost zookeeper-3.5.7]# bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: follower #################192.168.17.140################# [root@localhost zookeeper-3.5.7]# bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: leader
-
[注]若出现Zookeeper启动不了的情况,请注意将机器防火墙关闭和检查zoo.cfg文件是否配置错误
[root@localhost ~]# systemctl stop firewalld.service # 禁用防火墙
-
- 首次启动时的Zookeeper的选举机制
- 服务器1启动时,发起一次选举,投自己一票,此时服务器1的票数为1,不够半数(3),选举无法完成,服务器1的状态为 LOOKING
- 服务器2启动时,发起一次选举,服务器1服务器2分别投自己一票,并交换选票信息,此时服务器1发现自己的myid小于服务器2的myid就将自己的选票交给服务器2,此时服务器2有两张选票,不够半数(3),服务器1服务器2的状态都为LOOKING
- 服务器3启动时,发起一次选举,此时服务器1服务器2服务器3都会比较myid,服务器3的myid大于其他二者,故服务器1服务器2将选票交给服务器3,此时服务器1、服务器2选票都为0,服务器3选票为3,大于等于半数(3),确定服务器3为Leader状态为LEADING其他服务器自动变为FOLLOWING
- 服务器4启动时,发起一次选举,服务器1、2、3已经不是LOOKING状态,不会更改选票信息,交换选票结果,服务器3有3张选票,服务器4一张选票。此时服务器4将选票交给服务器3,更改自身状态为FOLLOWING状态
- 服务器5启动时,和服务器4一样的过程和一样的结果
- 非首次启动时Zookeeper的选举机制
-
1、在用户家目录的bin目录下,创建脚本
[root@localhost bin]# vim zk.sh
-
2、编写shell脚本
#!/bin/bash case in "start"){ for i in 192.168.17.138 192.168.17.139 192.168.17.140 do echo ---------- zookeeper $i 启动 ------------ ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start" done };; "stop"){ for i in 192.168.17.138 192.168.17.139 192.168.17.140 do echo ---------- zookeeper $i 停止 ------------ ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop" done };; "status"){ for i in 192.168.17.138 192.168.17.139 192.168.17.140 do echo ---------- zookeeper $i 状态 ------------ ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status" done };; esac
-
3、增加脚本可以执行的权限
[root@localhost bin]# chmod u+x zk.sh
-
4、测试脚本运行
[root@localhost module]# zk.sh start # 启动Zookeeper集群 [root@localhost module]# zk.sh stop # 停止Zookeeper集群
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)