Zookeeper - 集群搭建 + 群起集群脚本
一、配置参数
咱们在之前的本地安装中创建了一个 zkData 目录,咱们进入这个目录进行集群的配置:
创建一个叫 myid 的文件,这个名字是固定的,不要进行更改:
touch myid echo 2 > myid
没错这里只要写一个 2 在里面就可以了。这里可以看眼下面的图,咱们这台服务器叫做 102 所以咱们给这里的文件配置了一个 2 ,以此类推,后面的 103 和 104 就分别为 3 和 4 。这个 myid 是唯一的身份标识,所以不能重复使用。
创建完成后使用 xsync 进行同步分发,没有这个脚本的可以去看下
此篇中有提到过该脚本:
xsync /opt/module/zookpeer-3.5.7/
然后咱们需要立刻去 103 和104 机器中修改myid:
然后回到咱们的 102 机器上继续进行配置:
cd /opt/module/zookpeer-3.5.7/conf vim zoo.cfg
把以下内容复制粘贴到文件的末尾:
server.2=hadoop102:2888:3888 server.3=hadoop103:2888:3888 server.4=hadoop104:2888:3888
这个玩意儿是啥意思呢,咱们来看看
server.2=hadoop102:2888:3888:拿这个来举例,就按颜色来划分: server.2=hadoop102:2888:3888:表示这是第几号服务器 server.2=hadoop102:2888:3888:服务器地址 server.2=hadoop102:2888:3888:服务器 Follower 与集群中的 Leader 服务器交换信息的端口 server.2=hadoop102:2888:3888:万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口
保存退出后分发一下:
xsync zoo.cfg
二、启动集群
在 102 机器中启动zk集群:
cd /opt/module/zookpeer-3.5.7/bin
./zkServer.sh start
查看一下状态:
./zkServer.sh status
很明显集群并没有起来,原因是咱们只启动了一台 102 ,启动的台式少于一半,所以集群启动失败,咱们去 103 和 104 上面都启动一下:
cd /opt/module/zookpeer-3.5.7/bin ./zkServer.sh start
然后咱们看看他们的状态:
./zkServer.sh status
102:follower
103:leader
104:follower
启动成功
三、丢脸的至暗时刻
咱们来把一直是错的目录名字改一下。。。
102:
vim /opt/module/zookeeper-3.5.7/conf/zoo.cfg
改一下路径位置:
mv /opt/zookpeer /opt/zookeeper
xsync /opt/zookeeper
103 & 104:
rm -rf /opt/zookpeer
最后的最后记得修改一下 myid , 103 :
echo 3 > /opt/module/zookeeper-3.5.7/zkData/myid
104:
echo 4 > /opt/module/zookeeper-3.5.7/zkData/myid
四、Shell脚本一键启动、关闭集群
#!/bin/bash case $1 in "start"){ for i in hadoop102 hadoop103 hadoop104 do echo ---------- zookeeper $i 启动 ------------ ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start" done };; "stop"){ for i in hadoop102 hadoop103 hadoop104 do echo ---------- zookeeper $i 停止 ------------ ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop" done };; "status"){ for i in hadoop102 hadoop103 hadoop104 do echo ---------- zookeeper $i 状态 ------------ ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status" done };; esac
用一下看看(我这里是加了环境变量,平常按照正常脚本运行即可):
zk.sh start
zk.sh status
zk.sh stop