【20180408】MySQL集群PXC的一些随笔

PXC验证不通过只有俩个情况

  1. 快照过久

    • SQL语句执行时间太长,或者UNDO表空间过小,或者事务量过大,或者过于频繁的提交,导致执行SQL过程中进行一致性读时,SQL执行后修改的前镜像(即UNDO数据)在UNDO表空间中已经被覆盖,不能构造一致性读块(CR blocks)。 这种情况最多。
    • SQL语句执行过程中,访问到的块,在进行延迟块清除时,不能确定该块的事务提交时间与SQL执行开始时间的先后次序。 这种情况很少。
  2. 对同一行数据进行修改

PXC其他node节点apply应用失败一般是硬件层次出现问题

  1. 失败之后一般进行IST增量补全
  2. 若是IST失败则会被T出集群

PXC没有lock table

  • 进行alter table DDL操作的时候会升级为全局锁,将整个实例锁住。所以最好建议是DDL操作的时候不能进行online DDL,最好是使用pt-osc或者gh-ost等

PXC的IST

  1. 当一个节点加入,它当前的UUID于现集群相同,并且缺失的数据能够在donor的writeset的cache中找到,则可以进行IST,否则只能全部初始化数据,并且进行SST

    • gcache.size默认是128M,可以根据高峰时期binlog一个小时内生成的binlog大小设置
  2. 需要注意的是,IST所需要的cache是临时存在的,所以一个集群完全关闭,但是各个节点关闭的时候seqno不一致,则即使先启动最新sequo的节点,其他落后的节点任然不能够做IST,只能SST。所以,如果需要完全关闭整个集群,需要先中断外部链接,然后在集群相对静止的情况下来关闭,才能避免SST。
  3. PXC之间的IST和SST数据的传输主要有三种方式:
    • mysqldump逻辑备份,会锁表。
    • rsync 会存在文件锁
    • xtrabackup 一般建议使用这个

脑裂

  1. 俩个节点发生脑裂的话,那么就不能针对整个集群进行操作,任何命令都是显示"unkown command"

    • pc.ignore_db = yes 忽略脑裂,继续操作

