ZooKeeper 集群搭建

之前提到了 ZooKeeper 的选举机制,默认使用的算法是 FastLeaderElection,其采用投票数大于半数则胜出的逻辑。所以 ZooKeeper 的集群节点最好是奇数个,当然,偶数个也是可以的。这里以 3 台节点为例。

在搭建集群之前,先要创建几个文件夹进行管理。可以在 /root 目录下创建 /export 文件夹,在 /export 文件夹下分别创建 /servers、/softwares 和 /data 目录。其中文件夹 servers 存放 ZooKeeper 等组件的,softwares 存放压缩包,data 存放的是数据。

ZooKeeper 集群搭建有几个前提条件:

需要修改各个节点的主机名。可通过修改 /etc/sysconfig 目录下的 network 文件进行主机名修改,修改项为:NETWORKING = yes,HOSTNAME = node-1。其中 HOSTNAME 按自己喜欢的进行修改。

修改主机名和 IP 的映射关系。HOSTS 文件在 /etc 目录下。

关闭防火墙。个人学习用可以关闭各个节点的防火墙,这样方便个组件节点之间的通信。查看防火墙状态:service iptables status;关闭防火墙:service iptables stop,这种方法是临时的,虚拟机只有重启,防火墙就自动开启;关闭防火墙开机启动:service iptables off,这种方法即关闭开启启动,想要开机启动需将 off 改为 on。

由于节点之间需要通信,需要配置 SSH 免密登陆。在其中一台节点上生成密匙文件:ssh-key -t rsa;将公匙发送到其他节点:ssh-copy-id node-2。

同步集群时间。从节点需要以心跳机制向主节点报活,如果超过一定时间,主节点则认为该从节点宕机了。常用的手动进行时间同步:date -s "2019-1-22 10:07:00";或者通过网络同步:ntpdate cn.pool.ntp.org

安装并配置了 JDK 环境变量。

ZooKeeper 集群搭建:

上传或者下载安装包;使用解压命令解压安装包至指定目录:tar -zxvf zookeeper-3.4.5.tar.gz -C /export/servers/;文件名按需修改即可:mv zookeeper-3.4.5 zk。

配置 ZooKeeper 环境变量。需要修改 /etc 目录下的 profile 文件,在 profile 文件最后添加:

#set ZooKeeper env

ZOOKEEPER_HOME=/export/servers/zk

PATH=$PATH:$ZOOKEEPER_HOME/bin

重新加载 profile 文件:source /etc/profile

修改 ZooKeeper 配置文件 zoo.cfg。添加以下内容:

dataDir=/export/data/zkdata

server.1=node-1:2888:3888

server.2=node-2:2888:3888

server.3=node-3:2888:3888

注意要删除或注释原 dataDir,dataDir 是 ZooKeeper 数据存储目录。

创建 zkdata 文件夹,在 zkdata 文件夹下创建 myid 文件:echo 1 > myid。myid 文件中只有一行,myid 必须在集群环境中服务器标识中是唯一的,且大小在 1~255 之间。

发送 ZooKeeper 安装目录文件到其他节点,并修改配置环境变量,添加 zkdata 文件夹,创建 myid 文件,注:各个节点的 myid 与其他节点的要不一样。

到目前为止,ZooKeeper 集群就已搭建完毕。

可以通过一键启动集群以及 ZooKeeper 的简单操作来测试集群是否搭建成功。

PS.

配置文件中参数说明。

tickTime 这个时间是作为 ZooKeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是说每个 tickTime 时间就会发送一个心跳。

initLimit 这个配置项是用来配置 ZooKeeper接受客户端(这里所说的客户端不是用户连接 ZooKeeper 服务器的客户端,而是 ZooKeeper 服务器集群中连接到 leader 的 follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。

当已经超过 10 个心跳的时间(也就是 tickTime)长度后 ZooKeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。

syncLimit 这个配置项标识 leader 与 follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是5*2000=10 秒。

dataDir 顾名思义就是 ZooKeeper 保存数据的目录,默认情况下 ZooKeeper 将写数据的日志文件也保存在这个目录里;

clientPort 这个端口就是客户端连接 ZooKeeper 服务器的端口,ZooKeeper 会监听这个端口接受客户端的访问请求;

server.A=B:C:D 中的 A 是一个数字,表示这个是第几号服务器,B 是这个服务器的 IP 地址,C 第一个端口用来集群成员的信息交换,表示这个服务器与集群中的 leader 服务器交换信息的端口,D 是在 leader 挂掉时专门用来进行选举 leader 所用的端口。

End.

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190122G1CLAY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励