1.什么是 PXC
PXC 是一套 MySQL 高可用集群解决方案,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。PXC 最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证 MySQL 集群的数据一致性;
2.PXC 的特点
-  
完全兼容 MySQL。
 -  
同步复制,事务要么在所有节点提交或不提交。
 -  
多主复制,可以在任意节点进行写操作。
 -  
在从服务器上并行应用事件,真正意义上的并行复制。
 -  
节点自动配置,数据一致性,不再是异步复制。
 -  
故障切换:因为支持多点写入,所以在出现数据库故障时可以很容易的进行故障切换。
 -  
自动节点克隆:在新增节点或停机维护时,增量数据或基础数据不需要人工手动备份提供,galera cluster 会自动拉取在线节点数据,集群最终会变为一致。
 
3.PXC 的优缺点
优点:
-  
服务高可用。
 -  
数据同步复制(并发复制),几乎无延迟。
 -  
多个可同时读写节点,可实现写扩展,不过最好事先进行分库分表,让各个节点分别写不同的表或者库,避免让 galera 解决数据冲突。
 -  
新节点可以自动部署,部署操作简单。
 -  
数据严格一致性,尤其适合电商类应用。
 -  
完全兼容 MySQL。
 
缺点:
-  
复制只支持InnoDB 引擎,其他存储引擎的更改不复制。
 -  
写入效率取决于节点中最弱的一台,因为 PXC 集群采用的是强一致性原则,一个更改操作在所有节点都成功才算执行成功。
 -  
所有表都要有主键。
 -  
不支持 LOCK TABLE 等显式锁操作。
 -  
锁冲突、死锁问题相对更多。
 

4.PXC 与 Replication 的区别
| Replication | PXC | 
|---|---|
| 数据同步是单向的,master 负责写,然后异步复制给 slave;如果 slave 写入数据,不会复制给 master | 数据同步时双向的,任何一个 mysql 节点写入数据,都会同步到集群中其它的节点 | 
| 异步复制,从和主无法保证数据的一致性 | 同步复制,事务在所有集群节点要么同时提交,要么同时不提交 | 
5.PXC 常用端口
-  
3306:数据库对外服务的端口号。
 -  
4444:请求 SST 的端口。
 -  
4567:组成员之间进行沟通的一个端口号。
 -  
4568:用于传输 IST。
 
SST(State Snapshot Transfer): 全量传输
IST(Incremental state Transfer):增量传输
6.搭建 PXC 集群
Percona XtraDB Cluster (简称 PXC)集群是基于 Galera 2.x library,事务型应用下的通用的多主同步复制插件,主要用于解决强一致性问题,使得各个节点之间的数据保持实时同步以及实现多节点同时读写。提高了数据库的可靠性,也可以实现读写分离,是 MySQL 关系型数据库中大家公认的集群优选方案之一。
实验准备:
三台服务器,本文使用pxc集群基于redhat
| IP | 端口 | 角色 | 
| 192.168.183.51 | 3306 | pxc1 | 
| 192.168.183.52 | 3306 | pxc2 | 
| 192.168.183.53 | 3306 | pxc3 | 
配置hosts解析:
vim /etc/hosts
192.168.183.51 pxc1
192.168.183.52 pxc2
192.168.183.53 pxc3 
禁用mysql模块:
RHEL 8和其他EL8系统默认启用MySQL模块。该模块隐藏了Percona提供的软件包,必须禁用该模块才能使这些软件包可见。以下命令禁用该模块:
yum module disable mysql 
下载 PXC 安装包:
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
percona-release setup pxc-80
yum install percona-xtradb-cluster 
之后还是对 Percona Server 数据库的初始化:
-  
初始化数据库
 
应为使用的是8.0版本,部分配置需要在初始化数据库前进行配置,如忽略表名大小写等
vim /etc/my.cnf 
修改下面方框内四处

