最近接触到一个以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