1.概念
ZooKeeper 一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心:服务生产者将自己提供的服务注册到 ZooKeeper 中心,服务的消费者在进行服务调用的时候先到 ZooKeeper 中查找服务,获取到服务生产者的详细信息之后,再去调用服务生产者的内容与数据。Zk的数据保存在内存中,限制了znode节点的数据存储量。
通常 3 台服务器就可以构成一个 ZooKeeper 集群了,为什么最好使用奇数台服务器构成 ZooKeeper 集群?我们知道在 ZooKeeper 中 Leader 选举算法采用了 Zab 协议:当多数(过半原则) Server 写成功,则任务数据写成功。
角色 | 描述 |
---|---|
Leader | Leader服务器是zk集群工作机制的核心,事务请求的唯一调度者和处理者,保证集群事务请求处理的顺序性 |
Follower | Follower服务器是zk集群状态的跟随者,处理非事务请求,转发事务请求给Leader服务器,参与事务请求的proposal投票,参与Leader选举投票 |
Observer | Observer是一种新型的zk节点,Observer服务器只提供非事务服务.通常用于不影响集群事务处理能力的前提下提升集群的非事务的处理能力,Observer有另外一个优势,因为它不参与投票,所以他们不属于zk集群的关键部位,即使他们Failed,或者从集群中断开,也不会影响集群的可用性 |
sid:服务器id(myid)
zxid:事务操作序列号
epoch:选举次数
集群初始化时,任何节点都没有事务操作,zxid和epoch任何节点都是一样的,不同的只是sid。此时进行投票sid最大的并且过半时作为leader。1,2,3:2;1,2,3,4,5:3
集群运行时,此时每个节点已经有了事务操作,zxid已经有值,那么就不能考虑sid,zxid更大的数据更完整,所以应当优先考虑为leader;此时zxid一样再以sid较大的作为leader。
2.安装
选择版本:apache-zookeeper-3.6.2-bin.tar.gz
2.1准备
需要开启相应端口:
名称 | host |
---|---|
zookeeper服务 | 2181 |
数据同步 | 2888 |
节点选举 | 3888 |
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
systemctl restart firewalld.service
通过命令:firewall-cmd --list-ports
查看是否成功
zookeeper需要依赖jdk1.8才能运行,不会的可移步:Centos7 安装 Java8
2.2下载
cd /usr/local/src
wget -c https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz
mv apache-zookeeper-3.6.2-bin /usr/local/zookeeper-3.6.2
2.3配置
需要将zookeeper下的/conf目录中zoo_sample.cfg重命名为zookeeper默认的配置文件:zoo.cfg
mv zoo_sample.cfg zoo.cfg
修改需要的配置
dataDir=/usr/local/zookeeper-3.6.2/data
dataLogDir=/usr/local/zookeeper-3.6.2/logs
#server.服务序列号=ip.follower与leader服务器交换信息的端口(数据同步用):follower与leader服务器选举端口
server.1=192.168.37.101:2888:3888
server.2=192.168.37.102:2888:3888
server.3=192.168.37.103:2888:3888
根据上方zoo.cfg中的dataDir,创建/data目录和myid文件,内容分别是配置中server的服务序列号(1、2、3)
mkdir /usr/local/zookeeper-3.6.2/data
vim /usr/local/zookeeper-3.6.2/data/myid
3.启动
使用./bin/zkServer.sh start
进行启动,使用./bin/zkServer.sh status
查看服务状态
使用官方提供的控制台去进行节点的查看:ZooInspector
链接指定的zookeeper./bin/zkCli.sh -server 192.168.37.101
,通过命令create /test "123"
创建一条数据,通过命令ls /
进行节点的查看
刷新zookeeper控制台同样可见: