最近接触到一个以dubbo+zookeeper为核心的分布架构,因此个人尝试在linux环境下进行对zookeeper进行安装配置。

 

环境和软件版本:rhel7 64位(VM虚拟),zookeeper-3.4.6.tar.gz

目标:配置三台zookeeper服务伪集群(一台机器上模拟3个服务)

 

准备工作:

1.      保证系统JDK环境正常。我使用的rhel默认有jdk1.7环境,我将其换为更新的jdk1.8版本,详情另述。实验表明在jdk配置异常的情况下,zookeeper服务启动提示正常,但在服务端间与服务端-客户端之间的连接会出现异常。

2.      解压zookeeper,并放置至目标目录

tar -cxvfzookeeper-3.4.6.tar.gz



 

单服务配置:

3.      以目标目录/usr/share/zk为例

进入目标目录,在/conf下新建zoo.cfg

vim conf/zoo.cfg



 

内容如下:

tickTime=2000
dataDir=/usr/share/zk/data
dataLogDir=/usr/share/zk/logs
clientPort=4180



 

tickTime服务心跳时间,毫米单位;dateDir数据文件目录;dateLogDir可选,日志目录;clientPort客户端连接端口

4.      创建data目录,依据dataDir配置

5.      启动服务端

bash bin/zkServer.sh start



6.      启动客户端

bashbin/zkCli.sh –server localhost:4180

端口对应服务端口,否则连接失败

 

多服务(伪)集群配置:

7.      由于要在一台机上模拟多服务,因此把zookeeper复制几份。暂约定3份,目录为/usr/share/zk/zk0, /usr/share/zk/zk1 , /usr/share/zk/zk2

8.      修改配置文件zoo.cfg

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/usr/share/zk/zk0/data
dataLogDir=/usr/share/zk/zk0/logs
clientPort=4180
server.0=127.0.0.1:8880:7770
server.1=127.0.0.1:8881:7771
server.2=127.0.0.1:8882:7772

initLimit初始化连接同步单位时间;syncLimit是leader与follower之间最长通讯单位时间,超出该时间则失去连接;server.X为服务列表,格式为server.[服务编号]=[服务IP]:[集群通讯端口]:[leader选举端口]

由于是伪集群,因此ip一致,数据目录、日志目录、客户端口、服务列表中的通讯端口和选举端口都要对应不同。真实的设备集群没有这方面限制。

9.      在dataDir对应数据目录新建myid文件

vim data/myid

内容对应服务列表中的服务编号,声明对应的服务,如server.0服务的myid内容为0

10.  三个服务分别启动

11.  尝试从一个服务作客户端连接其他服务,如在zk0中

bash bin/zkCli.sh–server localhost:4181

其中4181为zk1客户端口

 

一些补充:

12.  可以通过以下命令查询zookeeper服务状态:

bashbin/zkServer.sh status



可以通过以下命令停止zookeeper服务:

bashbin/zkServer.sh stop



13.  当zookeeper作了集群配置后,必须有多个服务列表中的服务连接才行正常提供服务,否则违反leader-follower的服务形式。因此在只启动集群服务中的单台服务,无法正常连接。

 

 

2015-07-26