mysql8.0使用PXC实现高可用

2023年 7月 25日 93.5k 0

MySQL 8.0使用PXC实现高可用

1. 概述

官方文档: Percona Xtradb Cluster 8.0 Documentation

PXC(Percona XtraDB Cluster)是一个开源的高可用性、高性能的 MySQL 集群解决方案。它由 Percona 公司开发,基于 MySQL 和 Percona Server,结合了 Galera Cluster 的同步复制技术。PXC 提供了多主复制(Multi-Master Replication)和自动节点故障转移功能,可以确保数据库集群的高可用性和数据一致性。

PXC 的主要特性包括:

  • 同步复制:PXC 使用 Galera Cluster 技术,确保集群中的所有节点在写操作后保持数据一致性。这消除了传统 MySQL 主从复制中可能遇到的延迟和数据不一致的问题。

  • 多主复制:在 PXC 集群中,每个节点都可以作为主节点,任何节点都可以接受写入操作。这有助于提高集群的负载均衡和性能。

  • 自动故障转移:当 PXC 集群中的一个节点发生故障时,集群会自动将流量转移至其他可用节点,确保数据库的高可用性。

  • 在线模式更改:PXC 支持在线添加和删除集群节点,无需停机维护。这可以降低运维成本并减少业务影响。

无需keepalived就能实现高可用

2. 环境说明

序号 操作系统 IP 主机名 备注
1 Rockylinux 9.2 192.168.3.51 mysql-01.tiga.cc mysql-01
2 Rockylinux 9.2 192.168.3.52 mysql-02.tiga.cc mysql-02
3 Rockylinux 9.2 192.168.3.53 web-01.tiga.cc 仲裁节点

为了节省成本,MySQL使用2个节点,再找一台机器作为仲裁节点。

3. 部署PXC

3.1 使用yum安装PXC

两个MySQL节点

yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
percona-release setup pxc-80

yum install -y percona-xtradb-cluster

不用再装MySQL了,如果已经装了MySQL,需要先卸载;

3.2 修改root密码

systemctl start mysql
mysql_passwd=`grep 'temporary password' /var/log/mysqld.log|awk '{print $NF}'`

mysql -uroot -p"${mysql_passwd}"

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'rootPass';
mysql> exit

systemctl stop mysql

3.3 编辑配置文件/etc/my.cnf

节点1

