Zookeeper配置
复制C:\app\zookeeper-3.4.9\conf\zoo_sample.cfg为zoo.cfg。配置如下:
# The number of milliseconds of each tick
# 这个时间是作为Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
# 顾名思义就是 Zookeeper保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
dataDir=c:/data/zookeeper
# dataLogDir:顾名思义就是Zookeeper 保存日志文件的目录
# the port at which the clients will connect
# 这个端口就是客户端连接Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
在启动前还需要设置JAVA_HOME环境变量。设置完成后,运行bin目录下的zkServer.cmd启动Zookeeper服务。
启动后要检查 Zookeeper 是否已经在服务,可以通过 netstat –ano 命令查看是否有你配置的 clientPort 端口号在监听服务。
启动成功后,可以看到command窗口中显示了监听的端口数。
2017-03-11 10:30:33,937 [myid:] - INFO [main:NIOServerCnxnFactory@89] - binding
to port 0.0.0.0/0.0.0.0:2181
使用zookeeper作为dubbo的注册中心,部署起来并不麻烦。为了保持注册中心的高可用性,在生产环境下我们需要配置多个zookeeper协同运行。在集群模式下,zookeeper会基于Paxos算法从集群中选择一台作为leader,其他机器作为follower,注册中心的数据都以leader为准。一台zk机器成为leader的条件是超过这台机器是可用的,且被超过半数的机器选举为leader。基于这种实现方式,我们选择zk集群的数量时最好为奇数个,最少为3个,这样只要有超过半数的zk机器存活那注册中心就是可用的。
进行zookeeper集群配置的话,额外再zoo.cfg增加如下配置:
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
server.A=B:C:D
A为数字,标识这条配置为第几个zk服务器,即机器id
B为host名,标识这个服务器的主机地址
C和D为zk集群的成员用于选举leader时的通讯端口
zookeeper可以作为dubbo服务的注册中心,两者结合起来可以实现微服务中的 服务注册、发现、负载均衡和健康检查,容错,动态配置管理的功能。
由于涉及dubbo配置和module划分较为复杂,在下章单独讲解。