mysql8.0使用PXC实现高可用

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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容