• 软件环境
  • 集群配置
  • 服务搭建
  • 运维相关:
  • 服务监控
  • 服务自愈



软件环境

ZooKeeper Server是一个Java语言实现的分布式协调服务框架,需要JDK 6或更高版本的支持。

集群配置

集群的数量建议是2*n+1。因为zookeeper集群中只要有超过一半的机器是正常工作的,那么整个集群对外就是可用的,正是基于这个特性,建议是将集群的机器数量控制为奇数较为合适。

服务搭建

  1. 部署jdk环境;
  2. 设置合理的jvm参数(集群部署完成后压测);
  3. 下载最新的稳定版本zookeeper,规划部署位置(主程序、配置文件、日志文件);
  4. 参数配置,配置文件zoo.cfg的主要参数:


tickTime=2000                                      #ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime。这也是ZK确认服务的心跳间隔。              
               initLimit=10                                           #Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许F在initLimit时间内完成这个工作。如果ZK集群的数据量确实很大了,有必要适当调大这个参数。              
               syncLimit=5                                        #在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了。              
               dataDir=               /opt/zookeeper/zkdata                                #存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。              
               dataLogDir=               /opt/zookeeper/zkdatalog                      #事务日志输出目录。尽量给事务日志的输出配置单独的磁盘或是挂载点,这将极大的提升ZK性能。              
               clientPort=2181                                            #客户端连接server的端口,默认2181。              
                              
               server.1=zoo1:2888:3888                            #server.id中的id必须与myid文件中的id是一致的,id的范围是1~255。右边可以配置两个端口,第一个端口用于F和L之间的数据同步和其它通信,第二个端口用于Leader选举过程中投票通信。              
               server.2=zoo2:2888:3888              
               server.3=zoo3:2888:3888

创建myid文件:每个server上执行echo "id" > /opt/zookeeper/zkdata/myid

ZK的日志配置由log4j.properties管理

zk的配置文件在每台服务器上都是一样的,只需要配置一份由git统一管理。

  1. 启动并检查服务状态:
    进入主程序目录执行启动命令: ./zkServer.sh start
    状态检查: ./zkServer.sh status
  2. zk日志清理策略:
    zookeeper不会主动的清除旧的快照和日志文件(从3.4.0开始,zookeeper提供了自动清理snapshot和事务日志的功能,在zoo.cfg中配置 autopurge.snapRetainCount 和 autopurge.purgeInterval 这两个参数能够实现定时清理)。