【Zookeeper 初级】02、Zookeeper 集群部署

目录

一、zookeeper 集群操作

1.1 zookeeper 集群部署

1.1.1 集群规划

1.1.2 安装 zookeeper(在 hadoop01 上操作)

1.1.3 配置服务器编号

1.1.4 配置 zoo.cfg 文件

1.1.5 集群操作

1.2 选举机制(面试重点)

1.2.1 Zookeeper 选举机制——第一次启动

1.2.2 Zookeeper 选举机制——非第一次启动

1.3 ZK 集群启动停止脚本

1.3.1 编写启停脚本

1.3.2 编写查看集群 Java 进程脚本

1.3.3 测试启停


一、zookeeper 集群操作

1.1 zookeeper 集群部署

1.1.1 集群规划

注:最好是三台,但我本地资源不够,就塔两台了。

主机名 IP
hadoop01 192.168.170.130
hadoop02 192.168.170.131

1.1.2 安装 zookeeper(在 hadoop01 上操作)

可以查看上一篇文章进行操作:【Zookeeper 初级】01、Zookeeper 入门及安装_Stars.Sky的博客-CSDN博客

并在 hadoop02 上安装 JDK即可。

1.1.3 配置服务器编号

  • (1)在 /opt/module/zookeeper-3.7.1/zkData 目录下创建一个 myid 的文件
[root@hadoop01 /opt/module/zookeeper-3.7.1]# cd /opt/module/zookeeper-3.7.1/zkData/
[root@hadoop01 /opt/module/zookeeper-3.7.1/zkData]# vim myid
1

在文件中添加与 server 对应的编号 (注意:上下不要有空行,左右不要有空格)

  • (2)拷贝配置好的 zookeeper 到其他机器上
#1. 编写分发脚本
[root@hadoop01 /opt/module]# pwd
/opt/module
[root@hadoop01 /opt/module]# vim xsync
#!/bin/bash
 
#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi
 
#2. 遍历集群所有机器
for host in hadoop01 hadoop02
do
    echo ====================  $host  ====================
    #3. 遍历所有目录,挨个发送
 
    for file in $@
    do
        #4. 判断文件是否存在
        if [ -e $file ]
            then
                #5. 获取父目录
                pdir=$(cd -P $(dirname $file); pwd)
 
                #6. 获取当前文件的名称
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done
 
[root@hadoop01 /opt/module]# chmod 777 xsync 
[root@hadoop01 /opt/module]# mv xsync /usr/bin/
 
#2. 配置主机解析。两台机子都要执行
[root@hadoop01 /opt/module]# vim /etc/hosts
192.168.170.130 hadoop01
192.168.170.131 hadoop02
 
#3. 配置免密登录
# ⼀直回⻋就⾏
[root@hadoop01 /opt/module]# ssh-keygen -t rsa
 
# 等待一会,然后输入 yes,再输入各主机的密码即可
[root@hadoop01 /opt/module]# for i in hadoop01 hadoop02;do ssh-copy-id -i /root/.ssh/id_rsa.pub $i;done
 
#4. 分发安装包
[root@hadoop01 /opt/module]# xsync zookeeper-3.7.1/
 
#5. 在 hadoop02 上修改 myid 文件中内容为 2
[root@hadoop02 ~]# vim /opt/module/zookeeper-3.7.1/zkData/myid 
2

1.1.4 配置 zoo.cfg 文件

  • (1)打开 zoo.cfg 文件
# 在文件末尾添加下面内容
[root@hadoop01 /opt/module]# vim zookeeper-3.7.1/conf/zoo.cfg 
#######################cluster#######################
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888

# 同步 zoo.cfg 配置文件
[root@hadoop01 /opt/module]# xsync zookeeper-3.7.1/conf/zoo.cfg 
  • (2)配置参数解读
server.A=B:C:D
  • A 是一个数字,表示这个是第几号服务器;

        集群模式下配置一个文件 myid 这个文件在 dataDir 目录 下,这个文件里面有一个数据就是 A的值, Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是哪个 server。

  • B 是这个服务器的地址;

  • C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口;

  • D 是万一集群中的 Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。 

1.1.5 集群操作

  • (1)分别启动 Zookeeper
[root@hadoop01 /opt/module]# cd /opt/module/zookeeper-3.7.1/
[root@hadoop01 /opt/module/zookeeper-3.7.1]# bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.7.1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

[root@hadoop02 /opt/module]# cd /opt/module/zookeeper-3.7.1/
[root@hadoop02 /opt/module/zookeeper-3.7.1]# bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.7.1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
  • (2)查看状态
[root@hadoop01 /opt/module/zookeeper-3.7.1]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.7.1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: followe

[root@hadoop02 /opt/module/zookeeper-3.7.1]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.7.1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader

1.2 选举机制(面试重点)

