赞
踩
ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。分布式应用可以基于它实现更高级的服务,实现诸如同步服务、配置维护和集群管理或者命名的服务。
Zookeeper服务自身组成一个集群,2n+1个(奇数)服务允许n个失效,集群内一半以上机器可用,Zookeeper就可用。
假设 3台机器组成的集群,可以有允许一台失效,如果有2台失效,这个集群就不可用,1<1.5,一般的搭建zookeeper集群时,以奇数台机器来搭建。目的:是为了提高容错能允许多损失一台。
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。
也就是说 Zookeeper =文件系统+通知机制。
ZooKeeper数据模型的结构与Linux文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。
提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。
1、当ZooKeeper 集群中的一台服务器出现以下两种情况之一时,就会开始进入Leader选举
2、而当一台机器进入Leader选举流程时,当前集群也可能会处于以下两种状态:
1.集群中本来就已经存在一个Leader。
对于已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和 Leader机器建立连接,并进行状态同步即可。
2.集群中确实不存在Leader。
假设ZooKeeper由5台服务器组成,SID分别为1、2、3、4、5,ZXID分别为8、8、8、7、7,并且此时SID为3的服务器是Leader。某一时刻,3和5服务器出现故障,因此开始进行Leader选举。
选举Leader规则:
- SID:服务器ID。用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,和myid一致。
- ZXID:事务ID。ZXID是一个事务ID,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的ZXID值不一定完全一致,这和ZooKeeper服务器对于客户端“更新请求”的处理逻辑速度有关。
- Epoch:每个Leader任期的代号。没有Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加
官方下载地址:https://archive.apache.org/dist/zookeeper/
IP地址 | 安装组件 | 服务器类型 |
---|---|---|
192.168.10.100 | zookeeper | zookeeper服务器1 |
192.168.10.101 | zookeeper | zookeeper服务器2 |
192.168.10.102 | zookeeper | zookeeper服务器3 |
- systemctl stop firewalld
- setenforce 0
- ##修改主机名
- [root@localhost ~]#hostnamectl set-hostname zk-kfk01
- [root@localhost ~]#bash
-
- [root@localhost ~]#hostnamectl set-hostname zk-kfk02
- [root@localhost ~]#bash
-
- [root@localhost ~]#hostnamectl set-hostname zk-kfk03
- [root@localhost ~]#bash
- ##修改域名
- echo "192.168.10.100 zk-kfk01" >> /etc/hosts
- echo "192.168.10.101 zk-kfk02" >> /etc/hosts
- echo "192.168.10.102 zk-kfk03" >> /etc/hosts
- cat /etc/hosts
- ##三台虚拟机同时安装jdk
- yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
- java -version
- [root@zk-kfk01 ~]#cd /opt/
- ls
- apache-zookeeper-3.5.7-bin.tar.gz rh
- scp apache-zookeeper-3.5.7-bin.tar.gz zk-kfk02:/opt/
- scp apache-zookeeper-3.5.7-bin.tar.gz zk-kfk03:/opt/
- ##三台同时操作
- [root@zk-kfk01 opt]#ls
- apache-zookeeper-3.5.7-bin.tar.gz rh
- [root@zk-kfk01 opt]#tar xf apache-zookeeper-3.5.7-bin.tar.gz
- [root@zk-kfk01 opt]#mv apache-zookeeper-3.5.7-bin /usr/local/zookeeper-3.5.7
- [root@zk-kfk01 opt]#cd /usr/local/zookeeper-3.5.7/
- [root@zk-kfk01 zookeeper-3.5.7]#ls
- bin conf docs lib LICENSE.txt NOTICE.txt README.md README_packaging.txt
- [root@zk-kfk01 zookeeper-3.5.7]#cd conf/
- [root@zk-kfk01 conf]#ls
- configuration.xsl log4j.properties zoo_sample.cfg
- [root@zk-kfk01 conf]#cp zoo_sample.cfg zoo.cfg
- [root@zk-kfk01 conf]#ls
- configuration.xsl log4j.properties zoo.cfg zoo_sample.cfg
-
- [root@zk-kfk01 conf]#vim zoo.cfg
-
- tickTime=2000
- initLimit=10
- syncLimit=5
- dataDir=/usr/local/zookeeper-3.5.7/data
- dataLogDir=/usr/local/zookeeper-3.5.7/logs
- clientPort=2181
- server.1=192.168.10.100:3188:3288
- server.2=192.168.10.101:3188:3288
- server.3=192.168.10.102:3188:3288

