PXC

1.1 PXC 简介

PXC 是一套 MySQL 高可用集群解决方案,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。PXC 最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证 MySQL 集群的数据一致性;

1.2 PXC特性和优点

  • 完全兼容 MySQL。
  • 同步复制,事务要么在所有节点提交或不提交。
  • 多主复制,可以在任意节点进行写操作。
  • 在从服务器上并行应用事件,真正意义上的并行复制。
  • 节点自动配置,数据一致性,不再是异步复制。
  • 故障切换:因为支持多点写入,所以在出现数据库故障时可以很容易的进行故障切换。
  • 自动节点克隆:在新增节点或停机维护时,增量数据或基础数据不需要人工手动备份提供,galera cluster会自动拉取在线节点数据,集群最终会变为一致;

PXC最大的优势:强一致性、无同步延迟

1.3 PXC的局限和劣势

  • 复制只支持InnoDB 引擎,其他存储引擎的更改不复制
  • 写入效率取决于节点中最慢的一台

1.4 PXC与Replication的区别

ReplicationPXC
数据同步是单向的,master负责写,然后异步复制给slave;如果slave写入数据,不会复制给master。 数据同步时双向的,任何一个mysql节点写入数据,都会同步到集群中其它的节点。
异步复制,从和主无法保证数据的一致性 同步复制,事务在所有集群节点要么同时提交,要么同时不提交

1.5 PXC 常用端口

  • 3306:数据库对外服务的端口号。
  • 4444:请求SST的端口。
  • 4567:组成员之间进行沟通的一个端口号
  • 4568:用于传输IST。

名词解释:

  • SST(State Snapshot Transfer): 全量传输
  • IST(Incremental state Transfer):增量传输

 

   从图中可以看出PXC的操作流程。首先客户端先发起一个事务,该事务先在本地执行,执行完成之后就要发起对事务的提交操作了。在提交之前需要将产生的复制写集广播出去,然后获取到一个全局的事务ID号,一并传送到另一节点上面。通过验证合并数据之后,发现没有冲突数据,执行apply_cb和commit_cb动作,否则就需要取消(discard)此次事务的操作。而当前server节点通过验证之后,执行提交操作,并返回OK,如果验证没通过,则执行回滚。当然在生产中至少要有三个节点的集群环境,如果其中有一个节点没有验证通过,出现数据冲突,那么此时采取的方式就是将出现不一致的节点踢出集群环境,而且它自己会执行shutdown命令,自动关机。

  首先要规范集群中节点的数量,整个集群中节点数控制在最少3个、最大8个的范围内。最少3个节点是为了防止出现脑裂现象,因为只有在啊两个节点下才会出现此现象。脑裂现象的标志就是输入任何命令,返回结果都是unknow command.节点在集群中,会因新节点的假如或者故障,同步失效等而发生状态的切换。

  节点状态变化阶段:

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

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

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

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

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

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

注:doner节点就是数据的贡献者,如果一个新节点加入集群,此时又需要大量数据的SST传输,就有可能因此而拖垮整个集群的性能。所以在生产环境中,如果数据量小,还可以使用SST全量传输,但如果数据量很大就不建议使用这种方式了。可以考虑先建立主从关系,再加入集群。

 

搭建PXC集群过程中,需要在PXC配置文件中设置好如下参数:

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    ##传输数据的方法,现在版本中都使用xtrabackup V2方式

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

  在PXC中还有一个特别重要的模块就是GCache。他的核心功能就是每个节点缓存当前最新的写集。如果有新节点加入进来,就可以把新数据的增量传递给新节点,而不需要再使用SST方式了。这样可以让几点更快的加入集群中。涉及如下参数:

  gcache.size 代表用来缓存写集增量信息的大小。它的默认大小是128MB,通过wsrep_provider_options 参数设置。建议调整为2GB~4GB范围,足够的空间便于缓存更多的增量信息。

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

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

 

安装之前的注意事项:

  首先要保证三台机器的防火墙iptables、selinux都要关闭,三台机器的server-id不能一样。

PXC集群下载地址:

https://www.percona.com/downloads/Percona-XtraDB-Cluster-LATEST/

 

其安装方式类似于mysql,然后就是配置文件:

  default_storage_engine=Innodb

  innodb_autoinc_lock_mode=2

  wsrep_cluster_name=pxc_wcf    --------集群的名字

  wsrep_cluster_address=gcomm://192.168.2.100,192.168.2.101,192.168.2.102(集群中节点的IP)

  wsrep_cluster_address=192.168.2.100  ------当前几区的IP地址

  wsrep_provider=/usr/local/mysql/lib/libgalera_smm.so

  wsrep_provider_options="gcache.size=1G"

  wsrep_sst_method=xtrabackup-v2 (SST传输方法)

  wsrep_sst_auth=sst:zs (账号权限)

 

初始化 :/usr/loca/mysql/bin/mysql --defaults-file=/etc/my.cnf  --basedir=/usr/local/mysql  --datadir=/data/mysql/ --user=mysql   --initialize

启动第一个服务节点:

cd /usr/local/mysql/support-files

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

/etc/init.d/mysql bootstrap-pxc

然后就是创建超管用户,创建PXC SST用户:

 

注:节点2和节点3的PXC启动方式不是/etc/init.d/mysql   bootstrap-pxc,而换成了/etc/init.d/mysql start 方式。只有节点1才使用/etc/init.d/mysql  bootstrap-pxc方式启动。

PXC集群状态的监控

使用show global status like 'wsrep%'命令来查看集群中的参数状态。下面列出几个重要的参数,便于诊断问题。

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

  wsrep_cluster_size:如果这个值跟预期的节点数一致,则所有的集群节点已经连接。

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

  wsrep_local_state:值为4表示正常。节点状态有如下4个值。

    joining——表示节点正在加入集群;

    donor——当前节点是数据奉献者,正在为新加入的节点同步数据;

    joined——当前节点已经成功加入集群;

    synced——表示当前节点与整个集群是同步状态。

wsrep_last_committed:最后提交的事务数目。

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

 

从复制节点在线转换为PXC节点


先把node3的配置成node2的从库

待主从一致后记录从库的binlog位置

停掉从库

然后把PXC的配置写进node3的/my.cnf配置文件。。

然后用mysqlbinlog去查看position位置对应的XID  

 

 

 接下来将node2上的grastate.dat复制到node3对应的目录下。

命令如下:

scp grastate.dat 192.168.2.103:/data/mysql/

最后在node3节点上设置同步开始位置:

cd  /data/mysql

编辑grastate.dat文件,修改seqno的值,将seqno:-1改成刚才获取的position对应的Xid的值,这个就是PXC同步开始的位置。

 

posted @   wongchaofan  阅读(1188)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示