mysql Pxc工作原理_PXC / Galera Cluster集群概述及原理分析-程序员宅基地

技术标签: mysql Pxc工作原理  

mariadb的galera cluster集群抄袭percona的PXC数据库集群,所以原理一样

### Galera Cluster/ PXC 集群工作原理

client端向server端发送dml更新操作请求时,server的native本地进程处理请求,并返回OK准备接收,client发送commit更新事务给server,server将replicate writeset复制写数据集发给group(cluster集群),cluster将该数据集对应产生的唯一的GTID(global transaction ID)发送给集群每个server(节点)。当前server节点验证通过后,执行commit_cd动作更新本地数据库,并返回OK;若其他节点验证不通过,则执行rollback_cd,回滚刚提交的事务。其他server(other server)接收并验证通过后,执行apply_cd和commit_cd动作更新本地数据库;若验证不通过,则丢弃该数据集。

dad5ecaf4fcc9e83ff08ba2593c46184.png

任意节点收到sql请求,对于dml更新操作事务,在commit之前,由wsrep API调用galera库进行集群内部广播,验证当前事务是否能在所有节点中执行,验证通过后该事务真正提交到集群所有节点执行,反之roll back回滚。此验证机制则是为了保证所有节点的数据一致性。

25206403_1379819650goo2.jpeg

innodb内部使用悲观锁,保证事务的成功提交和执行。

pxc/galera集群采用乐观锁,所有的事务都广播给集群每个节点,验证不通过再回滚

### PXC/Galera Cluster集群架构

25206403_13798196053ZoG.jpeg

group communication层:主要实现统一全局数据同步策略和集群内部所有事务的排序,便于生成GTID

replication层:主要用于完成数据同步,由applier和slave queue组成。replication模块的效率直接影响整个集群的写入功能

### 主要名词解释

WS    write set写数据集,写/更新事务

IST   Incremental State Transfer增量同步

SST   State Snapshot Transfer增量同步。传输SST的几种方法:mysqldump/xtrabackup/rsync

UUID    节点状态改变及顺序的唯一标识

GTID    Global Transaction ID,由UUID和sequence number偏移量组成。wsrep api中定义的集群内部全局事务id,用于记录集群中发生状态改变的唯一标识以及队列中的偏移量。

wsrep API    在DBMS库和wsrep provider之间提供接口

commit       把事务所做的修改提交到数据库,即在库中执行用户的sql请求

### PXC/Galera Cluster集群端口

3306    数据库对外提供服务的端口

4444    镜像数据传输SST,集群数据同步端口,全量同步,新节点加入时起作用

4567    集群节点间相互通信的端口

4568    增量数据同步IST,节点下线、重启后使用该端口,增量同步数据。

### 节点状态

16651fd3dfdf33271d960a7b66dbe13b.pngOPEN    节点启动成功,尝试连接到集群,如果失败则根据配置退出或创建新的集群

PRIMARY 节点已处于集群中,在新节点加入时,选取donor进行数据同步时会产生的状态

JOINER  节点处于等待接收/接收同步文件时的状态

JOINED   节点完成数据同步,但有部分数据没跟上,在尝试保持和集群进度一致的过程状态

例如某个节点故障后,重新加入集群,在追赶集群进度时的状态

5. SYNCED    节点正常提供服务的状态,表示已经同步完成并和集群进度保持一致。

6. DONOR     节点处于为新节点提供全量数据数据同步时的状态。此时该节点对客户端不提供服务。

##节点状态发生变化因素新节点加入集群

节点故障恢复,重新加入集群

节点同步失效

### PXC/Galera Cluster集群优缺点

优点:

1.高可用性。集群多个节点功能平等,提供负载和冗余,避免单点故障

2.强一致性。集群所有节点同步修改数据,真正同步读写,不存延迟。

3.易扩展。增加新节点,只需扔进集群,会自动完成SST全量同步,和后续IST增量同步

缺点:

1.任何更新事务都需要全局验证通过,才会在每个节点库执行。集群性能受限于性能最差的节点

2.galera/pxc集群保证数据一致性,必须所有节点验证通过。多点并发写入,锁冲突严重。

例如:多台同时有写操作,每个更新操作时,都会锁库来验证

