本页目录

  • 准备工作
  • 配置 Hosts 文件与防火墙
  • 安装 Percona XtraDB Cluster
  • 停止 Percona XtraDB Cluster 服务
  • 复制 SSL/TLS 证书
  • 在第一个节点上初始化 Percona XtraDB Cluster
  • 将 Node2 和 Node3 添加到集群 添加节点 pxc02 添加节点 pxc03
  • 测试复制
  • 结论
  • 添加节点 pxc02
  • 添加节点 pxc03

Percona XtraDB Cluster 是面向 MySQL 的完全开源的数据库集群解决方案。它能帮助你构建一个健壮、高可用的 MySQL 服务器部署,并提供高性能。Percona XtraDB Cluster 的最新版本为 8.0,与 MySQL Server Community Edition 8.0 完全兼容。

Percona XtraDB Cluster 提供同步复制、多源复制、自动节点供应、自动 SSL 加密配置以及优化性能等特性。

Percona XtraDB Cluster 可确保数据库服务器的高可用性,提供线性可扩展性,并避免停机与数据丢失。

在本教程中,你将通过 Percona XtraDB Cluster(PXC)在 Debian 11 服务器上安装并搭建 MySQL 集群。你需要在多台 Debian 服务器上安装 Percona XtraDB Cluster(一个开源的 MySQL 集群解决方案),然后搭建 MySQL 集群以在多个 MySQL 服务器之间启用复制。

准备工作

完成本教程需要两台或更多运行 Debian 11 的服务器。同时,你在所有服务器上都必须拥有一个具备 sudo/root 管理员权限的非 root 用户。

本示例使用了三台 Debian 11 服务器,详情如下:

Hostname       IP Address
--------------------------
pxc01       192.168.5.15
pxc02       192.168.5.16
pxc03       192.168.5.17

当所有服务器准备就绪后,你就可以开始安装 Percona XtraDB Cluster 了。

配置 Hosts 文件与防火墙

首先,你必须在每台服务器上配置 /etc/hosts 文件,确保每个主机名都能解析到正确的 IP 地址,然后配置防火墙以开放 Percona XtraDB Cluster 将要使用的一些端口。这些操作需要在所有服务器上执行。

下面是你必须在防火墙上开放的 Percona XtraDB Cluster 端口详情。

Ports   Used for
---------------------------
3306    MySQL client connection and SST (State Snapshot Transfer)
4444    SST via Percona XtraBackup
4567    write-set replication traffic (over TCP) and multicast replication (over TCP and UDP)
4568    IST (Incremental State Transfer)

首先,使用以下 nano 编辑器命令打开配置文件 '/etc/hosts'。

sudo nano /etc/hosts

将以下行添加到文件中,并务必根据你的环境修改 IP 地址和主机名的具体信息。

192.168.5.15  pxc01
192.168.5.16  pxc02
192.168.5.17  pxc03

完成后保存并退出文件。

现在执行以下 'apt install' 命令安装 ufw 防火墙软件包。出现提示时,输入 y 确认并按 ENTER 继续。

sudo apt install ufw

在 Debian 11 上安装并配置 Percona XtraDB 集群

ufw 安装完成后,执行以下 ufw 命令添加 OpenSSH 服务。这将确保你不会被锁在服务器之外。如果你使用了自定义的 SSH 端口,只需将 'OpenSSH' 参数替换为你的 SSH 端口即可。

sudo ufw allow OpenSSH

接下来,执行以下 ufw 命令开放 Percona XtraDB Cluster 将使用的一些端口。请务必根据你当前的环境修改内网 IP 地址的子网。

sudo ufw allow from 192.168.5.1/24 proto tcp to any port 3306
sudo ufw allow from 192.168.5.1/24 proto tcp to any port 4444
sudo ufw allow from 192.168.5.1/24 proto tcp to any port 4567
sudo ufw allow from 192.168.5.1/24 proto udp to any port 4567
sudo ufw allow from 192.168.5.1/24 proto tcp to any port 4568

在 Debian 11 上安装并配置 Percona XtraDB 集群

之后,执行 'ufw enable' 命令运行并启用 ufw 防火墙。出现提示时,输入 y 确认并按 ENTER 继续。出现 'Firewall is active and enabled on system startup' 输出表示 ufw 防火墙正在运行,并将在系统启动时自动启动。

sudo ufw enable

最后,使用以下命令验证 ufw 防火墙状态。

sudo ufw status

你应该会看到类似以下的输出。