- mkdir /usr/local/zookeeper-3.5.7/data
- mkdir /usr/local/zookeeper-3.5.7/logs
- [root@zk-kfk01 conf]#echo 1 > /usr/local/zookeeper-3.5.7/data/myid
- [root@zk-kfk02 conf]#echo 2 > /usr/local/zookeeper-3.5.7/data/myid
- [root@zk-kfk03 conf]#echo 3 > /usr/local/zookeeper-3.5.7/data/myid
- [root@zk-kfk01 conf]#vim /etc/init.d/zookeeper
-
- #!/bin/bash
- #chkconfig:2345 20 90
- #description:Zookeeper Service Control Script
- ZK_HOME='/usr/local/zookeeper-3.5.7'
- case $1 in
- start)
- echo "---------- zookeeper 启动 ------------"
- $ZK_HOME/bin/zkServer.sh start
- ;;
- stop)
- echo "---------- zookeeper 停止 ------------"
- $ZK_HOME/bin/zkServer.sh stop
- ;;
- restart)
- echo "---------- zookeeper 重启 ------------"
- $ZK_HOME/bin/zkServer.sh restart
- ;;
- status)
- echo "---------- zookeeper 状态 ------------"
- $ZK_HOME/bin/zkServer.sh status
- ;;
- *)
- echo "Usage: $0 {start|stop|restart|status}"
- esac
-
- [root@node1 opt]#chmod +x /etc/init.d/zookeeper
- [root@node1 opt]#chkconfig --add zookeeper
- [root@node1 opt]#service zookeeper start #切记三台机子都配置完脚本再启动

给脚本添加权限
启动zookeeper服务脚本
- [root@zk-kfk01 conf]#service zookeeper start
- ---------- zookeeper 启动 ------------
- /bin/java
- ZooKeeper JMX enabled by default
- Using config: /usr/local/zookeeper-3.5.7/bin/../conf/zoo.cfg
- Starting zookeeper ... STARTED
- [root@zk-kfk01 conf]#service zookeeper status
- ---------- zookeeper 状态 ------------
- /bin/java
- ZooKeeper JMX enabled by default
- Using config: /usr/local/zookeeper-3.5.7/bin/../conf/zoo.cfg
- Client port found: 2181. Client address: localhost.
- Mode: follower
-
-
- [root@zk-kfk02 conf]#service zookeeper start
- ---------- zookeeper 启动 ------------
- /bin/java
- ZooKeeper JMX enabled by default
- Using config: /usr/local/zookeeper-3.5.7/bin/../conf/zoo.cfg
- Starting zookeeper ... STARTED
- [root@zk-kfk02 conf]#service zookeeper status
- ---------- zookeeper 状态 ------------
- /bin/java
- ZooKeeper JMX enabled by default
- Using config: /usr/local/zookeeper-3.5.7/bin/../conf/zoo.cfg
- Client port found: 2181. Client address: localhost.
- Mode: follower
-
-
- [root@zk-kfk03 conf]#service zookeeper start
- ---------- zookeeper 启动 ------------
- /bin/java
- ZooKeeper JMX enabled by default
- Using config: /usr/local/zookeeper-3.5.7/bin/../conf/zoo.cfg
- Starting zookeeper ... STARTED
- [root@zk-kfk03 conf]#service zookeeper status
- ---------- zookeeper 状态 ------------
- /bin/java
- ZooKeeper JMX enabled by default
- Using config: /usr/local/zookeeper-3.5.7/bin/../conf/zoo.cfg
- Client port found: 2181. Client address: localhost.
- Mode: leader

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。