3.新节点或延后较大的节点重新加入时,会进行全量拷贝数据SST,作为donor(提供同步文件的节点)的节点在同步过程中无法提供读写,显示状态为donor。完成后的状态为syncd

###当galera cluster集群单个节点或所有节点停机情况分析单个节点停机

节点停机重启,重新加入集群,通过IST增量同步数据,来保持集群数据的一致性。IST的实现由wsrep_provider_options="gcache.size=1G"参数决定,一般设置为1G。参数大小由什么决定,根据停机时间,若停机一小时,需要确认一小时产生多大的binlog来算出参数大小。

1.1 停机时间过长,部分数据gcache没有,此时该节点SST全量同步数据。

2. 所有节点关闭,应采用轮巡滚动关闭的方式:a节点关闭修复,加回集群;b节点关闭修复,加回集群...

原则就是保持cluster中最少一个成员存活,进行滚动重启。

2.1 集群所有节点都关闭了,没有存活的节点的情况

每个节点数据库关闭后,都会保存最后一个GTID,启动集群时要先启动最后一个关闭的节点,启动顺序和关闭顺序相反。

3. 避免关闭和启动节点时数据丢失

3.1 原则保持cluster集群中最少有一个成员存货,然后进行滚动重启

3.2 利用主从的概念,把一个从节点转化为PXC/Galera集群中的节点

### 常见问题汇总如果主节点(负责写入的节点)写入过大,apply_cd时间过长,导致数据更新操作时间过长,怎么处理?

Wrep_slave_threads参数配置成cpu的个数或者1.5倍。

脑裂

任何命令执行出现unknown command,表示出现脑裂,集群中任意两个节点间通信的4567端口不通,并且无法对外提供服务。SET GLOBAL wsrep_provider_options="pc.ignore_sb=true";

并发写

如果在集群多个节点进行写/更新操作,有可能同时不同节点update同一行操作时就会出现锁死问题,出现:Error:1213 SQLSTATE:4001.解决:指定更新和写入都在都一个节点操作。

DDL全局锁

采用pt-online-schema-change

只支持innodb引擎,表结构必须要有主键,不然会造成集中每个节点的data page里的数据不一致。

不支持表级锁,即不能lock/unlock tables,使用行级锁

新节点加入加入&故障节点恢复加入集群,此时不能有写操作,不然会导致被写入的那台库DDL死锁。所以需要暂停集群业务写操作,等数据一致后在开启写操作。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39792049/article/details/113275178

智能推荐

解决win10/win8/8.1 64位操作系统MT65xx preloader线刷驱动无法安装_mt65驱动-程序员宅基地

文章浏览阅读1.3w次。转载自 http://www.miui.com/thread-2003672-1-1.html 当手机在刷错包或者误修改删除系统文件后会出现无法开机或者是移动定制(联通合约机)版想刷标准版,这时就会用到线刷,首先就是安装线刷驱动。 在XP和win7上线刷是比较方便的,用那个驱动自动安装版,直接就可以安装好,完成线刷。不过现在也有好多机友换成了win8/8.1系统,再使用这个_mt65驱动

SonarQube简介及客户端集成_sonar的客户端区别-程序员宅基地

文章浏览阅读1k次。SonarQube是一个代码质量管理平台,可以扫描监测代码并给出质量评价及修改建议,通过插件机制支持25+中开发语言,可以很容易与gradle\maven\jenkins等工具进行集成,是非常流行的代码质量管控平台。通CheckStyle、findbugs等工具定位不同,SonarQube定位于平台,有完善的管理机制及强大的管理页面,并通过插件支持checkstyle及findbugs等既有的流..._sonar的客户端区别

元学习系列(六):神经图灵机详细分析_神经图灵机方法改进-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏27次。神经图灵机是LSTM、GRU的改进版本,本质上依然包含一个外部记忆结构、可对记忆进行读写操作,主要针对读写操作进行了改进,或者说提出了一种新的读写操作思路。神经图灵机之所以叫这个名字是因为它通过深度学习模型模拟了图灵机,但是我觉得如果先去介绍图灵机的概念,就会搞得很混乱,所以这里主要从神经图灵机改进了LSTM的哪些方面入手进行讲解,同时,由于模型的结构比较复杂,为了让思路更清晰,这次也会分开几..._神经图灵机方法改进

【机器学习】机器学习模型迭代方法(Python)-程序员宅基地

