利用Zookeeper技术-Mysql数据库容灾切换

文章描述:-2022年4月13日发(作者:穆堂)利用Zookeeper技术Mysql容灾切换一、ZooKeeper介绍1.简介ZooKeeper是一个为分布式应用所设计的分布的、开源的协调服务。分布式的应用可以建立在同步、配置管理、分组和命名等服务的更高级别的实现的基础之上。ZooKeeper意欲设计一个易于编程的环境,它的文件系统使用我们所熟悉的目录树结构。ZooKeeper使用Java所编写,但是支持J

-

利用Zookeeper技术-Mysql数据库容灾切换
2022年4月13日发
(作者:穆堂)

利用Zookeeper技术

Mysql容灾切换

一、ZooKeeper介绍

1.简介

ZooKeeper是一个为分布式应用所设计的分布的、开源的协调服

务。分布式的应用可以建立在同步、配置管理、分组和命名等服务的更

高级别的实现的基础之上。ZooKeeper意欲设计一个易于编程的环境,

它的文件系统使用我们所熟悉的目录树结构。ZooKeeper使用Java所编

写,但是支持Java和C两种编程语言。

per总体结构

per集由一组Server节点组成,这一组Server节点中存在一个角为

Leader的节点,其他节点都为Follower。当客户端Client连接到ZooKeeper集,

并且执行写请求时,这些请求会被发送到Leader节点上,然后Leader节点上数据变

更会同步到集中其他的Follower节点。

节点在接收到数据变更请求后,首先将变更写入本地磁盘,以作恢复之用。当

所有的写请求持久化到磁盘以后,才会将变更应用到内存中。

per使用了一种自定义的原子消息协议,在消息层的这种原子特性,保证了整

个协调系统中的节点数据或状态的一致性。Follower基于这种消息协议能够保证本地

的ZooKeeper数据与Leader节点同步,然后基于本地的存储来独立地对外提供服务。

6.当一个Leader节点发生故障失效时,失败故障是快速响应的,消息层负责重新选择

一个Leader,继续作为协调服务集的中心,处理客户端写请求,并将ZooKeeper

协调系统的数据变更同步(广播)到其他的Follower节点。

Zookeeper逻辑图

per数据模型

Zookeeper会维护一个具有层次关系的数据结构,它非常类似于一个文件系统

Zookeeper这种数据结构有如下这些特点:

每个子目录项如ameService都被称作为znode,这个znode是被它所在的路径唯一标

识,如Server1这个znode的标识为/ameService/Server1

znode可以有子节点目录,并且每个znode可以存储数据,注意EPHEMERAL类型的目

录节点不能有子节点目录

znode是有版本的,每个znode中存储的数据可以有多个版本,也就是一个访问路径中

可以存储多份数据

znode可以是临时节点,一旦创建这个znode的客户端与服务器失去联系,这个znode

也将自动删除,Zookeeper的客户端和服务器通信采用长连接方式,每个客户端和服务

器通过心跳来保持连接,这个连接状态称为session,如果znode是临时节点,这个

session失效,znode也就删除了

znode的目录名可以自动编号,如App1已经存在,再创建的话,将会自动命名为App2

znode可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一

旦变化可以通知设置监控的客户端,这个是Zookeeper的核心特性,Zookeeper的很

多功能都是基于这个特性实现的,后面在典型的应用场景中会有实例介绍

Zookeeper数据结构

per特性

顺序一致性:按照客户端发送请求的顺序更新数据。

原子性:更新要么成功,要么失败,不会出现部分更新。

单一性:无论客户端连接哪个server,都会看到同一个视图。

可靠性:一旦数据更新成功,将一直保持,直到新的更新。

及时性:客户端会在一个确定的时间内得到最新的数据。

per应用场景

数据发布与订阅

应用配置集中到节点上,应用启动时主动获取,并在节点上注册一

个watcher,每次配置更新都会通知到应用。

名空间服务

分布式命名服务,创建一个节点后,节点的路径就是全局唯一的,

可以作为全局名称使用。

分布式通知/协调

不同的系统都监听同一个节点,一旦有了更新,另一个系统能够收

到通知。

分布式锁

Zookeeper能保证数据的强一致性,用户任何时候都可以相信集

中每个节点的数据都是相同的。一个用户创建一个节点作为锁,另一个

用户检测该节点,如果存在,代表别的用户已经锁住,如果不存在,则

可以创建一个节点,代表拥有一个锁。

集管理

每个加入集的机器都创建一个节点,写入自己的状态。监控父节

点的用户会受到通知,进行相应的处理。离开时删除节点,监控父节点

的用户同样会收到通知。

二、ZooKeeper应用:Mysql容灾切换

对于多数应用来说,MySQL都是作为最关键的数据存储中心的,所

以,如何让MySQL提供HA服务,是我们不得不面对的一个问题。当master

当机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知

