集群搭建事项
- zk集群,只要大多数(超过半数)的机器准备好了,就可以提供服务了。
- 容错集群至少三台,建议采用奇数台来搭建集群。
- 每台服务运行在独立的机器上。
集群搭建
1.集群配置基本参数介绍
在第二章说到zoo.cfg中有两个配置参数和集群有关:initLimit和syncLimit,除此之外还有一些其他的配置。
- initLimit:表示集群同步初始化允许容忍的最长时间,是tickTime的倍数,比如initLimit = 10,tickTime = 1000,则表示集群同步初始化最长能容忍10秒钟,如果zk集群确实很大,机器很多,可以适当调高这个参数。
- syncLimit:表示客户端和zk集群请求应答的超时时间,同样是tickTime的倍数。
- server.id=host:port:port:这个配置也是放在zoo.cfg文件中,集群中有几台机器,就需要配置几个,比如集群中有三台机器需要配置,eg:
server.1=localhost:2182:2183
server.2=localhost:2282:2283
server.3=localhost:2382:2383
其中id表示集群中每一台机器的编号,localhost表示机器的ip地址,第一个port用来和Leader进行交互,第二个port用来选举Leader。(zk的leader和选举后面再细讲)
- myid配置文件:这个配置文件放置在zoo.cfg中的dataDir配置项所配置的目录中,文件里在只需要一个id数字即可,表示当前机器在集群中的id是多少。
2.集群搭建步骤
这里以单机搭建三个服务的集群为例,多机搭建要比单机简单。
- 我们将第一章中下载解压的zookeeper文件夹复制成三分:
- 点开每一个文件夹下的conf目录下的zoo.cfg文件,第一个服务配置如下
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper1
clientPort=2181
server.1=localhost:2182:2183
server.2=localhost:2282:2283
server.3=localhost:2382:2383
第二个服务配置如下:
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper2
clientPort=2281
server.1=localhost:2182:2183
server.2=localhost:2282:2283
server.3=localhost:2382:2383
第三个服务配置如下:
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper2
clientPort=2381
server.1=localhost:2182:2183
server.2=localhost:2282:2283
server.3=localhost:2382:2383
- 打开各自dataDir配置的目录:/tmp/zookeeper1、/tmp/zookeeper2、/tmp/zookeeper3,在里面放上myid文件,文件内容分别为1、2、3。
这样集群的配置就完成了,由于是单机配集群,所以zoo.cfg文件中,clientPort都不一致,以及其他的端口都不一样,否则会出现端口冲突。dataDir也不一致,否则所有的日志和文件都会放到同一个目录下甚至发生问题。
zk集群的Leader选举
zk集群中存在一个leader,而每次leader宕掉之后,集群需要自主的重新进行leader选举。其中存在一些概念:
- 服务器id:上文搭建集群时,每个节点都有的myid。
- 事务id:当前服务器中最大的Zxid。
- 逻辑时钟:发起投票轮数的计数器,记录本次投票为第几轮
- 选举状态:LOOKING(竞选状态)、FOLLOWING(随从状态,同步Leader数据,参与投票)、OBSERVING(观察者状态,同步Leader数据,不参与投票)、LEADING(领导状态)。
而服务器之间进行选举时需要互相传递参数为(服务器id,事务id,逻辑时钟,选举状态)。
选举算法
- 每一个服务器都向其他服务器发起选举,并且把票投给自己。
- 每个服务器也就会收到来自其他服务器的投票,如果其他服务器的事务id比自己的大,那就投给他一票,如果比自己小就不投,如果事务id和自己一样,那就再比较服务器id,如果服务器id比自己的大,投给他,比自己小不投。
- 发起者收到大家的反馈后,看投票数(包括自己给自己投)是否大于集群的的半数,大于则胜出,担任领导者,如果没有超过半数,则再此发起投票。
来源:CSDN
作者:程序员老杨
链接:https://blog.csdn.net/qq_30095631/article/details/103450527