启动 mysql,修改密码:
systemctl start mysqld
grep -i password /var/log/mysqld.log 
mysql -uroot -p
mysql> alter user root@localhost identified by 'MySQL@123';
Query OK, 0 rows affected (0.01 sec) 
将引导服务mysql目录下的*.pem拷贝给其他服务器:
[root@pxc1 ~]# scp /var/lib/mysql/*.pem pxc2:/var/lib/mysql/
[root@pxc1 ~]# scp /var/lib/mysql/*.pem pxc3:/var/lib/mysql/ 
第一个节点需要以引导模式启动:
[root@pxc1 ~]# systemctl start mysql@bootstrap.service 
在第二和第三个节点上正常启动数据库服务
[root@pxc2 ~]# chown -R mysql.mysql /var/lib/mysql/
[root@pxc2 ~]# systemctl start mysql
[root@pxc3 ~]# chown -R mysql.mysql /var/lib/mysql/
[root@pxc3 ~]# systemctl start mysql 
查询集群信息:
mysql> show status like 'wsrep%';
+----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name                    | Value                                                                                                                                          |
+----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| wsrep_local_state_uuid           | 172d2ce5-e883-11ef-a273-f654ac2b1c02                                                                                                           |
| wsrep_protocol_version           | 11                                                                                                                                             |
| wsrep_last_applied               | 4                                                                                                                                              |
| wsrep_last_committed             | 4                                                                                                                                              |
| wsrep_monitor_status (L/A/C)     | [ (8, 8), (4, 4), (4, 4) ]                                                                                                                     |
| wsrep_replicated                 | 1                                                                                                                                              |
| wsrep_replicated_bytes           | 240                                                                                                                                            |
| wsrep_repl_keys                  | 1                                                                                                                                              |
| wsrep_repl_keys_bytes            | 32                                                                                                                                             |
| wsrep_repl_data_bytes            | 141                                                                                                                                            |
| wsrep_repl_other_bytes           | 0                                                                                                                                              |
| wsrep_received                   | 7                                                                                                                                              |
| wsrep_received_bytes             | 782                                                                                                                                            |
| wsrep_local_commits              | 0                                                                                                                                              |
| wsrep_local_cert_failures        | 0                                                                                                                                              |
| wsrep_local_replays              | 0                                                                                                                                              |
| wsrep_local_send_queue           | 0                                                                                                                                              |
| wsrep_local_send_queue_max       | 1                                                                                                                                              |
| wsrep_local_send_queue_min       | 0                                                                                                                                              |
| wsrep_local_send_queue_avg       | 0                                                                                                                                              |
| wsrep_local_recv_queue           | 0                                                                                                                                              |
| wsrep_local_recv_queue_max       | 1                                                                                                                                              |
| wsrep_local_recv_queue_min       | 0                                                                                                                                              |
| wsrep_local_recv_queue_avg       | 0                                                                                                                                              |
| wsrep_local_cached_downto        | 1                                                                                                                                              |
| wsrep_flow_control_paused_ns     | 0                                                                                                                                              |
| wsrep_flow_control_paused        | 0                                                                                                                                              |
| wsrep_flow_control_sent          | 0                                                                                                                                              |
| wsrep_flow_control_recv          | 0                                                                                                                                              |
| wsrep_flow_control_active        | false                                                                                                                                          |
| wsrep_flow_control_requested     | false                                                                                                                                          |
| wsrep_flow_control_interval      | [ 173, 173 ]                                                                                                                                   |
| wsrep_flow_control_interval_low  | 173                                                                                                                                            |
| wsrep_flow_control_interval_high | 173                                                                                                                                            |
| wsrep_flow_control_status        | OFF                                                                                                                                            |
| wsrep_cert_deps_distance         | 1                                                                                                                                              |
| wsrep_apply_oooe                 | 0                                                                                                                                              |
| wsrep_apply_oool                 | 0                                                                                                                                              |
| wsrep_apply_window               | 1                                                                                                                                              |
| wsrep_apply_waits                | 0                                                                                                                                              |
| wsrep_commit_oooe                | 0                                                                                                                                              |
| wsrep_commit_oool                | 0                                                                                                                                              |
| wsrep_commit_window              | 1                                                                                                                                              |
| wsrep_local_state                | 4                                                                                                                                              |
| wsrep_local_state_comment        | Synced                                                                                                                                         |
| wsrep_cert_index_size            | 1                                                                                                                                              |
| wsrep_cert_bucket_count          | 3                                                                                                                                              |
| wsrep_gcache_pool_size           | 2648                                                                                                                                           |
| wsrep_causal_reads               | 0                                                                                                                                              |
| wsrep_cert_interval              | 0                                                                                                                                              |
| wsrep_open_transactions          | 0                                                                                                                                              |
| wsrep_open_connections           | 0                                                                                                                                              |
| wsrep_ist_receive_status         |                                                                                                                                                |
| wsrep_ist_receive_seqno_start    | 0                                                                                                                                              |
| wsrep_ist_receive_seqno_current  | 0                                                                                                                                              |
| wsrep_ist_receive_seqno_end      | 0                                                                                                                                              |
| wsrep_incoming_addresses         | 192.168.183.52:3306,192.168.183.53:3306,192.168.183.51:3306                                                                                    |
| wsrep_cluster_weight             | 3                                                                                                                                              |
| wsrep_desync_count               | 0                                                                                                                                              |
| wsrep_evs_delayed                |                                                                                                                                                |
| wsrep_evs_evict_list             |                                                                                                                                                |
| wsrep_evs_repl_latency           | 0/0/0/0/0                                                                                                                                      |
| wsrep_evs_state                  | OPERATIONAL                                                                                                                                    |
| wsrep_gcomm_uuid                 | 172ac7c0-e883-11ef-a235-d72eb1948065                                                                                                           |
| wsrep_gmcast_segment             | 0                                                                                                                                              |
| wsrep_cluster_capabilities       |                                                                                                                                                |
| wsrep_cluster_conf_id            | 3                                                                                                                                              |
| wsrep_cluster_size               | 3                                                                                                                                              |
| wsrep_cluster_state_uuid         | 172d2ce5-e883-11ef-a273-f654ac2b1c02                                                                                                           |
| wsrep_cluster_status             | Primary                                                                                                                                        |
| wsrep_connected                  | ON                                                                                                                                             |
| wsrep_local_bf_aborts            | 0                                                                                                                                              |
| wsrep_local_index                | 2                                                                                                                                              |
| wsrep_provider_capabilities      | :MULTI_MASTER:CERTIFICATION:PARALLEL_APPLYING:TRX_REPLAY:ISOLATION:PAUSE:CAUSAL_READS:INCREMENTAL_WRITESET:UNORDERED:PREORDERED:STREAMING:NBO: |
| wsrep_provider_name              | Galera                                                                                                                                         |
| wsrep_provider_vendor            | Codership Oy <info@codership.com> (modified by Percona <https://percona.com/>)                                                                 |
| wsrep_provider_version           | 4.20(6d8c05a)                                                                                                                                  |
| wsrep_ready                      | ON                                                                                                                                             |
| wsrep_thread_count               | 9                                                                                                                                              |
+----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
79 rows in set (0.00 sec)
 
查看 PXC 集群状态信息,在任意一个节点执行以下命令:

验证 创表查询:


节点下线:
PXC 集群允许动态下线节点,但需要注意的是节点的启动命令和关闭命令必须一致,如以引导模式启动的第一个节点必须
以引导模式来进行关闭:
systemctl stop mysql@bootstrap.service 
其他节点则可以按照正常方式关闭:
systemctl stop mysql 
                


















