Zookeeper伪分布式部署与角色介绍

一、zookeeper伪分布式部署

和大多数分布式系统一样 zookeeper集群的最小集合同样为三个服务节点,当集群内半数节点无法提供服务时整个集群才无法提供服务。一般建议分布式集群服务节点数为奇数。

集群配置流程

1、创建各节点数据存储目录,我此处在zookeeper默认配置文件的临时目录1中分别为三个节点创建zoo1、zoo2、zoo3目录

mkdir /tmp/zookeeper/zoo1
mkdir /tmp/zookeeper/zoo2
mkdir /tmp/zookeeper/zoo3

2、创建myid文件、在zookeeper集群模式节点服务启动时,zk会在数据目录下找到myid文件中记录的节点ID来与配置文件中server中配置进行匹配

echo  > /tmp/zookeeper/zoo1/myid 1
echo  > /tmp/zookeeper/zoo2/myid 2
echo  > /tmp/zookeeper/zoo3/myid 3

3、伪集群部署配置文件配置

配置语法: server.<节点ID>=<IP地址>:<数据同步端口>:<选举端口>

配置项描述
节点ID服务id手动指定1至125之间的数字,并写到对应服务节点的 {dataDir}/myid 文件中
IP地址节点的远程IP地址
数据同步端口主从节点选举端口
选举端口主从节点选举端口

zookeeper conf目录结构 L1:
可以看到我在zk 的conf目录下分别创建了zoo1、zoo2、zoo3目录并在目录中创建zoo.cfg

conf
├── configuration.xsl
├── log4j.properties
├── zoo.cfg
├── zoo1
│   └── zoo.cfg
├── zoo2
│   └── zoo.cfg
├── zoo3
│   └── zoo.cfg
└── zoo_sample.cfg

配置示例:

#zoo1/zoo.cfg
tickTime=2000
#数据存储目录
dataDir=/tmp/zookeeper/zoo1
clientPort=2181
initLimit=5
syncLimit=2
#以下为集群配置,必须配置在所有节点的zoo.cfg文件中
server.1=127.0.0.1:2281:3281
server.2=127.0.0.1:2381:3381
server.3=127.0.0.1:2481:3481

#zoo2/zoo.cfg
tickTime=2000
#数据存储目录
dataDir=/tmp/zookeeper/zoo2
clientPort=2182
initLimit=5
syncLimit=2
#以下为集群配置,必须配置在所有节点的zoo.cfg文件中
server.1=127.0.0.1:2281:3281
server.2=127.0.0.1:2381:3381
server.3=127.0.0.1:2481:3481

#zoo3/zoo.cfg
tickTime=2000
#数据存储目录
dataDir=/tmp/zookeeper/zoo3
clientPort=2183
initLimit=5
syncLimit=2
#以下为集群配置,必须配置在所有节点的zoo.cfg文件中
server.1=127.0.0.1:2281:3281
server.2=127.0.0.1:2381:3381
server.3=127.0.0.1:2481:3481

4、启动zookeeper

# 此命令在zk根目录下执行
./bin/zkServer.sh --config conf/zoo1 start
./bin/zkServer.sh --config conf/zoo2 start
./bin/zkServer.sh --config conf/zoo1 start
#成功启动控制台输出如下信息
ZooKeeper JMX enabled by default
Using config: conf/zoo1/zoo.cfg
Starting zookeeper ... STARTED

5、查看zookeeper 各节点状态

#查询状态命令
./bin/zkServer.sh --config conf/zoo1 status
./bin/zkServer.sh --config conf/zoo2 status
./bin/zkServer.sh --config conf/zoo3 status

根据zk 的选举机制如果此时是整个集群的初次启动那么当选Leader的节点一定是zoo2,选举机制我们稍后讨论

% ./bin/zkServer.sh --config conf/zoo3 status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: conf/zoo3/zoo.cfg
Client port found: 2183. Client address: localhost.
Mode: follower
% ./bin/zkServer.sh --config conf/zoo2 status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: conf/zoo2/zoo.cfg
Client port found: 2182. Client address: localhost.
Mode: leader
% ./bin/zkServer.sh --config conf/zoo1 status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: conf/zoo1/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

此时我们成功完成并启动了zookeeper的伪分布式集群,这时我们回头再查看一下conf目录结构,细心的你一定会发现zoo.cfg.dynamic.next。根据文件名不难猜想此文件与动态配置有关。如果对zookeeper动态配置感兴趣的朋友可以 以此作为入口进行研究

conf
├── configuration.xsl
├── log4j.properties
├── zoo.cfg
├── zoo1
│   ├── zoo.cfg
│   └── zoo.cfg.dynamic.next
├── zoo2
│   ├── zoo.cfg
│   └── zoo.cfg.dynamic.next
├── zoo3
│   ├── zoo.cfg
│   └── zoo.cfg.dynamic.next
└── zoo_sample.cfg

二、 zookeeper角色介绍

zookeeper集群角色

zookeeper 集群中总共有三种角色,分别是leader(领导者)follower(追随者) observer(观察者)

角色描述
leader领导者。用于写入数据,通过选举产生,如果宕机将会选举新的主节点。
follower追随者。用于实现数据的读取。同时他也是主节点的备选节点,并用拥有投票权。
observer观察者。用于读取数据,与fllower区别在于没有投票权,不能选为主节点。并且在计算集群可用状态时不会将observer计算入内。
Leader的作用

一个zookeeper集群中只有一个leader节点,leader节点通过选举机制产生。leader负责进行投票的发起和决议、更新系统状态。

Follower的作用

follower 用于接收客户的请求并向客户端返回结果,在选举的过程中参与投票

Observer的作用
  • 在不伤害写性能的条件下扩展ZooKeeper集群
  • 不会影响到ZooKeeper服务的可用性
Observer的使用配置

Observer的设置是非常简单的,仅仅需要修改配置文件中的两个配置。

  1. 将下面的行写入到配置文件,这行配置告诉ZooKeeper这个结点是一个Observer
peerType=observer
  1. 在每个服务配置文件增加:observer配置,这个配置告诉其他的服务器结点: server.4是一个Observer。因此,其他服务器不会期待server.4投票。现在,你能够像常规的Follower一样连接Observer。
server.4=127.0.0.1:2581:3681:observer

  1. 生产环境或dev环境不建议使用此默认地址,相信大家根据自己或公司的开发习惯有合理的目录地址 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值