Zookeeper集群部署
Zookeeper 来源于雅虎的一个研究小组,开发其用以提供分布式协调服务。分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
关于Zookeeper集群部署的一点建议:1、最好将Zookeeper部署在多于一台的集群上,即采用集群部署而不是单台服务器的standalone;2、最好部署在奇数(2N+1)台服务器上,因为Zookeeper通过多数大于少数来保证可用性,当N个节点不能访问时,整个Zookeeper集群仍然是可用的。
下面以3台服务器为例,来部署Zookeeper集群,假设它们的IP地址分别是1.1.1.0, 1.1.1.1, 1.1.1.2. 各步骤以1.1.1.0为默认机器演示。
下载Zookeeper
从官网下载Zookeeper ,这里下载3.4.14版本
1 | wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz |
安装Zookeeper
直接解压缩
1 | tar -xzf zookeeper-3.4.14.tar.gz |
也可以选择解压缩到指定的目录,比如Documents
1 | tar -xzf zookeeper-3.4.14.tar.gz -C ~/Documents/. |
配置Zookeeper
配置zookeeper很关键,首先进入zookeeper配置文件夹
1 | cd zookeeper-3.4.14/conf/ |
然后,利用模板创建配置文件
1 | cp zoo_sample.cfg zoo.cfg |
最好,修改配置参数,在此之前,我们需要创建文件夹用于存储数据和日志
1 | cd zookeeper-3.4.14 |
1 | vim zoo.cfg |
1 | dataDir=/home/jinzhongxu/zookeeper-3.4.14/data |
将zookeeper文件夹拷贝到其他机器1.1.1.1和1.1.1.2上
1 | scp -r zookeeper-3.4.14 1.1.1.1:/home/jinzhongxu/. |
并分别进入机器1.1.1.1中
1 | echo 2 > zookeeper-3.4.14/data/myid |
并修改配置
1 | vim /conf/zoo.cfg |
1 | server.1=1.1.1.0:2888:3888 |
机器1.1.1.2中
1 | echo 3 > zookeeper-3.4.14/data/myid |
并修改配置
1 | vim /conf/zoo.cfg |
1 | server.1=1.1.1.0:2888:3888 |
在上面的配置中,也可以将IP地址换成 /etc/hosts 映射的 hostname上,但是,当/etc/hosts中出现
1 | 127.0.1.1 box0 |
此时,在 boxi 上必须使用
1 | server.i=0.0.0.0:2888:3888 |
或者,注销掉 127.0.1.1,建议使用上面方法,不改变 /etc/hosts 里的 127.0.1.1 box0
1 | 127.0.1.1 box0 |
启动zookeeper
分别在每个机器上运行如下命令,注意,分别启动完每个机器上的zkServer.sh后,再查看状态,因为zookeeper是选举机制,只启动1个就查看状态,一般是不成功的。
1 | cd zookeeper-3.4.14 |
启动所有机器上的Zookeeper,查看zookeeper启动情况,运行如下命令
1 | /bin/zkServer.sh status |
运行成功结果显示这样:
1 | ZooKeeper JMX enabled by default |
关闭Zookeeper,运行如下命令
1 | /bin/zkServer.sh stop |
Zookeeper相关知识
补充
从版本3.4.0开始,Zookeeper提供了自动清理快照和事务日志的功能,该配置在zoo.cfg里:
- autopurge.purgeInterval=1
- autopurge.snapRetainCount=3
autopurge.purgeInterval:这个参数指定了持久化日志清理频率,单位是小时,默认是0,即不开启自动清理功能。
autopurge.snapRetainCount:这个参数和上面的参数搭配,用于指定需要保留的持久化日志文件数目,默认是3个。