一、PXC概述

PXC是基于Galera协议的MySQL高可用集群架构。具有高可用性、方便扩展且可以实现多个MySQL节点间的数据同步复制和读写,保证数据的强一致性。可以基本达到实时同步且相互的关系是对等的,各节点之间各自为主,这种架构不共享任何数据,是一种高冗余架构。

PXC的操作流程。首先客户端发起一个事务,该事务先在本地执行,执行完成后发起对事务的提交操作前会将产生的复制集广播出去获得一个全局的事务ID号一起传送给其它节点,其它的节点经过验证合并数据后发现没有冲突数据则执行apply_cb和commit_cb操作,否则就执行discard(取消)此次事务操作。当前节点通过验证之后执行提交并返回OK,如果验证不通过则执行回滚。生产环境中如果有一个节点验证没有通过,产生数据冲突则会将不一致的节点踢出集群,被踢出节点自己会执行shutdown。

二、PXC架构优缺点

2.1 优点

(1)实现了MySQL数据库的高可用和数据的强一致性

(2)完成了真正的多节点读写的集群方案

(3)基本达到了实时同步,改善了传统意义上的主从延迟问题

(4)新加入的节点可以自动部署,无需提供手动备份

(5)数据库的故障切换容易

2.2 缺点

(1)新加入的节点开销大,需要复制完整的数据。采用sst传输开销太大

(2)任何更新事务都需要全局验证通过,才会在每个节点库上执行,集群性能受限于性能最差的节点(短板效应)。

(3)因为需要保证数据的一致性,所以在多个节点并发写时,所冲突比较严重

(4)存在写扩大问题,所有节点都会发生写操作

(5)只支持InnoDB存储引擎

(6)没有表级别的锁定,执行DDL语句操作会把整个集群锁住,而且“kill”不掉(建议使用osc操作)

(7)所有表必须有主键,不然操作数据时会报错

三、PXC的安装配置

3.1 使用到的常见端口

3306-数据库对外服务的端口

4444-请求SST端口(SST是指数据库一个备份全量文件的传输)

4567-组成员之间进行沟通的端口号

4568-用于传输IST(相对SST来说的一个增量)

3.2 节点状态变化阶段

open-节点启动成功,尝试连接到集群

primary-节点已处于集群中,在新节点加入时选区doner进行数据同步会产生的状态

joiner-节点处于等待接受同步文件时的状态

joined-节点完成数据同步工作,尝试保持与集群进度一致

synced-节点正常提供服务的状态,表示以经同步完成并和集群进度保持一致

doner-节点处于为新加入的节点提供全量数据时的状态

当doner节点向新加入集群的节点同步数据时使用SST传输,由于数据量很大可能会因此而拖垮整个集群的性能。所以在生产环境中如果数据量下可以使用SST全量传输,但是如果数据量很大则可以先建立主从关系再加入集群

3.3 节点间数据传输

PXC有两种节点的传输方式:SST(全量传输)和IST(增量传输)。SST传输有xtrabackup、mysqldump和rsync三种方法,但增量传输只有xtrabackup一种。

3.3.1 配置文件中需配置的传输参数

wsrep_cluster_name ##标识该集群的名字

wsrep_cluster_address=gcomm: ##列出集群中的成员

wsrep_node_address ##当前节点的IP地址

wsrep_provider=/usr/local/mysql/lib/libgalera_smm.so ##指定Galera库的路径和文件名

wsrep_sst_method=xtrabackup-v2 ##传输数据的方法

wrep_sst_auth=sst:zs ##节点的数据库用户的账号密码

3.3.2 集群内存

PXC有一个特别重要模块GCache。他的核心功能就是每个节点缓存当前最新的写集。如果有新节点加入则可以将新数据的增量传递给新节点,而不需使用SST。涉及参数如下:

gcache.size-缓存写集增量信息的大小。默认为128MB,通过wsrep_provider_options参数设置,建议调整为2G~4G

gcache.mem_size-代表Gcache中内存缓存大小,适度调大可以提高整个集群的性能

gcache.page_size-可以理解为如果内存不够(Gcache不足),就直接将写集写入磁盘文件中

3.4PXC 架构的搭建

3.4.1 环境介绍及主备

192.168.56.11-node1 192.168.56.12-node2 192.168.56.13 node3

软件下载:https://www.percona.com/downloads/Percona-XtraDB-Cluster-LATEST/

