zookeeper集群部署运维手册

  |   2,326 浏览

zookeeper介绍

zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。本文将从使用者角度详细介绍 Zookeeper 的安装和配置文件中各个配置项的意义,以及分析 Zookeeper 的典型的应用场景(配置文件的管理、集群管理、同步锁、Leader 选举、队列管理等)。

官网:http://zookeeper.apache.org/

下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/

Zookeeper相关角色介绍

ZooKeeper集群三种角色Leader****、Follower****、Observer

Leader可以接受client请求,也接收其他Server转发的写请求,负责更新系统状态。

Follower也可以接收client请求,如果是写请求将转发给Leader来更新系统状态,读请求则由Follower的内存数据库直接响应。

Observer的作用同Follower类似,唯一区别就是它不参与选主过程

单机模式详细配置

1、 单机安装非常简单,只要获取到 Zookeeper 的压缩包并解压到某个目录如:/home/zookeeper-3.4.6 下,Zookeeper 的启动脚本在 bin 目录下,Linux 下的启动脚本是 zkServer.sh 。

2、 在启动脚本之前,需要进行配置,在zookeeper的conf目录下,将zoo_sample.cfg改名为zoo.cfg,zookeeper在启动时会找该文件作为默认配置文件。配置文件中常见几个配置项目含义。

a) tickTime=2000 该时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

b) dataDir=/opt/zookeeper-3.4.6 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。

c) clientPort=2181 该端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

集群模式详细配置

Zookeeper集群常见配置项含义。

i. initLimit=10 zookeeper客户端(表示集群中的follower服务器)初始化连接最长能忍受多少个心跳时间间隔数(follower服务器到leader服务器的连接)。 当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。

ii. syncLimit=5 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒

配置集群时需要在zoo.cfg增加如下配置。

server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

所有集群服务上该配置文件保持一直即可。

增加 myid文件

除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。

详细配置如下:

zoo.cfg详细配置

tickTime=2000

initLimit=10

syncLimit=5

dataDir= /opt/zookeeper-3.4.6

clientPort=2181

server.1=172.16.33.222:2555:3555

server.2=172.16.33.223:2555:3555

server.3=172.16.33.227:2555:3555

172.16.33.222 服务器myid配置

zookeeper 客户端通过域名访问

目前配置了三台zookeeper服务器,ip分别为172.16.33.222、172.16.33.223、172.16.33.227

a)、hosts 配置

172.16.33.222 elasticjob.zookeeper

172.16.33.223 elasticjob.zookeeper

172.16.33.227 elasticjob.zookeeper

b)、dubbo客户端配置

dubbo.registry.address=zookeeper://elasticjob.zookeeper:2181  

c)、elastic-job 客户端配置

serverLists=elasticjob.zookeeper:2181  

Zookeeper 常用命令

停启服务命令

sh zkServer.sh start 启动服务

sh zkServer.sh stop 停止服务

sh zkCli.sh   客户端连接

客户端内命令

help 命令

help命令 会列出所有命令

Connect 命令

Connect 172.16.33.227:2181 可以连接到其它zookeeper服务器上。

运维

日志和快照清理配置

Zookeeper会不断的产生日志文件与快照,如不及时清理会占用非常大的磁盘控制。从3.4.0 开始zookeeper自己提供了清理快照与日志的配置。需要在zoo.cfg中进行配置autopurge.purgeInterval 与autopurge.snapRetainCount。

a) autopurge.purgeInterval参数说明

在上文中已经提到,3.4.0及之后版本,ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能。

b) autopurge.snapRetainCount参数说明

这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。

c) 参数具体配置

在zookeeper-3.4.6/conf/zoo.cfg 文件中增加两条配置记录。(下面配置文件为1小时清理一次,保留文件数目为4)

autopurge.purgeInterval=1

autopurge.snapRetainCount=4

日志文件配置

d) dataLogDir 配置参数说明:

事务日志输出目录。尽量给事务日志的输出配置单独的磁盘或是挂载点,这将极大的提升ZK性能。如该参数不进行配置日志会与快照保存在dataDir 配置的目录下。建议配置dataLogDir 。

e) 详细配置

在zookeeper-3.4.6/conf/zoo.cfg 文件中增加配置记录。

dataLogDir=/opt/zookeeper-3.4.6/log

端口号说明

Zookeeper端口号:

端口号 作用说明 备注
2555 Leader 服务器交换信息端口 在配置文件zookeeper-3.4.6/conf/zoo.cfg 配置server.3=172.16.33.227:2555:3555
3555 Leader 选举端口 在配置文件 zookeeper-3.4.6/conf/zoo.cfg 配置server.3=172.16.33.227:2555:3555
2181 监听客户端端口 在配置文件 zookeeper-3.4.6/conf/zoo.cfg 配置clientPort=2181

Dubbo端口号

端口号 作用说明 备注
20001 dubbo服务暴露端口 Interface中dubbo协议暴露端口
20002 dubbo服务暴露端口 Sms_service中dubbo协议暴露端口
20008 dubbo服务暴露端口 job中dubbo 协议暴露端口