欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

zookeeper集群搭建

程序员文章站 2022-07-14 11:45:45
...

前言

zookeeper是什么就不用介绍了,很多分布式集群组件都使用zookeeper来实现集群化,它本身也能帮助我们实现一些诸如动态配置、分布式锁、消息推送等功能,这篇笔记简单记录一下一个简单的zookeeper集群如何搭建。

zookeeper本身可以以standalone模式(单节点状态)安装运行,不过它的长处在于通过分布式zookeeper集群(一个leader,多个follower),基于一定的策略来保证zookeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。

1. 集群角色

zookeeper主要有三个角色节点:leader、follower和observer。

  • leader,用于负责进行投票的发起和决议,更新系统状态
  • follower, 用于接受客户端请求并想客户端返回结果,在选主过程中参与投票
  • observer, 可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度

一个集群中,leader和follower角色节点是必须的,而observer角色节点不是必须的。

2. 集群节点选择

一个zookeeper集群需要运行几个zookeeper节点呢?你可以运行一个zookeeper节点,但那就不是集群了。如果要运行zookeeper集群的话,最好部署3,5,7个zookeeper节点。为什么最好是奇数?当然偶数不是不可以,但zookeeper选举需要至少N/2 + 1(N是集群中机器数量)节点参与才能成立,比如4台机器的集群,存活两台就集群拒绝提供服务来,但3台的话,剩2台却可以提供服务。

你需要给每个zookeeper 1G左右的内存,如果可能的话,最好有独立的磁盘,因为独立磁盘可以确保zookeeper的读写高性能,zookeeper的数据快照是可能会经常读写磁盘的。

3. 安装

zookeeper运行需要java的支持,准备好java运行环境,不同的Linux版本安装Java的方式不一样,这里就不在展开叙述了。

zookeeper的安装很简单,我们只需要下载zookeeper压缩包,然后解压、配置、执行就可以了。我的服务是Ubuntu系统,安装方式如下:

tar -C /usr/local/ -xf zookeeper-3.4.10.tar.gz
cd /usr/local/
mv zookeeper-3.4.8 zookeeper
cd zookeeper
cp conf/zoo_sample.cfg conf/zoo.cfg  #zk默认是没有zoo.cfg文件的,但有个示例文件,复制一份即可

把zookeeper的运行加入到PATH中

vim /etc/profile
export PATH=$PATH:/usr/local/zookeeper/bin    # 加到文件最后
source /etc/profile

使用命令 env 查看,会看到已经配置到系统PATH中,可以在任意地方执行bin目录下的脚本。

这个时候执行 zkServer.sh start 已经能够启动zookeeper了,用zkServer.sh status查看运行状态,可以看到当前zookeeper是在Mode: standalone模式下运行的。在zookeeper目录下bin文件夹下有zookeeper运行日志 zookeeper.out,可以查看运行情况。

4. 集群配置

zookeeper搭建完毕后,我们现在来配置zookeeper集群。
注意:在搭建zookeeper集群时,一定要停止已经启动的zookeeper。

4.1 配置文件修改

zookeeper集群的搭建很简单,我们只需要修改每台服务器的zoo.cfg配置文件然后进行相关的操作即可。先来修改zookeeper的配置文件conf/zoo.cfg,如下:

tickTime=2000			##作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔
initLimit=10			##Leader服务器等待Follower启动并完成数据同步的时间,默认值10,表示tickTime的10倍
syncLimit=5			##Leader服务器和Follower之间进行心跳检测的最大延时时间,默认值5,表示tickTime的5倍
clientPort=2181			  ##服务器对外服务端口,一般设置为2181
dataLogDir=/data/zookeeper/logs  ##Zookeeper服务器存储事务日志的目录
dataDir=/data/zookeeper/data     ##Zookeeper服务器存储快照文件的目录,必须配置
server.1= 192.168.1.9:2888:3888
server.2= 192.168.1.12:2888:3888
server.3= 192.168.1.23:2888:3888

参数补充说明:

  • 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所用的端口。

4.2 配置目录

创建上面配置文件中表明的两个目录

4.3 创建server id文件

除了修改zoo.cfg配置文件外,zookeeper集群模式下还要配置一个myid文件,这个文件需要放在dataDir目录下。

这个文件里面有一个数据就是A的值(该A就是zoo.cfg文件中server.A=B:C:D中的A),在zoo.cfg文件中配置的dataDir路径中创建myid文件。

5. 查看集群

由于配置了系统PATH,直接在三台机器中分别使用zkServer.sh start启动zookeeper即可。
启动完成后,使用zkServer.sh status查看每台机器的运行情况,会看到有两台机器的运行模式是follower,一台机器是leader,这表明我们的zookeeper集群搭建完成了。

6. 连接集群

zookeeper集群搭建完毕后,我们可以通过客户端脚本,连接到zookeeper集群上。

对于客户端来说,zookeeper集群是一个整体,连接到zookeeper集群实际上感觉在独享整个集群的服务,所以,你可以在任何一个结点上建立到服务集群的连接,例如:zkCli.sh -server 192.168.1.9:2181