PXC的局限性

  1. 仅仅工作在InnoDB引擎表上面,因此对mysql库下面的系统表的修改不能复制,但是DDL操作时可以被复制的,所以可以通过create user,grant等方式操作系统表。
  2. 不支持在没有主键的表上面的DELETE操作,select...limit也会在不同节点返回不同的值。(仅仅只是在没有主键的情况下limit会返回不同的结果集么?)
  3. 不支持的操作:LOCK/UNLOCK TABLES,lock functions(GET_LOCKS(),RELEASE_LOCK()...)
  4. query log日志不能存放在表里,必须存放在文件中。
  5. 最大的事务大小由wsrep_max_ws_rows,wrsep_max_ws_size定义,LOAD DATA INFILE 每10K行提交一次,这种事务被分割为成数个小事务。(XtraDB Cluster 自动分割,还是操作时手动分割?)
    • wsrep_max_ws_rows,wrsep_max_ws_size 谁先触发,谁先进行拆分
  6. 由于集群是基于乐观的并发控制(optimistic consurrency control),事务冲突的情况可能哎commit阶段发生,当多个节点修改同一行数据的时候,只有一个节点能够成功,失败的节点将终止,并且返回死锁错误码 Error:1213 SQLSTATE:4001(ER_LOCK_DEADLOCK).(这样是否太不稳定了?动不动就会有某个节点终止刮掉的情况?而且这种情况如何处理?)
  7. 不支持XA事务,因为XA事务有可能在commit的时候出现异常rollback.(参考http://www.infoq.com/cn/articles/xa-transactions-handle)
  8. 整个集群的吞吐量/性能取决于最慢的那个节点,因为需要在所有的节点上面certification,同时还取决于节点之间的网络性能,因此需要所有的节点都有相同的硬件配置,并且网络,磁盘等性能要尽可能的高,例如使用SSD。

流控

  1. 什么是流控?

    • 流控简而言之就是流量控制,在PXC虽然是属于同步复制,但是它也只是在逻辑或者说虚拟的同步复制,在apply和commit并不是同步而是异步的,存在某些原因会导致apply和commit会落后于集群中的其他节点,一旦落后的事务过多,这个时候就会启动流控,在整个流控的过程中,集群是不对外提供写功能,但是并不会影响读。
  2. fc.limit=1
    • 控制流控的阀值,一旦node落后这个值则会发起流控,这个值并不是固定的。会根据集群中节点的数量动态调整的。
  3. fc_master_slave=NO
    • 是否开启动态调整流控的阀值。一般默认是NO
  4. fc_factor = 0.0~1.0
    • 控制流控什么时候回复正常,一般默认是0.5 即是fc.limit的50%的值就会恢复正常,流控结束。

原文地址:http://blog.51cto.com/11819159/2095585

时间: 2024-08-30 09:20:06

【20180408】MySQL集群PXC的一些随笔的相关文章

MySQL数据库集群-PXC方案

第1章 课程摘要课程内容的概要介绍,包括课程目标,面向用户,预备知识,课程大纲,软件与硬件环境等. 1-1 课程导学1-2 开发环境要求 第2章 创建PXC集群学习安装与创建PXC集群,为了搭建三高特点的数据库集群,我们将把两组PXC集群组建成分片,由MyCat做数据切分与读写分离,然后对MyCat做集群,用Keepalived+Haproxy实现双机热备.了解数据库的基准测试与压力测试,掌握PXC的实际性能.... 2-1 CentOS安装PerconaServer数据库2-2 安装PXC组建

Mysql集群(PXC)入门

第1章  课程介绍 1-1 引言 1-2 天猫双十一案例 1-3 微信红包案例 1-4 技术学习的目标和方式 1-5 课程学习目标 1-6 硬件环境介绍 第2章 PXC原理 2-1 单节点数据库的介绍 2-2 PXC 集群方案 2-3 Replication集群方案 2-4 系统架构方案介绍 2-5 APP 项目介绍 2-6 Docker 虚拟机部署MYSQL集群 2-7 APP 项目演示 2-8 PXC简介 2-9 PXC测试案例 2-10 PXC集群工作原理 第3章 PXC数据强一致性 3-

MySQL集群结构说明

在以前,数据库的集群配置一直很难,难点在于MySQL主从结构的高可用和读写分离.万幸的是,Galera/GR的出现,让整个集群的配置都极大程度地简化了. 以下是一个简单的MySQL集群拓扑图: 1.MySQL中间件:对MySQL Server的读写操作进行路由(即读写分离):分库分表(sharding) (1).MySQL Router:MySQL官方提供的轻量级MySQL代理(路由),只提供读写分离功能,前身为SQL Proxy. (2).ProxySQL:类似于MySQL Router,轻量

MySQL集群架构05分组复制架构和NDB集群架构

本博客讨论MySQL原生的两种架构:分组复制架构和NDB集群架构.这两种架构在之前的博客中有详细介绍. 一.MySQL分组复制架构 1.架构说明 MySQL Group Replication架构总体上还是一种基于复制的技术架构,可以轻松实现单主结构或者多主结构.每份数据存在于2个节点中,提供了数据安全保障的同时,节省了存储空间.主节点对外提供读写服务,而其它从结点仅仅提供只读服务.Group Replication内部实现了自动屏蔽故障主机的功能. 2.核心原理 MySQL Group Rep

Galera Cluster——一种新型的高一致性MySQL集群架构

原文链接:https://www.sohu.com/a/147032902_505779,最近被分配定位mysql的问题,学习下. 1. 何谓Galera Cluster 何谓Galera Cluster?就是集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前Galera Cluster有两个版本,分别是Percona Xtradb Cluster及MariaDB Cluster,都是基于Galera的,所以这里都统称为Galera Cluster了,

MySQL集群(二)之主主复制

前面介绍了主从复制,这一篇我将介绍的是主主复制,其实听名字就可以知道,主主复制其实就是两台服务器互为主节点与从节点.接下来我将详细的给大家介绍,怎么去配置主主复制! 一.主从复制中的问题 1.1.从节点占用了主节点的自增id 环境: 主节点:zyhserver1=1.0.0.3 从节点:udzyh1=1.0.0.5 第一步:我们在主节点中创建一个数据库db_love_1,在创建一个表tb_love(里面有id自增和name属性). create database db_love_1; use d

mysql 集群+主从同步

SQL节点: 给上层应用层提供sql访问. 管理节点(MGM):  管理整个集群. 启动,关闭集群. 通过ndb_mgmd命令启动集群 存储/数据节点: 保存cluster中的数据.  数据节点,可以提供副本.实现数据冗余. NDB引擎:是一种 "内存中"的存储引擎 , 它具有可用性高和数据一致性好的特点. 缺陷 基于内存,数据库的规模受集群总内存的大小限制 基于内存,断电后数据可能会有数据丢失,这点还需要通过测试验证. 多个节点通过网络实现通讯和数据同步.查询等操作,因此整体性受网络

项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

上次的博文项目进阶 之 集群环境搭建(二)MySQL集群中,我们搭建了一个基础的MySQL集群,这篇博客咱们继续讲解MySQL集群的相关内容,同时针对上一篇遗留的问题提出一个解决方案. 1.单管理节点MySQL集群和多管理节点MySQL集群 上一篇的博客中,我们搭建的MySQL集群架构中,只存在一个管理节点,这样搭建的集群可以用如下所示的结构表示. 仔细分析上图就会发现,上图所示的单管理节点MySQL集群存在当唯一的管理节点由于网络.断电.压力过大等各种原因宕机后,数据节点和SQL节点将会各自为

mycat实现简单的mysql集群负载均衡

什么是mycat呢? 简单理解为一个MySQL中间件,它支持分流.基于心跳的自动故障切换,支持读写分离,支持mysql主从,基于Nio管理线程的高并发- 详见官网:http://www.mycat.io/ 为什么需要mysql集群? 一个庞大的分布式系统的性能瓶颈中,最脆弱的就是连接,一个是客户端与后端的连接,另一个是后端与数据库的连接,说白了就是发送端请求太多,接收端能够的接收和处理的请求并不多,在客户端与后端中可以利用类似nginx的负载均衡解决,而在后端与数据库中可以利用类似mycat的负