mysql-PXC实现高可用

2024-09-06 15:12
文章标签 实现 mysql 可用 database pxc

本文主要是介绍mysql-PXC实现高可用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

mysql8.0使用PXC实现高可用

1.什么是 PXC

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

2.PXC 的特点

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

3.PXC 的优缺点

优点

  • 服务高可用。
  • 数据同步复制(并发复制),几乎无延迟。
  • 多个可同时读写节点,可实现写扩展,不过最好事先进行分库分表,让各个节点分别写不同的表或者库,避免让 galera 解决数据冲突。
  • 新节点可以自动部署,部署操作简单。
  • 数据严格一致性,尤其适合电商类应用。
  • 完全兼容 MySQL。

缺点

  • 复制只支持InnoDB 引擎,其他存储引擎的更改不复制。
  • 写入效率取决于节点中最弱的一台,因为 PXC 集群采用的是强一致性原则,一个更改操作在所有节点都成功才算执行成功。
  • 所有表都要有主键。
  • 不支持 LOCK TABLE 等显式锁操作
  • 锁冲突、死锁问题相对更多。

PXC 集群节点越多,数据同步的速度就越慢。
在这里插入图片描述

4.PXC 与 Replication 的区别

ReplicationPXC
数据同步是单向的,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集群基于CentOS7.x:

IP端口角色
192.168.150.113306pxc
192.168.150.123306pxc2
192.168.150.133306pxc3

配置hosts解析

# cat >> /etc/hosts << EOF
192.168.150.11 pxc1
192.168.150.12 pxc2
192.168.150.13 pxc3
EOF
  • 删除 MariaDB 程序包
# yum -y remove mari*
  • 下载 PXC 安装包

安装 PXC 里面集成了 Percona Server 数据库,所以不需要安装 Percona Server 数据库。

Software Downloads - Percona

在这里插入图片描述

下载 qpress-11-1.el7.x86_64.rpm

https://repo.percona.com/yum/release/7/RPMS/x86_64/qpress-11-1.el7.x86_64.rpm

最后上传到 centos 服务器中。

[root@pxc1 ~]# ll *.rpm
-rw-rw-r-- 1 root root     28360 Oct 19 20:21 percona-xtradb-cluster-8.0.34-26.1.el7.x86_64.rpm
-rw-rw-r-- 1 root root  15169548 Oct 19 20:21 percona-xtradb-cluster-client-8.0.34-26.1.el7.x86_64.rpm
-rw-rw-r-- 1 root root 509619476 Oct 19 20:21 percona-xtradb-cluster-debuginfo-8.0.34-26.1.el7.x86_64.rpm
-rw-rw-r-- 1 root root   1912512 Oct 19 20:21 percona-xtradb-cluster-devel-8.0.34-26.1.el7.x86_64.rpm
-rw-rw-r-- 1 root root     27840 Oct 19 20:21 percona-xtradb-cluster-full-8.0.34-26.1.el7.x86_64.rpm
-rw-rw-r-- 1 root root    754084 Oct 19 20:21 percona-xtradb-cluster-garbd-8.0.34-26.1.el7.x86_64.rpm
-rw-rw-r-- 1 root root   2292512 Oct 19 20:21 percona-xtradb-cluster-icu-data-files-8.0.34-26.1.el7.x86_64.rpm
-rw-rw-r-- 1 root root   5243092 Oct 19 20:21 percona-xtradb-cluster-mysql-router-8.0.34-26.1.el7.x86_64.rpm
-rw-rw-r-- 1 root root 151051960 Oct 19 20:21 percona-xtradb-cluster-server-8.0.34-26.1.el7.x86_64.rpm
-rw-rw-r-- 1 root root   1535736 Oct 19 20:21 percona-xtradb-cluster-shared-8.0.34-26.1.el7.x86_64.rpm
-rw-rw-r-- 1 root root   1179040 Oct 19 20:21 percona-xtradb-cluster-shared-compat-8.0.34-26.1.el7.x86_64.rpm
-rw-rw-r-- 1 root root 399166472 Oct 19 20:21 percona-xtradb-cluster-test-8.0.34-26.1.el7.x86_64.rpm
-rw-r--r-- 1 root root     32624 Dec  6 14:50 qpress-11-1.el7.x86_64.rpm

执行下面命令进行安装

# yum localinstall *.rpm -y

之后还是对 Percona Server 数据库的初始化:

  • 初始化数据库

应为使用的是8.0版本,部分配置需要在初始化数据库前进行配置,如忽略表名大小写等

[root@pxc1 ~]# vim /etc/my.cnf
...
[mysqld]
server-id=11 #每台mysql的id不能相同
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# Binary log expiration period is 604800 seconds, which equals 7 days
binlog_expire_logs_seconds=604800 #二进制日志过期时间为604800秒,等于7天注意:pxc2和pxc3只需要server-id设置为12和13即可。

然后我们启动 mysql,修改密码。

# systemctl start mysqld
# tmp_pass=$(awk '/temporary password/ {print $NF}' /var/log/mysqld.log)
# mysql -uroot -p${tmp_pass}
mysql> alter user root@localhost identified by '123456';
Query OK, 0 rows affected (0.01 sec)# 授权用户
# mysql -uroot -p123456
mysql> CREATE USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY 'Abc_123456';
Query OK, 0 rows affected (0.00 sec)mysql> GRANT all privileges ON *.* TO 'admin'@'%';
Query OK, 0 rows affected (0.00 sec)
  • 创建集群
