zookeeper能做数据的发布/订阅(配置中心:disconf), 负载均衡(dubbo利用了zookeeper实现负载均衡), 命名服务, master选举(kafka hadoop hbase), 分布式队列, 分布式锁。
一: 单机版搭建
1. 准备工作,必须安装好JDK。
2. 建立文件夹,mkdir /usr/local/wulei
3. 下载好安装包, 上传到linux服务器里面。
4. 解压安装包 tar -zxvf zookeeper-3.4.6.tar.gz
5. 进入zk目录,查看目录结构。cd /usr/local/wulei/zookeeper-3.4.6
6. 创建两个文件夹,用来存zk数据和日志。mkdir mydata mkdir mydata-log
7. zk启动会默认找zoo.cfg文件,所以 cd conf 修改文件名 mv zoo_sample.cfg zoo.cfg
8. 修改文件参数
# 客户端与服务器或者服务器与服务器之间心跳检测时间 tickTime=2000 # 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最大时长 # 我们这里是10 * 2 initLimit=10 # 集群中的follower服务器(F)与leader服务器(L)之间通信最大有效时长为5 * 2 syncLimit=5 # zk存放myid信息跟一些版本,日志,跟服务器唯一的ID信息等 dataDir=/usr/local/wulei/zookeeper-3.4.6/mydata # zk保存日志的目录 dataLogDir=/usr/local/wulei/zookeeper-3.4.6/mydata-log # 客户端默认连接端口 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
9. cd ../bin 执行 ./zkServer.sh start 启动zk服务器。
- 1. 启动ZK服务: ./zkServer.sh start
- 2. 查看ZK服务状态: ./zkServer.sh status
- 3. 停止ZK服务: ./zkServer.sh stop
- 4. 重启ZK服务: ./zkServer.sh restart
二: 集群搭建
真实的集群是需要部署在不同的服务器上的,但是在我们测试时同时启动十几个虚拟机内存会吃不消,所以我这里是搭建伪集群,也就是把所有的服务都搭建在一台虚拟机上。即:伪集群靠端口区分,ip是同一个;而集群是靠ip区分,端口是同一个(端口不相同也可以,看个人配置)。
zookeeper集群有三个角色: leader follower observer; leader和follower的总个数必须为基数。
* leader: 一个集群有且只有leader节点,客户端的写操作会落到该节点上。
* follower:客户端的读操作,leader会根据算法落实到某个follower节点上。
* observer:只提供服务,不参与投票。提高了zookeeper的扩展性(如果大量客户端访问我们zookeeper集群,需要增加zookeeper集群机器数量。从而增加zookeeper集群的性能。 导致zookeeper写性能下降,zookeeper的数据变更需要半数以上服务器投票通过。造成网络消耗增加投票成本)
1. 建立文件夹,mkdir /usr/local/wulei/zookeeper,将刚才的Zookeeper复制到以下三个目录(复制文件: cp 文件 目标路径 复制文件夹:cp -r 文件夹 目标路径)
cp -r zookeeper-3.4.6 /usr/local/wulei/zookeeper/zookeeper1
cp -r zookeeper-3.4.6 /usr/local/wulei/zookeeper/zookeeper2
cp -r zookeeper-3.4.6 /usr/local/wulei/zookeeper/zookeeper3
2. 给每个服务器设置id: id的取值范围: 1~255; 用id来标识该机器在集群中的机器序号。在刚刚 dataDir指定的文件夹下创建myid文件 touch myid,内容就是id(例如1 、 2、 3)。我们可以用echo命令快速创建。
echo 1 > /usr/local/wulei/zookeeper/zookeeper1/mydata/myid
echo 2 > /usr/local/wulei/zookeeper/zookeeper2/mydata/myid
echo 3 > /usr/local/wulei/zookeeper/zookeeper3/mydata/myid
3. 到这一步,我们就应该进入改conf/zoo.cfg的数据目录文件和端口了。(真正的集群它们ip不一样,可以不改端口)。vim /usr/local/wulei/zookeeper/zookeeper1/conf/zoo.cfg
# 三个zk的配置都要改,目录换成各自路径, 端口改成2181 2182 2183 # zk数据目录 dataDir=/usr/local/wulei/zookeeper/zookeeper1/mydata # zk日志目录 dataLogDir=/usr/local/wulei/zookeeper/zookeeper1/mydata-log # 客户端默认连接端口 clientPort=2181 # 在文件末尾追加这段配置,三个文件这里的配置不用变。 # 格式: server.myid=ip:服务器端口(端口随便写,不与当前机器的端口冲突就行):投票选举端口(端口随便写,不与当前机器的端口冲突就行)
server.1=192.168.25.100:2881:3881
server.2=192.168.25.100:2882:3882
server.3=192.168.25.100:2883:3883
# zk默认只有leader和follower角色,我们可以指定observer节点
# 首先在该服务器的zoo.cfg文件里面设置 peerType=observer
# server.1=192.168.25.100:2881:3881
# server.2=192.168.25.100:2882:3882
# server.3=192.168.25.100:2883:3883
# server.3=192.168.25.100:2884:3884:observer
经过上面几步集群就搭建完成了,这里我们来测试一下 ~
【1】: 启动server1 [root@server1 ~]# cd /usr/local/wulei/zookeeper/zookeeper1/bin [root@server1 bin]# ./zkServer.sh start JMX enabled by default Using config: /usr/local/wulei/zookeeper/zookeeper1/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [root@server1 bin]# 【2】:由于集群要过半数才能工作,所以此时它的状态还是不可用 [root@server1 bin]# ./zkServer.sh status JMX enabled by default Using config: /usr/local/wulei/zookeeper/zookeeper1/bin/../conf/zoo.cfg Error contacting service. It is probably not running. 【3】:启动server2 [root@server1 bin]# cd /usr/local/wulei/zookeeper/zookeeper2/bin [root@server1 bin]# ./zkServer.sh start JMX enabled by default Using config: /usr/local/wulei/zookeeper/zookeeper2/bin/../conf/zoo.cfg Starting zookeeper ... STARTED 【4】:过半数了可以工作了,我们可以看到它是leader [root@server1 bin]# ./zkServer.sh status JMX enabled by default Using config: /usr/local/wulei/zookeeper/zookeeper2/bin/../conf/zoo.cfg Mode: leader 【5】:重看server1状态,现在成了follower [root@server1 bin]# cd /usr/local/wulei/zookeeper/zookeeper1/bin [root@server1 bin]# ./zkServer.sh status JMX enabled by default Using config: /usr/local/wulei/zookeeper/zookeeper1/bin/../conf/zoo.cfg Mode: follower 【6】:经过上面几步,集群已经能工作了。此时启动server3, 它也是一个follower [root@server1 bin]# cd /usr/local/wulei/zookeeper/zookeeper3/bin [root@server1 bin]# ./zkServer.sh start JMX enabled by default Using config: /usr/local/wulei/zookeeper/zookeeper3/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [root@server1 bin]# ./zkServer.sh status JMX enabled by default Using config: /usr/local/wulei/zookeeper/zookeeper3/bin/../conf/zoo.cfg Mode: follower [root@server1 bin]#