master当机并进行相应的故障转移处理,都是需要我们好好思考的。

要保证MySQL数据不丢失,replication是一个很好的解决方案,

而MySQL也提供了一套强大的replication机制。只是我们需要知道,

为了性能考量,replication是采用的asynchronous模式,也就是写入

的数据并不会同步更新到slave上面,如果这时候master当机,我们仍

然可能会面临数据丢失的风险,我们不能等到master当了几分钟才知道

出现问题了。所以一套好的监控工具是必不可少的。使用zookeeper来

解决整个MySQL集的monitor以及failover,它能很方便的对整个集

进行监控,并能即时的获取整个集的变化信息并触发相应的事件通

知感兴趣的服务,同时协调多个服务进行相关处理。

对于任何一个MySQL实例,我们都有一个对应的agent程序,agent

跟该MySQL实例放到同一台机器上面,并且定时的对MySQL实例发送

ping命令检测其可用性,同时该agent通过ephemeral的方式挂载到

zookeeper上面。如果agent或者该agent代理的mysql宕掉,注册在

zookeeper上的节点就会发生变化,利用zookeeperwatch功能实现mysq

实例失效后的主库的选举操作。

主要有以下几种情况:

机器当机,这样MySQL以及agent都会当掉,agent与zookeeper

连接自然断开

MySQL当掉,agent发现ping不通,主动断开与zookeeper的连接

Agent当掉,但MySQL未当

Mysql容灾示意图

如上图所示,zookeeper上的master节点存储当前主节点名称;servers下

面保存在线的节点,命名规则一般为ip:port_序列号;nodeid为当前的序列号,

每当节点获取一个序列号时,该节点值自就增,以便于分配给下一个节点。

过程如下:

初始化阶段,创建servers,master,nodeid节点

每个client创建servers子节点,zoo_create("/servers/xxx",EPHEMERAL)

zoo_get_child(/servers,ULL)

若当前client的序列号id是当前最小的节点,则当前节点是master,设置

master节点退出

否则,zoo_exsists(lastidbeforeid,watcher)//当前节点watch比当前

节点id次小的那个节点的状态

如果id不存在,那么退出否则等待watch触发,重新选举master

三、总结:

Zookeeper是针对大型分布式系统的高可靠的协调系统。Zookeeper不是让

分布式系统避免“部分失败”问题,而是让分布式系统当碰到部分失败时候,可

以正确的处理此类的问题,让分布式系统能正常的运行。

Zookeeper能够很容易的实现数据库集管理的功能,如有多台

MysqlServer组成一个服务集,那么必须要一个“总管”知道当前集中每台

数据库的服务状态,一旦有某台数据库不能提供服务,集中其它集必须知道,

从而做出调整重新分配服务策略。

-

利用Zookeeper技术-Mysql数据库容灾切换

发布时间:2022-04-13 02:02:44
文章版权声明:除非注明,否则均为IT技术网-学习WEB前端开发等IT技术的网络平台原创文章,转载或复制请以超链接形式并注明出处。

发表评论

评论列表 (有 20 条评论,573人围观)
工商银行定期存款V铁粉4 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
保证了整个协调系统中的节点数据或状态的一致性
大鹏米克V铁粉14 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
离开时删除节点
struts2漏洞V铁粉25 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
watcher)//当前节点watch比当前节点id次小的那个节点的状态如果id不存在
怀男孩的症状V铁粉1 minute ago Google Chrome 93.0.4577.82 Windows 10 x64
per应用场景数据发布与订阅应用配置集中到节点上
道外二手房V铁粉20 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
如果znode是临时节点
西游降魔票房V铁粉9 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
我们都有一个对应的agent程序
股票被套V铁粉28 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
也就是一个访问路径中可以存储多份数据znode可以是临时节点
springbatchV铁粉15 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
-2022年4月13日发(作者:穆堂)利用Zookeeper技术Mysql容灾切换一
打击传销V铁粉14 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
replication是一个很好的解决方案
注册塞舌尔V铁粉26 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
注册在zookeeper上的节点就会发生变化
细胞吞噬V铁粉12 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
MySQL都是作为最关键的数据存储中心的
华安证券下载V铁粉12 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
分布式锁Zookeeper能保证数据的强一致性
吉安二手房网V铁粉19 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
而MySQL也提供了一套强大的replication机制
荆楚理工学院地址V铁粉16 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
以便于分配给下一个节点
我愿意陈晓东V铁粉2 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
ZooKeeper介绍1.简介ZooKeeper是一个为分布式应用所设计的分布的
胖手指V铁粉5 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
我们都有一个对应的agent程序
藿香正气散V铁粉25 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
并在节点上注册一个watcher
ugeeV铁粉12 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
并能即时的获取整个集的变化信息并触发相应的事件通知感兴趣的服务
爱上灰太狼V铁粉19 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
每个znode中存储的数据可以有多个版本

最近发表

随便看看

热门文章

标签列表