在 Debian 11 上安装并配置 Percona XtraDB 集群

安装 Percona XtraDB Cluster

在本节中,你将添加并配置适用于 Debian 系发行版的 Percona XtraDB 仓库。然后,你将在所有服务器上安装 Percona XtraDB。

此外,在安装过程中,系统会提示你设置 MySQL root 密码,并配置 Percona XtraDB Cluster 的默认认证插件。最后,你将通过已配置的 MySQL root 用户和密码登录 MySQL shell 来验证 Percona XtraDB Cluster 的安装。

首先,执行以下 apt 命令安装一些基础依赖。出现提示时输入 y 并按 ENTER 继续。

sudo apt install wget gnupg2 lsb-release curl -y

在 Debian 11 上安装并配置 Percona XtraDB 集群

接下来,通过以下 wget 命令下载 Percona XtraDB 仓库软件包。下载完成后,使用下面的 'dpkg -i' 命令进行安装。

wget -q https://repo.percona.com/apt/percona-release_latest.generic_all.deb
sudo dpkg -i percona-release_latest.generic_all.deb

在 Debian 11 上安装并配置 Percona XtraDB 集群

现在更新并刷新你的 Debian 软件包索引,然后运行 'percona-release' 命令来配置 Percona XtraDB Cluster 仓库。在本示例中,你将启用 Percona XtraDB Cluster 8.0 软件包,它等同于 MySQL server 8.0。

sudo apt update
sudo percona-release setup pxc80

更新仓库。

在 Debian 11 上安装并配置 Percona XtraDB 集群

启用 Percona XtraDB Cluster 8.0 仓库。

在 Debian 11 上安装并配置 Percona XtraDB 集群

仓库启用后,执行 'apt install' 命令在你的系统中安装 'percona-xtradb-cluster' 软件包。输入 y 确认安装并按 ENTER 继续。

sudo apt install percona-xtradb-cluster

在 Debian 11 上安装并配置 Percona XtraDB 集群

在安装 Percona XtraDB Cluster 的过程中,系统应该会要求你设置 MySQL root 密码。

输入新的强密码并选择 OK。

在 Debian 11 上安装并配置 Percona XtraDB 集群

再次输入你的密码并再次选择 OK。

对于默认的 MySQL 认证插件,选择 'Use strong password encryption (RECOMMENDED)'(使用强密码加密(推荐))选项并选择 OK。

在 Debian 11 上安装并配置 Percona XtraDB 集群

现在 Percona XtraDB Cluster 应该已经安装完成,它将自动启动并设为开机启用。

Percona XtraDB Cluster 安装完成后,执行以下命令验证 MySQL 服务的状态。

sudo systemctl is-enabled mysql
sudo systemctl status mysql

出现 'enabled' 输出表示 MySQL 服务器已启用,并会在系统启动时自动启动。而 'active (running)' 输出则表示 MySQL 服务器正在运行。

在 Debian 11 上安装并配置 Percona XtraDB 集群

要验证你的 MySQL root 密码,请通过下面的 'mysql' 命令登录 MySQL shell。当提示输入密码时,输入你的 MySQL root 密码。

sudo mysql -u root -p

成功后将进入 MySQL shell。

在 Debian 11 上安装并配置 Percona XtraDB 集群

你也可以输入以下查询来查看 MySQL 服务器的详细状态。

sudo systemctl status mysql

你应该会收到类似以下的输出——你已登录到 MySQL 8.0 Percona XtraDB Cluster。

在 Debian 11 上安装并配置 Percona XtraDB 集群

至此,你已配置好系统的 /etc/hosts 文件,安装并配置了 ufw 防火墙,并在所有服务器上安装了 Percona XtraDB Cluster MySQL 8.0。现在可以开始配置 Percona XtraDB Cluster 了。

停止 Percona XtraDB Cluster 服务

在开始配置 Percona XtraDB Cluster 之前,你必须确保 MySQL 服务器已停止。

执行以下 systemctl 命令停止服务器上的 MySQL 服务。然后验证 MySQL 服务器状态,确认服务已停止。

sudo systemctl stop mysql

出现 'inactive (dead)' 输出表示 MySQL 服务器已停止。

现在你可以开始为第一个节点 'pxc01' 初始化 Percona XtraDB Cluster。

复制 SSL/TLS 证书

Percona XtraDB Cluster 有两类流量加密:客户端-服务器连接和复制流量。在最新的 Percona XtraDB Cluster 8.0 中,所有复制流量默认已启用,以增强安全性。

