ZooKeeper 集群搭建
ZooKeeper 软件安装须知
鉴于 ZooKeeper 本身的特点,服务器集群的节点数推荐设置为奇数台。我这里我规划为三台,
为别为 hadoop01,hadoop02,hadoop03
具体安装
上网找 ZooKeeper 的软件安装,并下载下来
下载地址: http://mirrors.hust.edu.cn/apache/zookeeper/
版本号:ZooKeeper-3.4.7.tar.gz解压安装到自己的目录
1
tar -zxvf ZooKeeper-3.4.7.tar.gz -C apps/
修改配置文件
1 | cd conf/ |
vi zoo.cfg
修改配置项:
1 | tickTime=2000 |
配置参数解析:
tickTime | 基本事件单元,以毫秒为单位。它用来控制心跳和超时,默认情况下最小的会话超时时间为两倍的 tickTime。 |
initLimit | 此配置表示,允许 follower (相对于 leader 而言的“客户端”)连接并同步到 leader 的初始化连接时间,它以 tickTime 的倍数来表示。当超过设置倍数的 tickTime 时间,则连接失败。 |
syncLimit | 此配置表示,leader 与 follower 之间发送消息,请求和应答时间长度。如果 follower 在设置的时间内不能与 leader 进行通信,那么此 follower 将被丢弃。 |
dataDir | 存储内存中数据库快照的位置 注意:如果需要保留日志信息,那么可以考虑配置 dataLogDir 的位置,这个位置就是日志的存储目录。通常情况下是分开存储的。并且应该谨慎地选择日志存放的位置,使用专用的日志存储设备能够大大地提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会在很大程度上影响系统的性能。 |
clientPort | 监听客户端连接的端口,默认是 2181,最好不要修改 |
最后再增加 ZooKeeper 的服务器列表信息,格式为:
1 | server.id=主机名:心跳端口:选举端口 |
分发至其他服务器:
1 | [hadoop @hadoop01 zkdata]# scp -r ZooKeeper-3.4.7/ hadoop@hadoop02:$PWD |
然后是最重要的步骤,一定不能忘了。
去你的各个 ZooKeeper 服务器节点,
**
新建目录 dataDir=/home/hadoop/apps/zkdata
**,这个
目录就是你在 zoo.cfg 中配置的 dataDir 的目录,建好之后,在里面新建一个文件,文件名叫 myid
,里面存放的内容就是服务器的 id,就是 server.1=hadoop01:2888:3888 当中的 id,就是 1,那么对应的每个服务器节点都应该做类似的操作
拿服务器 hadoop01 举例:
1 | [hadoop @hadoop01 zkdata]# mkdir /home/hadoop/apps/zkdata |
当以上所有步骤都完成时,意味着我们 ZooKeeper 的配置文件相关的修改都做完了。
启动软件并验证安装是否成功
先配置环境变量
1
2
3
4
5vi ~/.bashrc
增加两行:
export ZOOKEEPER_HOME=/home/hadoop/apps/ZooKeeper-3.4.7
export PATH=$PATH:$ZOOKEEPER_HOME/bin
保存退出,执行 source ~/.bashrc启动命令:
zkServer.sh start
注意:虽然我们在配置文件中写明了服务器的列表信息,但是,我们还是需要去每一台服务
器去启动,不是一键启动集群模式然后检查在每台服务器之间是不是都启动了有 QuorumPeerMain 进程,并检查每台服务器的
角色,使用命令:1
2jps 检查 QuorumPeerMain 进程
zkServer.sh status 查看服务器角色(leader or follower)
zk服务节点启动工作流程
集群模式下,单个zk服务节点启动时的工作流程大体如下:
- 统一由QuorumPeerMain作为启动类,加载解析zoo.cfg配置文件;
- 初始化核心类:ServerCnxnFactory(IO操作)、FileTxnSnapLog(事务日志及快照文件操作)、QuorumPeer实例(代表zk集群中的一台机器)、ZKDatabase(内存数据库)等;
- 加载本地快照文件及事务日志,恢复内存数据;
- 完成leader选举,节点间通过一系列投票,选举产生最合适的机器成为leader,同时其余机器成为follower或是observer。关于选举算法,就是集群中哪个机器处理的数据越新(通过ZXID来比较,ZXID越大,数据越新),其越有可能被选中;
- 完成leader与learner间的数据同步:集群中节点角色确定后,leader会重新加载本地快照及日志文件,以此作为基准数据,再结合各个learner的本地提交数据,leader再确定需要给具体learner回滚哪些数据及同步哪些数据;
- 当leader收到过半的learner完成数据同步的ACK,集群开始正常工作,可以接收并处理客户端请求,在此之前集群不可用。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 凉月の博客!
评论