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
- 解压
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