zookeeper单机与集群的部署

zookeeper采用java语言开发,所以zookeeper的运行需要安装JDK。

安装环境:

# cat /proc/version
Linux version 3.10.0-123.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Mon Jun 30 12:09:22 UTC 2014

# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core) 

JDK版本:

# java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)

单机部署

  1. 下载zookeeper,下载地址:https://zookeeper.apache.org/releases.html,这里下载的版本为apache-zookeeper-3.6.2-bin.tar.gz

  2. 上传至linux服务器/usr/local目录下。

  3. 解压.

# cd /usr/local
# tar xf apache-zookeeper-3.6.2-bin.tar.gz
  1. 建立软链接。
# ln -s apache-zookeeper-3.6.2-bin zookeeper
  1. 修改配置文件。
# cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
  1. 启动zookeeper。
# sh /usr/local/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
  1. 查看zookeeper启动状态。
# sh /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone
  1. 关闭zookeeper。
# sh /usr/local/zookeeper/bin/zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

集群部署

准备搭建三个节点的zookeeper集群,三台服务器的ip分别为:

  • 10.0.4.105
  • 10.0.4.120
  • 10.0.4.129

在三个节点进行如下步骤的操作:

  1. 下载zookeeper,下载地址:https://zookeeper.apache.org/releases.html,这里下载的版本为apache-zookeeper-3.6.2-bin.tar.gz

  2. 上传至linux服务器/usr/local目录下。

  3. 解压.

# cd /usr/local
# tar xf apache-zookeeper-3.6.2-bin.tar.gz
  1. 建立软链接。
# ln -s apache-zookeeper-3.6.2-bin zookeeper
  1. 修改配置文件。
# cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg

zoo.cfg中只修改dataDir的路径及添加集群节点,具体修改内容如下:

...
dataDir=/usr/local/zookeeper/data
...
server.0=10.0.4.105:2888:3888
server.1=10.0.4.120:2888:3888
server.2=10.0.4.129:2888:3888

配置文件样例如下:

# The number of milliseconds of each tick
# 服务器之间或客户端与服务器之间维持心跳的时间间隔,单位为ms
tickTime=2000

# The number of ticks that the initial 
# synchronization phase can take
# Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。
# Leader允许Follower在initLimit*tickTime时间内完成这个工作。
# 通常情况下,我们不用太在意这个参数的设置。
# 如果Zookeeper集群的数据量确实很大了,Follower在启动的时候,从Leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数了。
initLimit=10

# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
# 在运行过程中,Leader负责与ZooKeeper集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。
# 如果Leader发出心跳包在syncLimit*tickTime之后,还没有从Follower那里收到响应,那么就认为这个Follower已经不在线了。
# 注意:不要把这个参数设置得过大,否则可能会掩盖一些问题。
syncLimit=5

# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
# 存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能。
# 这个目录默认是在临时目录下/tmp/zookeeper,会被linux随时清空,所以生产环境一定要修改。
dataDir=/usr/local/zookeeper/data

# the port at which the clients will connect
# 客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口,接受客户端的访问请求,默认为2181
clientPort=2181


# the maximum number of client connections.
# increase this if you need to handle more clients
# 单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制。
# 请注意这个限制的使用范围,仅仅是单台客户端机器与单台ZooKeeper服务器之间的连接数限制,不是针对指定客户端IP,也不是ZooKeeper集群的连接数限制,也不是单台ZooKeeper对所有客户端的连接数限制。
#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.purgeInterval搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。
#autopurge.snapRetainCount=3

# Purge task interval in hours
# Set to "0" to disable auto purge feature
# ZooKeeper提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能。
#autopurge.purgeInterval=1

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

# - server.A = B:C:D:
#    - A:是第几号服务器。
#    - B:服务器的ip地址,也可以用域名。
#    - C:服务器与集群中的Leader服务器交换信息的端口。
#    - D:用来选举的端口。
server.0=10.0.4.105:2888:3888
server.1=10.0.4.120:2888:3888
server.2=10.0.4.129:2888:3888
  1. 在/usr/local/zookeeper目录下创建data目录,并创建myid文件:
# 在10.0.4.105下执行
# mkdir /usr/local/zookeeper/data
# echo 0 > /usr/local/zookeeper/data/myid

# 在10.0.4.120下执行
# mkdir /usr/local/zookeeper/data
# echo 1 > /usr/local/zookeeper/data/myid

# 在10.0.4.129下执行
# mkdir /usr/local/zookeeper/data
# echo 2 > /usr/local/zookeeper/data/myid
  1. 启动zookeeper。
# sh /usr/local/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
  1. 查看zookeeper启动状态。
# sh /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

根据日志会发现10.0.4.120的Mode为leader,其他两台服务器的Mode为follower。

  1. 关闭zookeeper。
# sh /usr/local/zookeeper/bin/zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
Logo

一站式虚拟内容创作平台,激发创意,赋能创作,进入R空间,遇见同道,让优质作品闪耀发光。​

更多推荐