# 停止所有节点的mysqld服务
# systemctl stop mysqld[root@pxc1 ~]# vim /etc/my.cnf
...
######## wsrep ###############
# Path to Galera library
wsrep_provider=/usr/lib64/galera4/libgalera_smm.so# Cluster connection URL contains IPs of nodes
#If no IP is found, this implies that a new cluster needs to be created,
#in order to do that you need to bootstrap this node
wsrep_cluster_address=gcomm://192.168.150.11,192.168.150.12,192.168.150.13 # PXC集群的所有ip# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW# Slave thread to use
wsrep_slave_threads=8wsrep_log_conflicts# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2 # 主键自增长不锁表# Node IP address
wsrep_node_address=192.168.150.11 # 当前节点的IP
# Cluster name
wsrep_cluster_name=pxc-cluster  # PXC集群的名称#If wsrep_node_name is not specified,  then system hostname will be used
wsrep_node_name=pxc1 # 当前节点的名称#pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER
pxc_strict_mode=ENFORCING# SST method
wsrep_sst_method=xtrabackup-v2 # 同步方法注意:pxc2和pxc3参照,修改集群节点ip和名称 wsrep_node_name,wsrep_node_address

将引导服务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 mysqld
[root@pxc3 ~]# chown -R mysql.mysql /var/lib/mysql/
[root@pxc3 ~]# systemctl start mysqld

查询集群信息

mysql> show status like 'wsrep%';
+----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name                    | Value                                                                                                                                          |
+----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| wsrep_local_state_uuid           | 47f68dce-940c-11ee-85d5-c29e7cbcc6e4                                                                                                           |
| wsrep_protocol_version           | 10                                                                                                                                             |
| wsrep_last_applied               | 5                                                                                                                                              |
| wsrep_last_committed             | 5                                                                                                                                              |
| wsrep_monitor_status (L/A/C)     | [ (5, 5), (5, 5), (5, 5) ]                                                                                                                     |
| wsrep_replicated                 | 0                                                                                                                                              |
| wsrep_replicated_bytes           | 0                                                                                                                                              |
| wsrep_repl_keys                  | 0                                                                                                                                              |
| wsrep_repl_keys_bytes            | 0                                                                                                                                              |
| wsrep_repl_data_bytes            | 0                                                                                                                                              |
| wsrep_repl_other_bytes           | 0                                                                                                                                              |
| wsrep_received                   | 4                                                                                                                                              |
| wsrep_received_bytes             | 504                                                                                                                                            |
| 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        | 4                                                                                                                                              |
| 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         | 0                                                                                                                                              |
| wsrep_apply_oooe                 | 0                                                                                                                                              |
| wsrep_apply_oool                 | 0                                                                                                                                              |
| wsrep_apply_window               | 0                                                                                                                                              |
| wsrep_apply_waits                | 0                                                                                                                                              |
| wsrep_commit_oooe                | 0                                                                                                                                              |
| wsrep_commit_oool                | 0                                                                                                                                              |
| wsrep_commit_window              | 0                                                                                                                                              |
| wsrep_local_state                | 4                                                                                                                                              |
| wsrep_local_state_comment        | Synced                                                                                                                                         |
| wsrep_cert_index_size            | 0                                                                                                                                              |
| wsrep_cert_bucket_count          | 1                                                                                                                                              |
| wsrep_gcache_pool_size           | 3448                                                                                                                                           |
| 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.150.13:3306,192.168.150.11:3306,192.168.150.12: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                 | df5aed67-940d-11ee-bc8f-8e8bab9eea9d                                                                                                           |
| wsrep_gmcast_segment             | 0                                                                                                                                              |
| wsrep_cluster_capabilities       |                                                                                                                                                |
| wsrep_cluster_conf_id            | 3                                                                                                                                              |
| wsrep_cluster_size               | 3                                                                                                                                              |
| wsrep_cluster_state_uuid         | 47f68dce-940c-11ee-85d5-c29e7cbcc6e4                                                                                                           |
| 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.16(841837f)                                                                                                                                  |
| wsrep_ready                      | ON                                                                                                                                             |
| wsrep_thread_count               | 9                                                                                                                                              |
+----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
79 rows in set (0.00 sec)

查看 PXC 集群状态信息,在任意一个节点执行以下命令:

[root@pxc1 ~]# mysql -uroot -p123456 -e "show status like 'wsrep_cluster%';"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------------+--------------------------------------+
| Variable_name              | Value                                |
+----------------------------+--------------------------------------+
| wsrep_cluster_weight       | 3                                    |
| wsrep_cluster_capabilities |                                      |
| wsrep_cluster_conf_id      | 3                                    |
| wsrep_cluster_size         | 3                                    |
| wsrep_cluster_state_uuid   | 47f68dce-940c-11ee-85d5-c29e7cbcc6e4 |
| wsrep_cluster_status       | Primary                              |
+----------------------------+--------------------------------------+
  • 节点下线

PXC 集群允许动态下线节点,但需要注意的是节点的启动命令和关闭命令必须一致,如以引导模式启动的第一个节点必须

以引导模式来进行关闭:

# systemctl stop mysql@bootstrap.service

其他节点则可以按照正常方式关闭:

# systemctl stop mysqld

这篇关于mysql-PXC实现高可用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142363

相关文章

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

MySQL 多表连接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)

《MySQL多表连接操作方法(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLOUTERJOIN)》多表连接是一种将两个或多个表中的数据组合在一起的SQL操作,通过连接,... 目录一、 什么是多表连接?二、 mysql 支持的连接类型三、 多表连接的语法四、实战示例 数据准备五、连接的性

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

MySQL中的分组和多表连接详解

《MySQL中的分组和多表连接详解》:本文主要介绍MySQL中的分组和多表连接的相关操作,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录mysql中的分组和多表连接一、MySQL的分组(group javascriptby )二、多表连接(表连接会产生大量的数据垃圾)MySQL中的

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获