zookeeper集群部署运维手册
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 协议暴露端口 |