zoukankan      html  css  js  c++  java
  • 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同步开始的位置。

  • 相关阅读:
    Vocabulary Recitation 2020/05/06
    java set TreeSet详解
    vue快速入门~必备基础知识(一)下~过滤器
    vue快速入门~必备基础知识(一)上
    vue入门(二)基于前面的基础的一个小Demo
    Annotation注释详解~
    泛型~详解~
    Collections工具类详解
    TreeMap实现类和SortMap接口
    Map集合-主要HashMap和Hashtable
  • 原文地址:https://www.cnblogs.com/wonchaofan/p/13500081.html
Copyright © 2011-2022 走看看