从零开始搭建高可用性 WordPress 网站(2026 版)!第六部分:MariaDB 多主数据库 从零开始搭建高可用性 WordPress 网站(2026 版)!第六部分:MariaDB 多主数据库

从零开始搭建高可用性 WordPress 网站(2026 版)!第六部分:MariaDB 多主数据库

高可用性 WordPress

在本系列教程中,我们将从零开始搭建一个高可用性的 WordPress 网站。

第一部分 – 引言、考虑因素和架构
第二部分 – 订购虚拟专用服务器
第三部分 – Ansible
第四部分——集群
第五部分 – WordPress 安装
第六部分 – MariaDB 多主服务器(本文)
第七部分 – 轮询 DNS、Let's Encrypt 和结论

我们将继续利用 Gluster 来简化 MariaDB 的部署。

我们使用的是 MariaDB 的 Galera 集群。Galera 可以保持三个节点同步,并且它采用多主架构,因此如果我们在节点 1 上发布一篇文章,访客在节点 2 上发表评论,或者另一位访客在节点 3 上回复,所有三个数据库都会立即更新并反映相同的更改。

以下是我们 Gluster 的现状:

 root@node1:/gluster/www.lowend.party# cd /gluster/
root@node1:/gluster# ll
总共13
drwxrwxrwx 5 根根 4096 3 月 2 日 19:13 。
drwxr-xr-x 21 root root 4096 3月 2 19:09 ..
-rw-r--r-- 1 root root 50 3月 2 19:11 testfile.txt
drwxrwxr-x 5 www-data adm 4096 3月 2日 19:31 www.lowend.party

请记住,我们已经在节点 1 上安装了 WordPress,并且数据库也存储在节点 1 的 MariaDB 中。现在,让我们将节点 1 上的数据库转储到 Gluster 集群卷中:

 root@node1:/gluster# mysqldump wp > wp.sql
root@node1:/gluster# ll
总共44
drwxrwxrwx 5根根4096年3月2日19:32。
drwxr-xr-x 21 root root 4096 3月 2 19:09 ..
-rw-r--r-- 1 root root 50 3月 2 19:11 testfile.txt
-rw-r--r-- 1 root root 31529 3月 2日 19:32 wp.sql
drwxrwxr-x 5 www-data adm 4096 3月 2日 19:31 www.lowend.party

现在将该数据导入到节点 2 和 3:

 mysql wp < /gluster/wp.sql

在所有节点上关闭 MariaDB。

 servicectl stop mariadb

在节点1上,创建/etc/mysql/mariadb.conf.d/60-galera.cnf文件,内容如下:

 [galera]
# 必填设置
wsrep_on = ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name = "MariaDB Galera 集群"
wsrep_cluster_address = gcomm://5.78.68.150,5.78.91.194,5.78.74.126
binlog_format = 行
默认存储引擎 = InnoDB
innodb_autoinc_lock_mode = 2
wsrep_sst_method=rsync

# 允许服务器接受所有接口上的连接。
绑定地址 = 0.0.0.0

然后把这个文件放到 Gluster 上,这意味着它会立即出现在所有节点上:

 cp /etc/mysql/mariadb.conf.d/60-galera.cnf /gluster

在节点 2 和 3 上:

 cp /gluster/60-galera.cnf /etc/mysql/mariadb.conf.d/

初始化 Galera 集群

在节点 1 上:

 galera_new_cluster

这样也会启动 MariaDB。

在节点 2 和 3 上:

 systemctl start mariadb

在节点 1 上:

 MariaDB [(none)]> SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size";
+--------------+
| 集群大小 |
+--------------+
| 3 |
+--------------+
1 行(0.001 秒)

现在让我们来试一试!我将根据我最喜欢的电视节目创建一个测试表格。

在节点 1 上:

 MariaDB [(none)]>使用 wp;
读取表信息以完成表名和列名的填写。
您可以使用 -A 参数关闭此功能以加快启动速度。

数据库已更改
MariaDB [wp]> create table hogans_heroes ( id integer, rank varchar(15), name varchar(30) );
查询成功,0 行受影响(耗时 0.008 秒)

MariaDB [wp]> insert into hogans_heroes (id, rank, name) values 
(1,“上校”,“罗伯特·霍根”);
查询成功,影响 1 行(耗时 0.002 秒)

MariaDB [wp]> insert into hogans_heroes (id, rank, name) values 
(2,“中士”,“詹姆斯·金奇洛”);
查询成功,影响 1 行(耗时 0.002 秒)

MariaDB [wp]> insert into hogans_heroes (id, rank, name) values 
(3,“下士”,“彼得·纽柯克”);
查询成功,影响 1 行(耗时 0.002 秒)

MariaDB [wp]> insert into hogans_heroes (id, rank, name) values 
(4,“下士”,“路易·勒博”);
查询成功,影响 1 行(耗时 0.002 秒)

MariaDB [wp]> insert into hogans_heroes (id, rank, name) values 
(5,“中士”,“安德鲁·卡特”);
查询成功,影响 1 行(耗时 0.002 秒)

现在我们来看看节点2上的MariaDB。在节点2上:

 MariaDB [wp]> select * from hogans_heroes;
+------+----------+----------------+
| id | 排名 | 名称 |
+------+----------+----------------+
| 1 | 上校 | 罗伯特·霍根 |
| 2 | 中士 | 詹姆斯·金奇洛 |
| 3 | 下士 | 彼得·纽柯克 |
| 4 | 下士 | 路易·勒博 |
| 5 | 中士 | 安德鲁·卡特 |
+------+----------+----------------+
共 5 行(0.000 秒)

完美!但是等等……在第六季中,饰演詹姆斯·金奇洛中士的伊万·迪克森离开了剧组,由肯尼斯·华盛顿饰演的新角色理查德·贝克中士接替。让我们在node3上更新一下这个信息:

 MariaDB [wp]> delete from hogans_heroes where name = 'James Kinchloe';
查询成功,影响 1 行(耗时 0.003 秒)
MariaDB [wp]> insert into hogans_heroes (id,rank,name) values
(6,“中士”,“理查德·贝克”);
查询成功,影响 1 行(耗时 0.002 秒)
我们来检查一下是否已复制到节点 1:

MariaDB [wp]> select * from hogans_heroes;
+------+----------+---------------+
| id. | 排名 | 名称 |
+------+----------+---------------+
| 1 | 上校 | 罗伯特·霍根 |
| 3 | 下士 | 彼得·纽柯克 |
| 4 | 下士 | 路易·勒博 |
| 5 | 中士 | 安德鲁·卡特 |
| 6 | 中士 | 理查德·贝克 |
+------+----------+---------------+
共 5 行(0.000 秒)

我们的 MariaDB Galera 多主复制功能运行完美。

剩下的唯一事项就是设置轮询 DNS 和 Let's Encrypt,我们将在明天本教程的最后一部分中完成这些工作。