[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
server-id=1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
binlog_expire_logs_seconds=604800
wsrep_provider=/usr/lib64/galera4/libgalera_smm.so
# 指定集群IP
wsrep_cluster_address=gcomm://192.168.3.51,192.168.3.52  
# Galera只支持ROW模式
binlog_format=ROW
wsrep_slave_threads=8
wsrep_log_conflicts
# Galera 只支持 InnoDB 的交错( 2 )锁定模式。
innodb_autoinc_lock_mode=2
# 本节点的IP地址
wsrep_node_address=192.168.3.51
# 集群名称
wsrep_cluster_name=pxc-cluster
# 本节点名称
wsrep_node_name=pxc-cluster-node-1
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
# 关闭ssl
pxc-encrypt-cluster-traffic=OFF

节点2

# 除了下面这两个参数,其他参数所有节点必须一模一样
wsrep_node_address=192.168.3.52
wsrep_node_name=pxc-cluster-node-2

3.4 启动第一个节点

# 需要注意,这样启动的mysql,关闭时也要用systemctl stop mysql@bootstrap.service;而不能用systemctl stop mysql
systemctl start mysql@bootstrap.service

确保集群已初始化,登录mysql执行命令

mysql -uroot -p -e "show status like 'wsrep%';"

输出显示 wsrep_cluster_size1wsrep_local_state_commentSynced状态;

+----------------------------+--------------------------------------+
| Variable_name              | Value                                |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid     | c2883338-834d-11e2-0800-03c9c68e41ec |
| ...                        | ...                                  |
| wsrep_local_state          | 4                                    |
| wsrep_local_state_comment  | Synced                               |
| ...                        | ...                                  |
| wsrep_cluster_size         | 1                                    |
| wsrep_cluster_status       | Primary                              |
| wsrep_connected            | ON                                   |
| ...                        | ...                                  |
| wsrep_ready                | ON                                   |
+----------------------------+--------------------------------------+
40 rows in set (0.01 sec)

3.5 向集群添加节点

启动第2个节点

systemctl start mysql

检查第二个节点的状态

mysql -uroot -p -e "show status like 'wsrep%';"

输出

+----------------------------+--------------------------------------+
| Variable_name              | Value                                |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid     | c2883338-834d-11e2-0800-03c9c68e41ec |
| ...                        | ...                                  |
| wsrep_local_state          | 4                                    |
| wsrep_local_state_comment  | Synced                               |
| ...                        | ...                                  |
| wsrep_cluster_size         | 2                                    |
| wsrep_cluster_status       | Primary                              |
| wsrep_connected            | ON                                   |
| ...                        | ...                                  |
| wsrep_ready                | ON                                   |
+----------------------------+--------------------------------------+
40 rows in set (0.01 sec)

4. 验证集群同步状态

4.1 登录mysql-01创建数据库

mysql -uroot -p'rootPass' -e "CREATE DATABASE percona;"

4.2 登录mysql-02查看数据库

mysql -uroot -p'rootPass' -e "SHOW DATABASES;"

输出

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| percona            |
| performance_schema |
| sys                |
+--------------------+

4.3 登录mysql-01创建表

mysql -uroot -p'rootPass' -e "CREATE TABLE percona.example (node_id INT PRIMARY KEY, node_name VARCHAR(30));"

4.4 登录mysql-02插入数据

mysql -uroot -p'rootPass' -e "INSERT INTO percona.example VALUES (1, 'percona1');"

4.5 在两台mysql分别执行语句查询数据

mysql -uroot -p'rootPass' -e "SELECT * FROM percona.example;"

输出

+---------+-----------+
| node_id | node_name |
+---------+-----------+
|       1 | percona1  |
+---------+-----------+

5. 添加仲裁节点

如果集群中剩余的节点数量为偶数,则仲裁器很重要。仲裁器将节点数保持为奇数,避免了裂脑情况。

Galera 仲裁器是 Percona XtraDB 集群的轻量级成员。该成员可以投票但不进行任何复制,并且不包括在流量控制计算中。 Galera Arbitrator 是一个名为 garbd 的独立守护进程。您可以从集群中单独启动此守护程序,并将此守护程序作为服务或从 shell 运行。

5.1 安装 Galera Arbitrator

仲裁节点

yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
percona-release setup pxc-80

yum install -y percona-xtradb-cluster-garbd

5.2 编辑garbd配置文件

编辑文件/etc/sysconfig/garb

GALERA_NODES="192.168.3.51:4567,192.168.3.52:4567"
GALERA_GROUP="pxc-cluster"
LOG_FILE="/var/log/garbd/garbd.log"

注意,无关的内容要全部删除掉,不要保留注释,否则会报错: garb-systemd[2910]: ERROR! Garbd config /etc/sysconfig/garb is not configured yet

5.3 启动garbd

mkdir -p /var/log/garbd

systemctl start garb
# garbd --group=pxc-cluster --address="gcomm://192.168.3.51:4567, 192.168.3.52:4567"

查看garb状态

systemctl status garb

输出

● garb.service - Galera Arbitrator Daemon
     Loaded: loaded (/usr/lib/systemd/system/garb.service; disabled; preset: disabled)
     Active: active (running) since Tue 2023-06-06 20:57:35 CST; 12min ago
       Docs: man:garbd(8)
             https://galeracluster.com/library/documentation/arbitrator.html
   Main PID: 2965 (garb-systemd)
      Tasks: 4 (limit: 100468)
     Memory: 4.6M
        CPU: 1.452s
     CGroup: /system.slice/garb.service
             ├─2965 /usr/bin/bash -ue /usr/bin/garb-systemd start
             └─2970 /usr/bin/garbd -a gcomm://192.168.3.51:4567,192.168.3.52:4567 -g pxc-cluster -l /var/log/g

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论