Zookeeper02之集群环境搭建

网友投稿 517 2022-05-29

在上文的基础上本文来介绍下ZooKeeper的集群搭建。准备环境如果不清楚的可以参考上文:

Zookeeper01之介绍和安装环境准备

Zookeeper集群搭建

1.获取安装文件并解压

官网地址:http://zookeeper.apache.org/

-:http://mirror.bit.edu.cn/apache/zookeeper/

Linux下载命令:

wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

1

解压缩安装文件

tar -zxvf zookeeper-3.4.10.tar.gz

1

目录结构说明

cd命令进入解压文件夹

2.配置zoo.cfg文件

从上面的目录结构我们指定配置文件保存在conf目录下,所以我们cd到conf目录下

[root@hadoop-node01 zookeeper-3.4.10]# cd conf [root@hadoop-node01 conf]# ll 总用量 12 -rw-rw-r--. 1 1001 1001 535 3月 23 2017 configuration.xsl -rw-rw-r--. 1 1001 1001 2161 3月 23 2017 log4j.properties -rw-rw-r--. 1 1001 1001 922 3月 23 2017 zoo_sample.cfg [root@hadoop-node01 conf]#

1

2

3

4

5

Zookeeper02之集群环境搭建

6

7

1.将zoo_sample.cfg重命名为zoo.cfg

[root@hadoop-node01 conf]# mv zoo_sample.cfg zoo.cfg [root@hadoop-node01 conf]# ll 总用量 12 -rw-rw-r--. 1 1001 1001 535 3月 23 2017 configuration.xsl -rw-rw-r--. 1 1001 1001 2161 3月 23 2017 log4j.properties -rw-rw-r--. 1 1001 1001 922 3月 23 2017 zoo.cfg [root@hadoop-node01 conf]#

1

2

3

4

5

6

7

2.修改zoo.cfg配置文件

修改的地方有两处:

修改zookeeper存储数据的位置

添加集群节点信息

# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/root/app/zookeeper-3.4.10/zkData dataLogDir=/root/app/zookeeper-3.4.10/zkLog # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 server.1=hadoop-node01:2888:3888 server.2=hadoop-node02:2888:3888 server.3=hadoop-node03:2888:3888

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

配置说明

3.myid配置

在 zookeeper的数据的存储目录中创建 myid文件,本文既是zkData目录下,这个myid中的内容只有一行信息,即表示我们集群节点的标示,范围在1~255之间。每个节点中的myid的数字和我们在zoo.cfg中的server.数字=host…对应,

创建这块Data目录:

mkdir zkData

1

创建myid并设置值为1(hadoop-node01节点)

[root@hadoop-node01 zookeeper-3.4.10]# echo 1 > zkData/myid [root@hadoop-node01 zookeeper-3.4.10]# cat zkData/myid 1

1

2

3

4.分发安装文件

将我们hadoop-node01上安装配置的环境分发到hadoop-node02和hadoop-node03两个节点相同的目录下:

scp -r zookeeper-3.4.10 hadoop-node02:`pwd` scp -r zookeeper-3.4.10 hadoop-node03:`pwd`

1

2

确认分发成功后分别修改hadoop-node02和hadoop-node03上的myid的值分别为2,3

5.启动

分别在三个节点的zookeeper的安装根目录下执行如下启动命令:

./bin/zkServer.sh start

1

查看状态,分别在每个节点上执行

./bin/zkServer.sh status

1

hadoop-node01

hadoop-node02

hadoop-node03

说明启动成功

6.测试

我们将zookeeper集群节点半数存活即可用,我们现在是3个节点,那么我们kill掉一个节点应该还可以继续使用,kill掉两个就不能够使用了。所以我们来测试下

查看zookeeper进程编号

通过jps命令即可查看

[root@hadoop-node02 zookeeper-3.4.10]# jps 1559 QuorumPeerMain #这个是zookeeper的服务 1646 Jps

1

2

3

kill 掉这个节点,也就是leader节点

[root@hadoop-node02 zookeeper-3.4.10]# jps 1559 QuorumPeerMain 1646 Jps [root@hadoop-node02 zookeeper-3.4.10]# kill -9 1559 [root@hadoop-node02 zookeeper-3.4.10]# jps 1668 Jps

