阿里云服务器上部署zookeeper 3.6.3(3)- 集群模式篇

2023-05-16

伪集群模式

这里我们采用的是伪集群模式,一台机器上三个节点,集群模式是一台机器上一个节点。之所以称伪集群,就是这台机器挂了,集群也就没了。集群与伪集群的方式完全一样的。

Zookeeper工作原理

在zookeeper的集群中,各个节点共有下面3种角色和4种状态:

角色:leader,follower,observer

状态:leading,following,observing,looking

Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议(ZooKeeper Atomic Broadcast protocol)。

Zab协议有两种模式,它们分别是恢复模式(Recovery选主)和广播模式(Broadcast同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。

为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。

每个Server在工作过程中有4种状态:

LOOKING:当前Server不知道leader是谁,正在搜寻。

LEADING:当前Server即为选举出来的leader。

FOLLOWING:leader已经选举出来,当前Server与之同步。

OBSERVING:observer的行为在大多数情况下与follower完全一致,但是他们不参加选举和投票,而仅仅接受(observing)选举和投票的结果。

选举机制

  • 1、半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。

  • 2、需要给每个zookeeper 1G左右的内存,如果可能的话,最好有独立的磁盘,因为独立磁盘可以确保zookeeper是高性能的。如果你的集群负载很重,不要把zookeeper和RegionServer运行在同一台机器上面,就像DataNodes和TaskTrackers一样。

  • 3、Zookeeper虽然在配置文件中并没有指定Master和Slave。但是,Zookeeper工作时,是有一个节点为Leader,其他则为Follower,Leader是通过内部的选举机制临时产生的。

  • 4、以一个简单的例子来说明整个选举的过程。 假设有五台服务器组成的Zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的。假设这些服务器依序启动,来看看会发生什么,如图

img

  • 1、服务器1启动,此时只有它一台服务器启动了,它发出去的报文没有任何响应,所以它的选举状态一直是LOOKING状态。

  • 2、服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1、2还是继续保持LOOKING状态。

  • 3、服务器3启动,根据前面的理论分析,服务器3成为服务器1、2、3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的Leader。

  • 4、服务器4启动,根据前面的分析,理论上服务器4应该是服务器1、2、3、4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了。

  • 5、服务器5启动,同4一样当小弟。

集群规划

机器编号Ip 地址端口
apache-zookeeper-01127.0.0.12181
apache-zookeeper-02127.0.0.12182
apache-zookeeper-03127.0.0.12183
# 解压移动重命名
mkdir -p /data/zk/
tar xf apache-zookeeper-3.6.3-bin.tar.gz
mv apache-zookeeper-3.6.3-bin /data/zk/zookeeper1
cp -r /data/zk/zookeeper1 /data/zk/zookeeper2
cp -r /data/zk/zookeeper1 /data/zk/zookeeper3
​
# 创建节点存放的数据和日志目录和myid标示
mkdir -p /data/zkdata/zkdata1/logs
mkdir -p /data/zkdata/zkdata2/logs
mkdir -p /data/zkdata/zkdata3/logs
​
echo "1" > /data/zkdata/zkdata1/myid
echo "2" > /data/zkdata/zkdata1/myid
echo "3" > /data/zkdata/zkdata1/myid
​
# 配置文件(基本默认不动,只用修改数据目录和日志目录和添加下server节点)
cd /data/zk/zookeeper1/
cp conf/zoo_sample.cfg conf/zoo.cfg
​
cd /data/zk/zookeeper2/
cp conf/zoo_sample.cfg conf/zoo.cfg
​
cd /data/zk/zookeeper3/
cp conf/zoo_sample.cfg conf/zoo.cfg

节点配置文件修改

# zookeeper3.5版本后提供了jetty默认后台管理8080端口,访问地址为:http://localhost:8081/commands/stat
# 同一台机器上启动多个节点会有冲突,解决办法:
# 启动脚本中修改 -Dzookeeper.admin.serverPort=xxx
# zoo.cfg配置文件中 修改配置admin.serverPort=xxx
# -Dzookeeper.admin.enableServer=false 在启动脚本中关闭管理控制台
​
# 修改节点1配置文件
vim conf/zoo.cfg
​
dataDir=/data/zkdata/zkdata1/
dataLogDir=/data/zkdata/zkdata1/logs
clientPort=2181
admin.serverPort=8081
server.1=192.168.16.206:2881:3881
server.2=192.168.16.206:2882:3882
server.3=192.168.16.206:2883:3883
​
# 修改节点2配置文件
vim conf/zoo.cfg
​
dataDir=/data/zkdata/zkdata2/
dataLogDir=/data/zkdata/zkdata2/logs
clientPort=2182
admin.serverPort=8082
server.1=192.168.16.206:2881:3881
server.2=192.168.16.206:2882:3882
server.3=192.168.16.206:2883:3883
​
# 修改节点3配置文件
vim conf/zoo.cfg
​
dataDir=/data/zkdata/zkdata3/
dataLogDir=/data/zkdata/zkdata3/logs
clientPort=2183
admin.serverPort=8083
server.1=192.168.16.206:2881:3881
server.2=192.168.16.206:2882:3882
server.3=192.168.16.206:2883:3883

分别启动zookeeper的3个节点

# 启动
/data/zk/zookeeper1/bin/zkServer.sh start
/data/zk/zookeeper2/bin/zkServer.sh start
/data/zk/zookeeper3/bin/zkServer.sh start
​
# 查看状态
/data/zk/zookeeper1/bin/zkServer.sh status
/data/zk/zookeeper2/bin/zkServer.sh status
/data/zk/zookeeper3/bin/zkServer.sh status
​
# 停止
/data/zk/zookeeper1/bin/zkServer.sh stop
/data/zk/zookeeper2/bin/zkServer.sh stop
/data/zk/zookeeper3/bin/zkServer.sh stop
​
# 重启
/data/zk/zookeeper1/bin/zkServer.sh restart
/data/zk/zookeeper2/bin/zkServer.sh restart
/data/zk/zookeeper3/bin/zkServer.sh restart

多机联合测试

c1运行结果:

[root@sso conf]# /var/local/server/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg
Mode: leader

c2运行结果:

[root@cas zookeeper]# /var/local/server/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg
Mode: follower

c3运行结果:

[root@localhost zookeeper]# /var/local/server/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg
Mode: follower

同步测试

c1上执行:create /c1project c1projecttest get /c1project

[zk: c1:2181(CONNECTED) 2] create /c1project c1projecttest
Created /c1project
[zk: c1:2181(CONNECTED) 1] get /c1project
c1projecttest
cZxid = 0x100000013
ctime = Thu Aug 25 11:03:49 CST 2016
mZxid = 0x100000013
mtime = Thu Aug 25 11:03:49 CST 2016
pZxid = 0x100000013
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 13
numChildren = 0

c2上查看同步结果:get /c1project

[zk: c2:2181(CONNECTED) 0] get /c1project
c1projecttest
cZxid = 0x100000013
ctime = Thu Aug 25 11:03:49 CST 2016
mZxid = 0x100000013
mtime = Thu Aug 25 11:03:49 CST 2016
pZxid = 0x100000013
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 13
numChildren = 0

c3上查看同步结果: get /c1project

[zk: c3:2181(CONNECTED) 4] get /c1project
c1projecttest
cZxid = 0x100000013
ctime = Thu Aug 25 11:03:49 CST 2016
mZxid = 0x100000013
mtime = Thu Aug 25 11:03:49 CST 2016
pZxid = 0x100000013
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 13
numChildren = 0

此时说明zookeeper集群配置成功。

从节点主动升级和接管成为主节点

leaderfollower的自动切换,前面我们知道c1是leader,当leader down掉后是否有从节点升级为leader

c1上执行

/var/local/server/zookeeper/bin/zkServer.sh stop

c2上查看状态

[root@cas ~]# /var/local/server/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg
Mode: follower

可以发现c2仍然为从节点

再看看c3

[root@localhost ~]# /var/local/server/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg
Mode: leader

此时c3升级为了主节点。

再次启动c1,并查看状态

[root@sso conf]# /var/local/server/zookeeper/bin/zkServer.sh start
JMX enabled by default
Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@sso conf]#
[root@sso conf]# /var/local/server/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg
Mode: follower

