zookeeper集群搭建

前言

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值