1、环境
系统:CentOS Linux release 7.6.1810
jdk:java version "1.8.0_141"
zk:apache-zookeeper-3.6.0
部署目录:/opt/app
2、部署
安装zk
# 创建实例目录 mkdir -p /opt/app/zookeeper/{zk1,zk2,zk3} cd /opt/app/zookeeper/zk1 # 下载zk wget https://archive.apache.org/dist/zookeeper/zookeeper-3.6.0/apache-zookeeper-3.6.0-bin.tar.gz # 解压 tar -xf apache-zookeeper-3.6.0-bin.tar.gz # 为了方便,修改名字 mv apache-zookeeper-3.6.0-bin zookeeper
实例部署如图所示
配置zk
# 创建data目录 cd /opt/app/zookeeper/zk1/zookeeper mkdir data # 创建myid文件 cd data touch myid # 在myid文件中写入1 # 修改配置文件 cd /opt/app/zookeeper/zk1/zookeeper/conf cp zoo_sample.cfg zoo.cfg vim zoo.cfg # 修改以下配置,保存退出 dataDir=/opt/app/zookeeper/zk1/zookeeper/data clientPort=2181 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890
如图所示
配置zk2、zk3实例
# 把zk1下的实例分别cp到zk2、zk3目录下 # 分别修改zk2、zk3 data目录下myid文件为2和3 vim /opt/app/zookeeper/zk2/zookeeper/data/myid vim /opt/app/zookeeper/zk3/zookeeper/data/myid # 分别修改conf目录下zoo.cfg文件 cd /opt/app/zookeeper/zk2/zookeeper/conf vim zoo.cfg # 修改clientPort端口为2182 cd /opt/app/zookeeper/zk3/zookeeper/conf vim zoo.cfg # 修改clientPort端口为2183
启动实例
启动的时候可以再开个窗口观察下日志有否异常,日志目录:/opt/app/zookeeper/zk1/zookeeper/logs,有异常就处理
# 启动实例zk1 cd /opt/app/zookeeper/zk1/zookeeper/bin ./zkServer.sh start # 启动实例zk2 cd /opt/app/zookeeper/zk2/zookeeper/bin ./zkServer.sh start # 启动实例zk3 cd /opt/app/zookeeper/zk3/zookeeper/bin ./zkServer.sh start
# 如果出现8080端口被占用的情况,则修改下zk1、zk2、zk3下配置zoo.cfg文件,通过查阅官方文档,发现这是Zookeeper3.5版本的新特性:这是Zookeeper AdminServer,默认使用8080端口,我们可以把三个实例修改成不同的端口即可。
zk1:zoo.cfg中添加:admin.serverPort=
8080
zk2:zoo.cfg中添加:admin.serverPort=
8180
zk3:zoo.cfg中添加:admin.serverPort=
8280
然后重启,观察日志。
观察zk集群状态
zk1状态
cd /opt/app/zookeeper/zk1/zookeeper/bin
./zkServer.sh status
zk2状态
cd /opt/app/zookeeper/zk2/zookeeper/bin
./zkServer.sh status
zk3状态
cd /opt/app/zookeeper/zk3/zookeeper/bin
./zkServer.sh status
可以看到现在实例zk3为主,zk1、zk2为从,我们可以尝试停掉主节点看看zk的主从切换是否正常
cd /opt/app/zookeeper/zk3/zookeeper/bin
./zkServer.sh stop
再启动zk3,查看状态,可以看到现在实例zk3已经变成从节点
观察下实例zk1、zk2哪个变为主节点
如上图可以看到实例zk2已经变成主节点,说明zk的选举也正常,zk单机集群部署完成!