1.2.1 Zookeeper 选举机制——第一次启动

  1. 服务器 1 启动,发起一次选举。服务器 1 投自己一票。此时服务器 1 票数一票不够半数以上 3 票,选举无法完成服务器 1 状态保持为 LOOKING;

  2. 服务器 2 启动,再发起一次选举。服务器 1 和 2 分别投自己一票并交换选票信息,此时服务器 1 发现服务器 2 的 myid 比自己目前投票推举的(服务器 1) 大,更改选票为推举服务器 2。此时服务器 1 票数 0 票,服务器 2 票数 2 票,没有半数以上结果,选举无法完成,服务器 1、2 状态保持 LOOKING;

  3. 服务器 3 启动,发起一次选举。此时服务器 1 和 2 都会更改选票为服务器 3。此次投票结果:服务器 1 为 0 票,服务器 2 为 0 票,服务器 3 为 3 票。此时服务器 3 的票数已经超过半数,服务器 3 当选 Leader。服务器 1、2 更改状态为 FOLLOWING,服务器 3 更改状态为 LEADING;

  4. 服务器 4 启动,发起一次选举。此时服务器 1、2、3 已经不是 LOOKING 状态不会更改选票信息。交换选票信息结果:服务器 3 为 3 票,服务器 4 为1 票。此时服务器 4 服从多数更改选票信息为服务器 3 ,并更改状态为 FOLLOWING;

  5. 服务器 5 启动,同 4 一样当小弟 。

1.2.2 Zookeeper 选举机制——非第一次启动

1.3 ZK 集群启动停止脚本

1.3.1 编写启停脚本

[root@hadoop01 /opt/module/zookeeper-3.7.1]# vim /usr/bin/zk.sh
#!/bin/bash

case $1 in
"start") {
    for i in hadoop01 hadoop02
    do
        echo -------- zookeeper $i 启动 --------
        ssh $i "/opt/module/zookeeper-3.7.1/bin/zkServer.sh start"
    done
};;

"stop") {
    for i in hadoop01 hadoop02
    do
        echo -------- zookeeper $i 停止 --------
        ssh $i "/opt/module/zookeeper-3.7.1/bin/zkServer.sh stop"
    done
};;

"status") {
    for i in hadoop01 hadoop02
    do
        echo -------- zookeeper $i 状态 --------
        ssh $i "/opt/module/zookeeper-3.7.1/bin/zkServer.sh status"
    done
};;

esac

[root@hadoop01 /opt/module/zookeeper-3.7.1]# chmod 777 /usr/bin/zk.sh 

1.3.2 编写查看集群 Java 进程脚本

[root@hadoop01 /opt/module/zookeeper-3.7.1]# vim /usr/bin/jpsall
#!/bin/bash

for host in hadoop01 hadoop02
do
        echo ========= $host =========
        ssh $host /usr/java/jdk1.8.0_361/bin/jps -l
done

[root@hadoop01 /opt/module/zookeeper-3.7.1]# chmod 777 /usr/bin/jpsall 

1.3.3 测试启停

[root@hadoop01 /opt/module/zookeeper-3.7.1]# zk.sh start
-------- zookeeper hadoop01 启动 --------
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.7.1/bin/../conf/zoo.cfg
Starting zookeeper ... already running as process 4688.
-------- zookeeper hadoop02 启动 --------
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.7.1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

[root@hadoop01 /opt/module/zookeeper-3.7.1]# jpsall 
========= hadoop01 =========
4688 org.apache.zookeeper.server.quorum.QuorumPeerMain
4992 sun.tools.jps.Jps
========= hadoop02 =========
22372 org.apache.zookeeper.server.quorum.QuorumPeerMain
22421 sun.tools.jps.Jps

[root@hadoop01 /opt/module/zookeeper-3.7.1]# zk.sh status
-------- zookeeper hadoop01 状态 --------
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.7.1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
-------- zookeeper hadoop02 状态 --------
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.7.1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader

[root@hadoop01 /opt/module/zookeeper-3.7.1]# zk.sh stop
-------- zookeeper hadoop01 停止 --------
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.7.1/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
-------- zookeeper hadoop02 停止 --------
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.7.1/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

如出现下面报错信息:

[root@hadoop01 /opt/module/zookeeper-3.7.1]# zk.sh start
-------- zookeeper hadoop01 启动 --------
Error: JAVA_HOME is not set and java could not be found in PATH.
-------- zookeeper hadoop02 启动 --------
Error: JAVA_HOME is not set and java could not be found in PATH.

解决办法:(两台机器都需要修改)

[root@hadoop01 /opt/module/zookeeper-3.7.1]# vim /opt/module/zookeeper-3.7.1/bin/zkEnv.sh 
JAVA_HOME="/usr/java/jdk1.8.0_361"

上一篇文章:【Zookeeper 初级】01、Zookeeper 入门及安装_Stars.Sky的博客-CSDN博客

下一篇文章:【Zookeeper 初级】03、Zookeeper 客户端命令行操作_Stars.Sky的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/weixin_46560589/article/details/129529915