1

2

3

4

5

6

再次查看另外两个节点情况

hadoop-node01

hadoop-node03

hadoop-node03变成了leader节点了。

再次将leader节点kill掉

再次将leader节点kill掉,也就是将3个集群节点中的两个kill掉后发现集群不可用了。

[root@hadoop-node03 zookeeper-3.4.10]# jps 1237 QuorumPeerMain 1325 Jps [root@hadoop-node03 zookeeper-3.4.10]# kill -9 1237 [root@hadoop-node03 zookeeper-3.4.10]#

1

2

3

4

5

查看hadoop-node01

Zookeeper的选举机制

为什么要进行Leader选举?

Leader 主要作用是保证分布式数据一致性,即每个节点的存储的数据同步。遇到以下两种情况需要进行Leader选举

服务器初始化启动

服务器运行期间无法和Leader保持连接,Leader节点崩溃,逻辑时钟崩溃。

1.服务器初始化时Leader选举

zookeeper由于其自身的性质,一般建议选取奇数个节点进行搭建分布式服务器集群。以3个节点组成的服务器集群为例,说明服务器初始化时的选举过程。启动第一台安装zookeeper的节点时,无法单独进行选举,启动第二台时,两节点之间进行通信,开始选举Leader。

1)每个Server投出一票。他们两都选自己为Leader,投票的内容为(SID,ZXID)。 SID即Server的id,安装zookeeper时配置文件中所配置的myid;ZXID,事务id, 为节点的更新程度,ZXID越大,代表Server对Znode的操作越新。由于服务器初始化, 每个Sever上的Znode为0,所以Server1投的票为(1,0),Server2为(2,0)。 两Server将各自投票发给集群中其他机器。 2)每个Server接收来自其他Server的投票。集群中的每个Server先判断投票有效性, 如检查是不是本轮的投票,是不是来Looking状态的服务器投的票。 3)对投票结果进行处理。先了解下处理规则 - 首先对比ZXID。ZXID大的服务器优先作为Leader - 若ZXID相同,比如初始化的时候,每个Server的ZXID都为0, - 就会比较myid,myid大的选出来做Leader。 对于Server而言,他接受到的投票为(2,0),因为自身的票为(1,0),所以此时它会选举Server2为Leader, 将自己的更新为(2,0)。而Server2收到的投票为Server1的(1,0)由于比他自己小, Server2的投票不变。Server1和Server2再次将票投出,投出的票都为(2,0)。 4) 统计投票。每次投票之后,服务器都会统计投票信息,如果判定某个Server有过半的票数投它, 那么该Server将会作为Leader。对于Server1和Server2而言,统计出已经有两台机器接收了(2,0)的投票信息, 此时认为选出了Leader。 5)改变服务器状态。当确定了Leader之后,每个Server更新自己的状态, Leader将状态更新为Leading,Follower将状态更新为Following。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

2.服务器运行期间的Leader选举

zookeeper运行期间,如果有新的Server加入,或者非Leader的Server宕机,那么Leader将会同步数据到新Server或者寻找其他备用Server替代宕机的Server。若Leader宕机,此时集群暂停对外服务,开始在内部选举新的Leader。假设当前集群中有Server1、Server2、Server3三台服务器,Server2为当前集群的Leader,由于意外情况,Server2宕机了,便开始进入选举状态。过程如下

1) 变更状态。其他的非Observer服务器将自己的状态改变为Looking,开始进入Leader选举。 2) 每个Server发出一个投票(myid,ZXID),由于此集群已经运行过,所以每个Server上的ZXID可能不同。 假设Server1的ZXID为145,Server3的为122,第一轮投票中,Server1和Server3都投自己, 票分别为(1,145)、(3,122),将自己的票发送给集群中所有机器。 3) 每个Server接收接收来自其他Server的投票,接下来的步骤与初始化时相同。

1

2

3

4

5

6

7

8

ZooKeeper

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:番外2. OpenCV 中摄像头捕获与视频处理与常见问题解决方案
下一篇:这可能是目前最全的Redis高可用技术解决方案总结
相关文章