文章浏览阅读2.8k次。一、模型迭代方法机器学习模型在实际应用的场景,通常要根据新增的数据下进行模型的迭代,常见的模型迭代方法有以下几种:1、全量数据重新训练一个模型,直接合并历史训练数据与新增的数据,模型直接离线学习全量数据,学习得到一个全新的模型。优缺点:这也是实际最为常见的模型迭代方式,通常模型效果也是最好的,但这样模型迭代比较耗时,资源耗费比较多,实时性较差,特别是在大数据场景更为困难;2、模型融合的方法,将旧模..._模型迭代

base64图片打成Zip包上传,以及服务端解压的简单实现_base64可以装换zip吗-程序员宅基地

文章浏览阅读2.3k次。1、前言上传图片一般采用异步上传的方式,但是异步上传带来不好的地方,就如果图片有改变或者删除,图片服务器端就会造成浪费。所以有时候就会和参数同步提交。笔者喜欢base64图片一起上传,但是图片过多时就会出现数据丢失等异常。因为tomcat的post请求默认是2M的长度限制。2、解决办法有两种:① 修改tomcat的servel.xml的配置文件,设置 maxPostSize=..._base64可以装换zip吗

Opencv自然场景文本识别系统(源码&教程)_opencv自然场景实时识别文字-程序员宅基地

文章浏览阅读1k次,点赞17次,收藏22次。Opencv自然场景文本识别系统(源码&教程)_opencv自然场景实时识别文字

随便推点

ESXi 快速复制虚拟机脚本_exsi6.7快速克隆centos-程序员宅基地

文章浏览阅读1.3k次。拷贝虚拟机文件时间比较长,因为虚拟机 flat 文件很大,所以要等。脚本完成后,以复制虚拟机文件夹。将以下脚本内容写入文件。_exsi6.7快速克隆centos

好友推荐—基于关系的java和spark代码实现_本关任务:使用 spark core 知识完成 " 好友推荐 " 的程序。-程序员宅基地

文章浏览阅读2k次。本文主要实现基于二度好友的推荐。数学公式参考于:http://blog.csdn.net/qq_14950717/article/details/52197565测试数据为自己随手画的关系图把图片整理成文本信息如下:a b c d e f yb c a f gc a b dd c a e h q re f h d af e a b gg h f bh e g i di j m n ..._本关任务:使用 spark core 知识完成 " 好友推荐 " 的程序。

南京大学-高级程序设计复习总结_南京大学高级程序设计-程序员宅基地

文章浏览阅读367次。南京大学高级程序设计期末复习总结,c++面向对象编程_南京大学高级程序设计

4.朴素贝叶斯分类器实现-matlab_朴素贝叶斯 matlab训练和测试输出-程序员宅基地

文章浏览阅读3.1k次,点赞2次,收藏12次。实现朴素贝叶斯分类器,并且根据李航《统计机器学习》第四章提供的数据训练与测试,结果与书中一致分别实现了朴素贝叶斯以及带有laplace平滑的朴素贝叶斯%书中例题实现朴素贝叶斯%特征1的取值集合A1=[1;2;3];%特征2的取值集合A2=[4;5;6];%S M LAValues={A1;A2};%Y的取值集合YValue=[-1;1];%数据集和T=[ 1,4,-1;..._朴素贝叶斯 matlab训练和测试输出

Markdown 文本换行_markdowntext 换行-程序员宅基地

文章浏览阅读1.6k次。Markdown 文本换行_markdowntext 换行

错误:0xC0000022 在运行 Microsoft Windows 非核心版本的计算机上,运行”slui.exe 0x2a 0xC0000022″以显示错误文本_错误: 0xc0000022 在运行 microsoft windows 非核心版本的计算机上,运行-程序员宅基地

文章浏览阅读6.7w次,点赞2次,收藏37次。win10 2016长期服务版激活错误解决方法:打开“注册表编辑器”;(Windows + R然后输入Regedit)修改SkipRearm的值为1:(在HKEY_LOCAL_MACHINE–》SOFTWARE–》Microsoft–》Windows NT–》CurrentVersion–》SoftwareProtectionPlatform里面,将SkipRearm的值修改为1)重..._错误: 0xc0000022 在运行 microsoft windows 非核心版本的计算机上,运行“slui.ex