天天看点

Zookeeper原理及部署Zookeeper原理及部署

Zookeeper原理及部署

Zookeeper介绍:

ZooKeeper是一个开源分布式协调服务、分布式数据一致性解决方案。可基于ZooKeeper实现命名服务、集群管理、Master选举、分布式锁等功能。

高可用:

为了保证ZooKeeper的可用性,在生产环境中我们使用ZooKeeper集群模式对外提供服务,并且集群规模至少由3个ZooKeeper节点组成。集群至少由3个节点组成,ZooKeeper其实2个节点也可以组成集群并对外提供服务,但我们使用集群主要目的是为了高可用。如果2个节点组成集群,其中1个节点挂了,另外ZooKeeper节点不能正常对外提供服务。因此也失去了集群的意义。如果3个节点组成集群,其中1个节点挂掉后,根据ZooKeeper的Leader选举机制是可以从另外2个节点选出一个作为Leader的,集群可以继续对外提供服务,而且集群规模最好为奇数。

并非节点越多越好:

1.节点越多,使用的资源越多。

2.节点越多,ZooKeeper节点间花费的通讯成本越高,节点间互连的Socket也越多。影响ZooKeeper集群事务处理。

3.节点越多,造成脑裂的可能性越大。

集群角色:

ZooKeeper没有使用Master/Slave的概念,而是将集群中的节点分为了3类角色:

Leader:

在一个ZooKeeper集群中,只能存在一个Leader,这个Leader是集群中事务请求唯一的调度者和处理者,所谓事务请求是指会改变集群状态的请求;

Leader根据事务ID可以保证事务处理的顺序性。如果一个集群中存在多个Leader,这种现象称为「脑裂」。

Follower:

Follower角色的ZooKeeper服务只能处理非事务请求;如果接收到客户端事务请求会将请求转发给Leader服务器;参与Leader选举;参与Leader事务处理投票处理。

Follower发现集群中Leader不可用时会变更自身状态,并发起Leader选举投票,最终集群中的某个Follower会被选为Leader。

Observer:

Observer与Follower很像,可以处理非事务请求;将事务请求转发给Leader服务器。与Follower不同的是,Observer不会参与Leader选举;不会参与Leader事务处理投票。

Observer用于不影响集群事务处理能力的前提下提升集群的非事务处理能力。

版本:3.6.2

部署:

集群信息: 10.0.0.2-4 cliport:2186

  1. 解压

tar xvf /data/apache-zookeeper.3.6.2-bin.tar.gz -C /data/middleware/zookeeper

cd /data/middleware/zookeeper

mkdir {data,logs}

     2. 配置文件修改

2.1. zoo.cfg

cd /data/middleware/zookeeper/conf

mv zoo_sample.cfg zoo.cfg

#不改名启动会报错

vim zoo.cfg

#配置文件

tickTime=2000

initLimit=10

#对于主节点与从节点进行同步操作时的超时时间,单位为tick值的倍数。

syncLimit=5

#用于配置内存数据库保存的模糊快照的目录,目录需要单独创建。

dataDir=/data/middleware/zookeeper/apache-zookeeper-3.6.2-bin/data

#用于存放日志信息,目录需要单独创建。

dataLogDir=/data/middleware/zookeeper/apache-zookeeper-3.6.2-bin/logs

#客户端所连接的服务器所监听的端口号

clientPort=2186

###定时清理zookeeper日志配置

#清理频率单位是小时需要大于1的整数

autopurge.purgeInterval=24

##日志保留文件数目

autopurge.snapRetainCount=10

###集群信息

server.1=10.0.0.2:3188:3288

server.2=10.0.0.3:3188:3288

server.3=10.0.0.4:3188:3288

#server.1 中,1为myid,每台服务器不同,并写在myid配置文件中

#ip为各节点ip 3188为非选举端口 3288为选举通讯端口

2.2.myid

#myid配置文件需创建

cd /data/middleware/zookeeper/data/

touch myid

echo '1' > myid

#zoo.cfg中ip对应的myid

      3.启动:

sh /data/middleware/zookeeper/bin/zkServer.sh start

查看状态:

sh /data/middleware/zookeeper/bin/zkServer.sh status

登录客户端:

sh /data/middleware/zookeeper/bin/zkCli.sh -server 10.0.0.2:2186

继续阅读