https://www.percona.com/downloads/Percona-XtraBackup-LATEST/

每个节点均安装配置PXC软件包和xtrabackup软件包,并安装依赖包

yum install perl-IO-Socket-SSL.noarch

yum install perl-DBD-MySQL.x86_64

yum install perl-Time-HirRes

yum install opensll

yum install opensll-devel

yum install socat

3.4.2 解压PXC软件并安装(所有节点均执行)

和MySQL单节点安装配置过程一样

cd /usr/local

tar -xzvf Percona-XtraDB-Cluster-8.0.19-r217-el7-x86_64-bundle.tar

mv Percona-XtraDB-Cluster-8.0.19-r217-el7-x86_64-bundle mysql

chown mysql:mysql -R mysql

mkdir -p /data/mysql

3.4.3 修改配置文件(添加如下内容,其它和MySQL配置文件相同)所有节点均配置

#PXC

default_storage_engine=Innodb

innodb_autoinc_lock_mode=2

wsrep_cluster_name=pxc_zs

wsrep_cluster_address=gcomm://192.168.56.11,192.168.56.12,192.168.56.13

wsrep_node_address=192.168.56.100

wsrep_provider_options="gcache.size=1G"

wsrep_sst_method=xtrabackup-v2

wsrep_sst_auth=sst:zs

3.4.4 第一个节点启动和配置

3.4.4.1 初始化数据

cd /usr/local/mysql/bin

./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --user=mysql --initialize

3.4.4.2 启动第一个节点服务

cd /usr/local/mysql/support-files

cp mysql.server /etc/init.d/mysql

/etc/init.d/mysql bootstrap-pxc

3.4.4.3 创建超管用户和PXC SST传输账号

create user 'zs'@'192.168.56.%' identified by 'zs';

grant all privileges on *.* to 'zs'@'192.168.56.%';

create user 'sst'@'localhost' identified by 'zs';

grant all privileges on *.* to 'sst'@'localhost';

flush privilges;

3.4.5 配置第二节点

初始化数据(同第一个节点)

启动第二节点:

/etc/init.d/mysql start

3.4.6 配置第三节点(和第二节点相同)

四、PXC集群状态监控

show global status like 'wsrep%';

wsrep_cluster_state_uuid:集群中所有的节点值是相同的,如果不同值的节点说明没有连接如集群

wsrep_cluster_size:该值如果和预期的节点数一致,说明所有集群节点以经连接

wsrep_cluster_status:集群组成的状态,如果不为“primary”说明出现分区或脑裂现象

wsrep_local_state:值为4表示正常

(1)joining==表示节点正在加入集群

(2)donor–当前节点是数据奉献者,正在为新加入的节点同步数据

(3)joined–当前节点以经成功加入集群

(4)synced–当前节点与整个集群是同步状态

wsrep_last_committed:最后提交的事务数目

wsrep_ready:值为ON表示当前节点可以正常服务,如果值为OFF该节点可能发生脑裂或网络问题

五、从节点在线转换为PXC节点

5.1 环境介绍

将新节点56.14加入到集群中,新节点以经安装好了PXC的软件,服务已启动

5.2 操作过程

5.2.1 将新节点(node4)成为集群中某个节点(node3)的从节点,搭建主从架构。

https://www.modb.pro/db/29815

5.2.2 关闭node4上的服务

/etc/init.d/mysql stop

将PXC的相关配置参数加入到配置文件中(见3.4.3)

5.2.3 在node3上确认PXC需要同步的位置(position号和Xid)

/usr/local/mysql/bin/mysqlbinlog -v -v mysql-bin.000001|grep Xid

5.2.4 配置grastate.dat文件

cat /data/mysql/grastate.dat

node3的输出结果中uuid是集群的wsrep_cluster_state_uuid。seqno是集群中wsrep_last_committed的值,节点正在运行和非正常关闭状态值都为-1。

scp grastate.dat 192.168.56.14:/data/mysql

修改node4刚拷贝过来的grastate.dat文件中的seqno值设为node3上查询出的Xid,并修改权限

chown mysql:mysql grastate.dat

5.2.5 启动node4节点上的PXC服务

/etc/init.d/mysql start

查看新加入的节点node4的状态

show gloabl status like '%ws%';

