
在本系列教程中,我们将从零开始搭建一个高可用性的 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,我们将在明天本教程的最后一部分中完成这些工作。