在安装 Percona XtraDB Cluster 时,SSL/TLS 会在数据目录 '/var/lib/mysql' 下自动生成。执行以下命令查看 '/var/lib/mysql' 目录下的 SSL/TLS 证书列表。

ls /var/lib/mysql/*.pem

你应该会看到三类 SSL/TLS 证书:Client(客户端)、Server(服务器)和 CA。

在 Debian 11 上安装并配置 Percona XtraDB 集群

要创建并搭建 Percona XtraDB Cluster,所有服务器必须拥有相同的 CA 和 Server 证书。因此,你必须将默认的 CA 和 Server 证书从 'pxc01' 复制到 'pxc02' 和 'pxc03'。

在 'pxc01' 服务器上,将工作目录切换到 '/var/lib/mysql' 目录。

cd /var/lib/mysql

执行以下 scp 命令将 CA 和 Server 证书复制到 'pxc02' 和 'pxc03' 服务器。

scp server-key.pem server-cert.pem ca.pem root@pax02:/var/lib/mysql
scp server-key.pem server-cert.pem ca.pem root@pax03:/var/lib/mysql

你应该会看到类似以下的输出——将 CA 和 Server 证书从 'pxc01' 复制到 'pxc02' 和 'pxc03' 服务器。

在 Debian 11 上安装并配置 Percona XtraDB 集群

在 Debian 11 上安装并配置 Percona XtraDB 集群

证书复制完成后,即可初始化 Percona XtraDB Cluster。

在第一个节点上初始化 Percona XtraDB Cluster

在本节中,你将从第一个节点服务器 'pxc01' 初始化 Percona XtraDB Cluster。请确保以下步骤都在 'pxc01' 服务器上执行。

使用以下 nano 编辑器命令打开 MySQL 配置文件 '/etc/mysql/my.cnf'。

sudo nano /etc/mysql/my.cnf

将以下行添加到文件中。请务必将 'wsrep_cluster_address' 的值替换为所有服务器的 IP 地址。同时,在 'wsrep_node_address' 处必须填入 'pxc01' 的 IP 地址。

[mysqld]
datadir=/var/lib/mysql
user=mysql
# Path to Galera library
wsrep_provider=/usr/lib/libgalera_smm.so
# Cluster connection URL contains the IPs of pxc01, pxc02, and pxc03
wsrep_cluster_address=gcomm://192.168.5.15,192.168.5.16,192.168.5.17
# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW
# Using the MyISAM storage engine is not recommended.
default_storage_engine=InnoDB
# This InnoDB autoincrement locking mode is a requirement for Galera
innodb_autoinc_lock_mode=2
# Node 1 address
wsrep_node_address=192.168.5.15
# SST method
wsrep_sst_method=xtrabackup-v2
# Cluster name
wsrep_cluster_name=pxc_cluster
#pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER
pxc_strict_mode=ENFORCING
wsrep_provider_options="socket.ssl_key=server-key.pem;socket.ssl_cert=server-cert.pem;socket.ssl_ca=ca.pem"
[sst]
encrypt=4
ssl-key=server-key.pem
ssl-ca=ca.pem

完成后保存并关闭文件 '/etc/mysql/my.cnf'。

在 Debian 11 上安装并配置 Percona XtraDB 集群

接下来,运行以下 systemctl 命令来引导并初始化 Percona XtraDB Cluster。

'mysql@bootstrap' 是一个用于运行 Percona XtraDB Cluster 的 systemd 服务,它与 'mysql' 服务不同。使用 Percona XtraDB Cluster 构建 MySQL 服务器时,第一个节点必须使用 'mysql@bootstrap' 服务来运行。

systemctl start 
[email protected]

完成后,执行以下 mysql 命令登录 MySQL shell。输入你的 MySQL 服务器 root 密码。

sudo mysql -u root -p

执行以下 MySQL 查询,确认集群已初始化。

show status like 'wsrep%';

你应该会看到类似以下的输出——在 'wsrep_cluster_size' 部分你会看到值为 '1',表示 Percona XtraDB Cluster 已使用 1 台服务器完成初始化。在 'wsrep_incoming_address' 部分你还会看到服务器 IP 地址。最后,该节点处于 Synced(已同步)状态,意味着它已完全连接并准备好进行写集复制。

在 Debian 11 上安装并配置 Percona XtraDB 集群

第一个节点初始化完成后,你就可以将第二、第三个节点 'pxc02' 和 'pxc03' 添加到 Percona XtraDB Cluster 了。

将 Node2 和 Node3 添加到集群

向 Percona XtraDB Cluster 添加新节点的操作与第一个节点的初始化类似。以下是你需要执行的简单步骤:

  • 修改 MySQL 配置文件 '/etc/mysql/my.cnf'。
  • 启动 MySQL 服务器
  • 登录 MySQL shell 并验证 Percona XtraDB Cluster。

现在,让我们开始将 'pxc02' 和 'pxc03' 添加到 Percona XtraDB Cluster。

添加节点 pxc02

登录 'pxc02' 服务器,并使用以下 nano 编辑器命令打开 MySQL 配置文件 '/etc/mysql/my.cnf'。

sudo nano /etc/mysql/my.cnf

将以下行添加到文件中,并务必将 'wsrep_cluster_address' 的值替换为所有服务器的 IP 地址。同时,在 'wsrep_node_address' 处必须填入 'pxc02' 的 IP 地址。

[mysqld]
datadir=/var/lib/mysql
user=mysql
# Path to Galera library
wsrep_provider=/usr/lib/libgalera_smm.so
# Cluster connection URL contains the IPs of pxc01, pxc02, and pxc03
wsrep_cluster_address=gcomm://192.168.5.15,192.168.5.16,192.168.5.17
# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW
# Using the MyISAM storage engine is not recommended
default_storage_engine=InnoDB
# This InnoDB autoincrement locking mode is a requirement for Galera
innodb_autoinc_lock_mode=2
# Node #2 address
wsrep_node_address=192.168.5.16
# Cluster name
wsrep_cluster_name=pxc_cluster
# SST method
wsrep_sst_method=xtrabackup-v2
wsrep_provider_options="socket.ssl_key=server-key.pem;socket.ssl_cert=server-cert.pem;socket.ssl_ca=ca.pem"
[sst]
encrypt=4
ssl-key=server-key.pem
ssl-ca=ca.pem
ssl-cert=server-cert.pem

完成后保存并关闭文件 '/etc/mysql/my.cnf'。

在 Debian 11 上安装并配置 Percona XtraDB 集群

接下来,执行以下 systemctl 命令启动 MySQL 服务器。然后验证 MySQL 服务器状态,确认它正在运行。

这将启动 MySQL 服务并加入 'pxc01' 服务器上已初始化的 Percona XtraDB Cluster。

sudo systemctl start mysql
sudo systemctl status mysql

在 Debian 11 上安装并配置 Percona XtraDB 集群

要验证操作是否成功,你应该登录 MySQL shell。执行以下命令以 root 用户身份登录 MySQL shell。出现提示时,输入你的 MySQL root 密码。

sudo mysql -u root -p

登录后,执行以下 MySQL 查询以验证 Percona XtraDB Cluster 的状态。

show status like 'wsrep%';

你应该会看到类似以下的输出——在 'wsrep_cluster_size' 部分你会看到值为 '2',表示 Percona XtraDB Cluster 上已有两台可用服务器。在 'wsrep_incoming_address' 部分你还会看到服务器 IP 地址,即 pxc01 和 pxc02 的服务器 IP 地址。最后,该节点处于 Synced 状态,意味着它已完全连接并准备好进行写集复制。

在 Debian 11 上安装并配置 Percona XtraDB 集群

至此,Percona XtraDB Cluster 现在已以 pxc01 和 pxc02 两个节点/服务器运行。接下来,转到 pxc03 服务器,将它添加到 Percona XtraDB Cluster。

添加节点 pxc03

登录 'pxc03' 服务器,并使用以下 nano 编辑器命令打开 MySQL 配置文件 '/etc/mysql/my.cnf'。

sudo nano /etc/mysql/my.cnf

将以下行添加到文件中,并务必将 'wsrep_cluster_address' 的值替换为所有服务器的 IP 地址。同时,在 'wsrep_node_address' 处必须填入 'pxc03' 的 IP 地址。

[mysqld]
datadir=/var/lib/mysql
user=mysql
# Path to Galera library
wsrep_provider=/usr/lib/libgalera_smm.so
# Cluster connection URL contains the IPs of pxc01, pxc02, and pxc03
wsrep_cluster_address=gcomm://192.168.5.15,192.168.5.16,192.168.5.17
# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW
# Using the MyISAM storage engine is not recommended
default_storage_engine=InnoDB
# This InnoDB autoincrement locking mode is a requirement for Galera
innodb_autoinc_lock_mode=2
# Node #2 address
wsrep_node_address=192.168.5.17
# Cluster name
wsrep_cluster_name=pxc_cluster
# SST method
wsrep_sst_method=xtrabackup-v2
wsrep_provider_options="socket.ssl_key=server-key.pem;socket.ssl_cert=server-cert.pem;socket.ssl_ca=ca.pem"
[sst]
encrypt=4
ssl-key=server-key.pem
ssl-ca=ca.pem
ssl-cert=server-cert.pem

完成后保存并关闭文件 '/etc/mysql/my.cnf'。

在 Debian 11 上安装并配置 Percona XtraDB 集群

接下来,执行以下 systemctl 命令启动 MySQL 服务器。然后验证 MySQL 服务器状态,确认它正在运行。

这将启动 MySQL 服务并加入 Percona XtraDB Cluster。

sudo systemctl start mysql

在 Debian 11 上安装并配置 Percona XtraDB 集群

要验证操作是否成功,你应该登录 MySQL shell。执行以下命令以 root 用户身份登录 MySQL shell。出现提示时,输入你的 MySQL root 密码。

sudo mysql -u root -p

登录后,执行以下 MySQL 查询以验证 Percona XtraDB Cluster 的状态。

show status like 'wsrep%';

你应该会看到类似以下的输出——在 'wsrep_cluster_size' 部分你会看到值为 '3',表示 Percona XtraDB Cluster 上已有三台可用服务器。在 'wsrep_incoming_address' 部分你还会看到服务器 IP 地址,即 pxc01、pxc02 和 pxc03 的服务器 IP 地址。最后,该节点处于 Synced 状态,意味着它已完全连接并准备好进行写集复制。

在 Debian 11 上安装并配置 Percona XtraDB 集群

至此,Percona XtraDB Cluster 现在已以 pxc01、pxc02 和 pxc03 三台 Debian 服务器运行。你已完成了在三个 Debian 11 服务器上部署 Percona XtraDB Cluster。下一步,你将验证 Percona XtraDB Cluster 服务器之间的数据库复制。

测试复制

从 'pxc02' 服务器登录 MySQL shell,并创建一个新数据库 'percona'。

sudo mysql -u root -p
CREATE DATABASE percona;

现在转到 'pxc03' 服务器,以 MySQL root 用户登录 MySQL shell,然后切换到你从 'pxc02' 服务器创建的数据库 'percona'。

sudo mysql -u root -p
USE percona;

成功后将收到类似 'Database changed'(数据库已切换)的输出。这也确认了数据库 'percona' 已在 Percona XtraDB Cluster 服务器之间完成复制。

在 Debian 11 上安装并配置 Percona XtraDB 集群

接下来,从 'pxc03' 服务器执行以下 MySQL 查询创建新表 'example'。

CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));

在 Debian 11 上安装并配置 Percona XtraDB 集群

然后,再次转到 'pxc01' 服务器,执行以下查询向 'percona' 数据库插入新数据。

INSERT INTO percona.example VALUES (1, 'pxc01');
INSERT INTO percona.example VALUES (2, 'pxc02');
INSERT INTO percona.example VALUES (3, 'pxc03');

最后,回到 'pxc02' 服务器,执行以下查询从数据库 'percona' 和表 'example' 中检索数据。

SELECT * FROM percona.example;

你应该会看到类似以下的输出——数据在 'pxc02' 的 Percona XtraDB Cluster 上可用。由此表明 Percona XtraDB Cluster 服务器之间的复制工作正常,也意味着你在 Debian 11 服务器上的 Percona XtraDB Cluster 部署同样成功。

在 Debian 11 上安装并配置 Percona XtraDB 集群

结论

在本教程中,你已使用三台 Debian 11 服务器安装并配置了 Percona XtraDB Cluster。你初始化了 Percona XtraDB Cluster 并向其添加了两个节点/服务器。此外,你还通过 ufw 防火墙加固了 Percona XtraDB Cluster。

除此之外,你还通过 SSL/TLS 证书加密所有服务器之间的流量,进一步加固了 Percona XtraDB Cluster。这是通过选项 'pxc-encrypt-cluster-traffic' 实现的,该选项默认启用。

至此,你可以运用已学到的步骤,向 Percona XtraDB Cluster 添加更多服务器,并增加额外的节点,从而实现 Percona XtraDB Cluster 上的高可用与负载均衡。欲了解更多信息,请访问 Percona XtraDB Cluster 官方文档。