mysql Pxc工作原理_浅谈MySQL-PXC架构相关推荐

  1. .net mysql limit 分页原理_浅谈MySQL分页Limit的性能问题

    MySQL的分页查询通常通过limit来实现.limit接收1或2个整数型参数,如果是2个参数,第一个是指定第一个返回记录行的偏移量,第二个是返回记录行的最大数目.初始记录行的偏移量是0.为了与Pos ...

  2. mysql 计划任务消耗_浅谈MySQL event 计划任务

    一.查看event是否开启 show variables like '%sche%'; set global event_scheduler =1; 二. -- 设置时区并设置计划事件调度器开启,也可 ...

  3. mysql分区表的好处_浅谈MySQL分区表优点和限制

    分区是将一个表的数据按照某种方式,逻辑上仍是一个表,也就是所谓的分区表.分区引入了分区键的概念,分区键用于根据某个区间值(或者范围值).特定值列表或者hash函数值执行数据的聚集,让数据根据规则分布在 ...

  4. mysql表空间大小_浅谈mysql中各种表空间(tablespaces)的概念

    mysql中,会涉及到各种表空间的概念,虽然,很多方面这些概念和Oracle有相似性,但也有很多不同的地方,初学者很容易被这些概念弄的晕头转向,从而,混淆这些概念的区别和理解,下面,就简要介绍和说明一 ...

  5. mysql表的类型_浅谈MySQL表类型

    MySQL为我们提供了很多表类型供选择,有MyISAM.ISAM.HEAP.BerkeleyDB.InnoDB,MERGE表类型,萝卜白菜各有所爱是不假,可是真正选择何种表类型还是要看业务需要啊,每一 ...

  6. mysql 添加唯一索引_浅谈Mysql索引

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 我们都知道,数据库索引可以帮助我们更加快速的找出符合的数据,但是如果不使用索引,Mysql则会从第一条开始查询 ...

  7. mysql共享锁使用方法_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景...

    Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |-- ...

  8. 支付宝的数据库是MySQL变种_浅谈MySql的储存引擎(表类型)

    浅谈mysql的存储引擎(表类型) 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库, ...

  9. mysql 用户通配符_浅谈mysql通配符进行模糊查询的实现方法

    在mysql数据库中,当我们需要模糊查询的时候 ,我们会使用到通配符. 首先我们来了解一下2个概念,一个是操作符,一个是通配符. 操作符 like就是SQL语句中的操作符,它的作用是指示在SQL语句后 ...

最新文章

  1. LetCode 70. Climbing Stairs--动态规划-爬梯子--递归等解法
  2. apache 编译安装php mysql_编译安装APACHE+PHP+MYSQL
  3. 【吴恩达机器学习】学习笔记——2.1单变量线性回归算法
  4. 科学与计算matlab单元测试,mooc现代科学运算—MATLAB语言与应用单元测试答案
  5. pdf python 位置_如何使用PDFMiner获取PDF中文本的位置?
  6. java怎么导入图片_iPad Pro插U盘不能导入图片?技术宅教你怎么做
  7. 新浪微博数据网络舆情分析客户端软件
  8. 怎么用计算机算成250,万能计算器
  9. 函数扩展(函数拦截)
  10. 你不可不知的HTML优化技巧
  11. 视觉SLAM十四讲_4-相机模型和非线性优化
  12. JS请求服务器gbk文件乱码问题
  13. 精约而不简单 极速迅雷只为下载而生
  14. Spark入门实战系列--1.Spark及其生态圈简介
  15. Mutual Supervision for Dense Object Detection(ICCV2021)阅读笔记
  16. vue3 图片懒加载的实现
  17. cocos3D 初体验
  18. 大学生“挑战杯”创业计划大赛财务分析估算方法与技巧【转】
  19. 疫情信息管理系统(附源代码及数据库)
  20. 测试开发常问面试题整理-----网络篇

热门文章

  1. 程序员提高阅读代码能力的几个方法
  2. Linux Debian常用下载工具Transmission和qbittorrent
  3. cccccccccccccccccccc
  4. 对于大流量网站的流量优化
  5. APP - APP监控软件,美团 24 小时不间断定位上热搜
  6. Android监听按键锁屏广播
  7. 中台:业务中台、数据中台、技术中台
  8. L1-5判断题(15分)
  9. 常见的五大数据分析模型
  10. 全程软件测试之测试需求分析与计划(1)