发现c1作为了从节点。

每天努力一点,每天都在进步。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阿里云服务器上部署zookeeper 3.6.3(3)- 集群模式篇 的相关文章

  • Eureka和Zookeeper的区别

    Eureka和Zookeeper的区别 Mysql Oracle SqlServer等关系型数据库遵循的原则是 ACID 原则 即 A 原子性 C 一致性 I 独立性 D 持久性 Redis Mogodb 等非关系型数据库遵循的原则是 CA
  • 链路追踪Sleuth入门

    前言 在一个大型的分布式项目中存在各种各样的模块调用 每个模块负责不同的功能 组合成系统 在这种架构下的系统 一次请求往往会调用到许许多多的微服务 这样的跨度对于维护也是存在一定的问题 1 如何快速发现问题 2 如何判断故障影响范围 3 如
  • Linux学习笔记——ZooKeeper集群安装部署

    5 8 ZooKeeper集群安装部署 5 8 1 简介 Zookeeper是一个分布式的 开放源码的分布式应用程序协调服务 是Hadoop和HBase的重要组件 它是一个为分布式应用提供一致性服务的软件 提供的功能包括 配置维护 域名服务
  • consul学习与常用命令和使用教程

    目录 consul是什么 常用命令 API 实例1 新建服务API 注册服务 查询服务 consul是什么 Consul是分布式的 高可用的 可横向扩展的用于实现分布式系统的服务发现与配置 consul就是提供服务发现的工具 做服务发现的框
  • zookeeper入门到精通03——zookeeper集群搭建

    zookeeper集群搭建 3 1 多虚拟机环境搭建 3 2 zookeeper集群搭建 3 1 多虚拟机环境搭建 我们需要搭建zookeeper集群 而由于zookeeper的的服务器数量需要设置为单数 前文介绍了原因 一个zookeep
  • zookeerp安装与配置

    1 zookeeper官网 https zookeeper apache org 2 找到download 然后打开的页面打开archive 版本页面不选择内测或者公测版本 选择一个稳定的 然后下载下来 解压 进入红框目录 在红框目录打cm
  • ZooKeeper 分布式协调工具

    目录 一 ZooKeeper 概述 二 ZooKeeper Windows 单机版安装 三 ZooKeeper 集群环境下选举过程 四 ZooKeeper 存储数据的过程 五 ZooKeeper 监听 六 java 操作 ZooKeeper
  • Eureka与Zookeeper的区别

    著名的CAP 理论指出 一个分布式系统不可能同时满足 C 一致性 A 可用性 和 P 分区容错性 由于分区容错性在是分布式系统中必须要保证的 因此我们只能在 A 和 C 之间进行权衡 在此 Zookeeper 保证的是 CP 而 Eurek
  • 【clickhouse】clickhouse Exception: Table is in readonly mode

    文章目录 1 概述 1 概述 clickhouse报错 Code 242 e displayText DB Exception Table is in readonly mode zookeeper path clickhouse tabl
  • zookeeper基本架构

    要全面了解zookeeper 首先我们得知道什么是zookeeper 能做什么 zookeeper是一个开源的分布式协调服务 主要用于数据订阅 发布 集群管理 配置管理 分布式锁 基本架构 zookeeper基本架构如下 zookeeper
  • etcd 集群搭建及常用场景分析

    概述 etcd 是一个分布式一致性k v存储系统 可用于服务注册发现与共享配置 具有以下优点 简单 相比于晦涩难懂的paxos算法 etcd基于相对简单且易实现的raft算法实现一致性 并通过gRPC提供接口调用 安全 支持TLS通信 并可
  • kafka详解及集群环境搭建

    一 kafka详解 安装包下载地址 https download csdn net download weixin 45894220 87020758 1 1Kafka是什么 1 Kafka是一个开源消息系统 由Scala写成 是由Apac
  • 大数据开发教程——ZooKeeper分布式协调组件

    ZooKeeper是什么 ZooKeeper是一个分布式的 开放源码的分布式应用程序协调服务 是Google的Chubby一个开源的实现 是Hadoop和Hbase Flink的重要组件 中文名 动物管理员 它是一个为分布式应用提供一致性服
  • zookeeper学习网址

    1 分布式服务框架 ZooKeeper 管理分布式环境中的数据 http www ibm com developerworks cn opensource os cn ZooKeeper 2 ZooKeeper系列讲座 很全面 http w
  • Zookeeper 基本操作

    Zookeeper 基本操作 文章目录 Zookeeper 基本操作 1 查看zk的运行状态 2 客户端连接zk 3 ls 查看 4 get 获取节点数据和更新信息 5 stat 获得节点的更新信息 6 ls2 ls命令和stat命令的整合
  • Docker搭建zookeeper

    问题背景 前言 本文参考自 docker compose快速搭建Zookeeper集群 熬到凌晨三点多验证部署成功 网上有很多文章已经无法正确部署了 因为有些东西版本升级了 版本跟不上就会报错 还有一种更加详细更加全面的部署方式 Docke
  • zookeeper3.4.6集群部署

    在安装Zookeeper之前 首先需要确保的就是主机名称 可选 hosts都已经更改 并且JDK成功安装 1 安装Zookeeper 使用命令 tar zxvf 命令将gz压缩文件解压 笔者Zookeeper的安装目录为 home Hado
  • kafka的安装和使用

    ZooKeeper简介 ZooKeeper 是一个为分布式应用所设计的分布的 开源的 java 协调服务 分布式的应用可以建立在同步配置管理 选举 分布式锁 分组和命名等服务的更高级别的实现的基础之上 ZooKeeper 意欲设计一个易于编
  • Nacos、ZooKeeper和Dubbo的区别

    Nacos ZooKeeper和Dubbo是三个不同的分布式系统组件 它们之间有以下几点区别 功能定位 Nacos主要提供服务发现 配置管理和服务治理等功能 而ZooKeeper主要是分布式协调服务 提供了分布式锁 分布式队列等原语 Dub
  • 【Docker安装部署Kafka+Zookeeper详细教程】

    Docker安装部署Kafka Zookeeper Docker拉取镜像 Docker拉取zookeeper的镜像 docker pull zookeeper Docker拉取kafka的镜像 docker pull wurstmeiste

随机推荐