分布式架构zookeeper-集群

从下面三个方面解释:

1.集群部署

2.选举机制

3.数据提交机制

特点:主存自动切换

一般是3台服务器,3个节点,半数运行机制,生产环境上应该部署到不同的物理机上,如果是测试环境可以部署到同一个物理机上,只要port不同就可以,

首先解决集群启动时遇到的一个问题:

  详见这个博客: https://www.jianshu.com/p/505f53f0a320

2.部署:

  

  • 节点ID:服务id手动指定1至125之间的数字,并写到对应服务节点的 {dataDir}/myid 文件中。
  • IP地址:节点的远程IP地址,可以相同。但生产环境就不能这么做了,因为在同一台机器就无法达到容错的目的。所以这种称作为伪集群。
  • 数据同步端口:主从同时数据复制端口,(做伪集群时端口号不能重复)。
  • 远举端口:主从节点选举端口,(做伪集群时端口号不能重复)。

配置文件示例:

tickTime=2000
dataDir=/var/lib/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
#以下为集群配置,必须配置在所有节点的zoo.cfg文件中
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

集群配置流程:

  1. 分别创建3个data目录用于存储各节点数据  mkdir data mkdir data/1 mkdir data/3 mkdir data/3 
  2. 编写myid文件  echo 1 > data/1/myid echo 3 > data/3/myid echo 2 > data/2/myid  3、编写配置文件 conf/zoo1.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=data/1 clientPort=2181 #集群配置 server.1=127.0.0.1:2887:3887 server.2=127.0.0.1:2888:3888 server.3=127.0.0.1:2889:3889 

conf/zoo2.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=data/2
clientPort=2182
#集群配置
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889

conf/zoo3.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=data/3
clientPort=2183
#集群配置
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889

4.分别启动

./bin/zkServer.sh start conf/zoo1.cfg
./bin/zkServer.sh start conf/zoo2.cfg
./bin/zkServer.sh start conf/zoo3.cfg

5.分别查看状态

./bin/zkServer.sh status conf/zoo1.cfg
Mode: follower
./bin/zkServer.sh status conf/zoo2.cfg
Mode: leader
./bin/zkServer.sh status conf/zoo3.cfg
Mode: follower

检查集群复制情况: 1、分别连接指定节点 zkCli.sh 后加参数-server 表示连接指定IP与端口。

./bin/zkCli.sh -server 127.0.0.1:2181
./bin/zkCli.sh -server 127.0.0.1:2182
./bin/zkCli.sh -server 127.0.0.1:2183
  •  任意节点中创建数据,查看其它节点已经同步成功。

注意: -server参数后同时连接多个服务节点,并用逗号隔开 127.0.0.1:2181,127.0.0.1:2182

  1. 集群角色说明

zookeeper 集群中总共有三种角色,分别是leader(主节点)follower(子节点) observer(次级子节点) | 角色 | 描述 | |:----|:----| | leader | 主节点,又名领导者。用于写入数据,通过选举产生,如果宕机将会选举新的主节点。 | | follower | 子节点,又名追随者。用于实现数据的读取。同时他也是主节点的备选节点,并用拥有投票权。 | | observer | 次级子节点,又名观察者。用于读取数据,与fllower区别在于没有投票权,不能选为主节点。并且在计算集群可用状态时不会将observer计算入内。 |

observer配置: 只要在集群配置中加上observer后缀即可,示例如下:

server.3=127.0.0.1:2889:3889:observer

3.选举机制

通过 ./bin:

/zkServer.sh status 命令可以查看到节点状态

./bin/zkServer.sh status conf/zoo1.cfg
Mode: follower
./bin/zkServer.sh status conf/zoo2.cfg
Mode: leader
./bin/zkServer.sh status conf/zoo3.cfg
Mode: follower

投票机制;

  1.第一次投票给自己 

  2.第二次投票给自己id大的节点

  3.zxid大的为主节点

  3.总的一个原则:投票的半数机制

数据同步机制:

   分为两种:因为客户端并不知道是那个节点是master那个是slave

    1.数据写的时候写给leader,并且同步到flower

       和所有的节点建立链接

如果请求发给leader:则走leader请求的数据同步

如果请求发给flower,则走以下的途径:

 

而这个的核心数据的同步过程是:zxid.这个就是上面的参数:

leader挂掉之后,整个物理机是不提供服务的,只有有新的leader节点字后才会提供服务

怎么向一个文件后增加数据?四字运维命令

echo "4lw.commands.whitelist=*" >> conf/zoo1.cfg

查看zxid命令:

 zxid

leader在位期间:任何数据的变化,这个数都会+1;如果flower节点和leader节点的zxid不一致,那么数据就不一致;这个就是数据同步的基础;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值