在本系列教程中,我们将从零开始搭建一个高可用性的 WordPress 网站。
第一部分 – 引言、考虑因素和架构
第二部分 – 订购虚拟专用服务器
第三部分 – Ansible
第四部分——集群(本文)
第五部分 – WordPress 安装
第六部分 – MariaDB 多主数据库
第七部分 – 轮询 DNS、Let's Encrypt 和结论
我们目前已经取得了巨大进展。使用 Ansible 大大加快了服务器的搭建速度。现在让我们来配置 GlusterFS。
GlusterFS 是一个复制文件系统,它允许我们在每个节点上拥有完全相同的目录、文件和权限。我们将把网站文件托管在上面,这样,如果我们在一个节点上上传一些图片或其他文件,它们会立即复制到其他节点。我们还将利用它简化 Let's Encrypt 和 Nginx 的部署,并在设置 MariaDB 时将其用作数据库备份的便捷传输机制。
现在,我们先把它设置安装好。
由于需要来回切换,我将把部分内容标记为“在每个节点上”和“在节点1上”。建议对每个节点都建立SSH会话,以便来回切换。
在每个节点上
运行 dmesg 命令后,你应该会看到类似这样的输出:
[ 1.714306] sd 0:0:0:1: [sdb] 20971520 个 512 字节逻辑块: (10.7 GB/10.0 GiB)
dmesg 通常会输出很多信息,所以请尝试一下。
dmesg | grep sdb
这很可能是默认挂载的,所以请卸载它。
卸载 /dev/sdb
并从 /etc/fstab 文件中删除所有相关引用。在我的 node1 上,我删除了这一行:
/dev/disk/by-id/scsi-0HC_Volume_100431844 /mnt/HC_Volume_100431844 xfs discard,nofail,defaults 0 0
现在让我们删除分区标签并创建一个新的分区,创建一个使用 100% 驱动器空间的新分区,并在其上创建一个 XFS 文件系统:
root@node1:~# parted /dev/sdb --align opt mklabel gpt 警告:/dev/sdb 上现有的磁盘标签将被销毁,该磁盘上的所有数据都将丢失。 您想继续吗? 是/否?是 提示:您可能需要更新 /etc/fstab 文件。 root@node1:~# parted /dev/sdb mkpart xfs 0% 100% 提示:您可能需要更新 /etc/fstab 文件。 root@node1:~# mkfs.xfs -f -i size=512 /dev/sdb1 元数据=/dev/sdb1 大小=512 agcount=4,agsize=655232 块 = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 bigtime=1 inobtcount=1 nrext64=0 数据 = bsize=4096 块数=2620928,imaxpct=25 = sunit=0 swidth=0 块 命名=版本 2 bsize=4096 ascii-ci=0, ftype=1 日志=内部日志 bsize=4096 blocks=16384, version=2 = sectsz=512 sunit=0 blks,lazy-count=1 实时=无 extsz=4096 blocks=0, rtextents=0 丢弃方块……完成。
现在我们可以设置安装点并将其安装起来:
root@node1:~# mkdir -p /data/brick1 root@node1:~# echo '/dev/sdb1 /data/brick1 xfs defaults 1 2' >> /etc/fstab root@node1:~# systemctl daemon-reload root@node1:~# mount -a root@node1:~# mount | grep sdb1 /data/brick1 上的 /dev/sdb1 类型 xfs(rw、relatime、attr2、inode64、logbufs=8、logbsize=32k、无配额) root@node1:~# df -h |grep sdb1 /dev/sdb1 10G 104M 9.9G 2% /data/brick1
现在涂抹泡沫,冲洗干净,对每个节点重复此步骤。
在每个节点上
现在应该启动 glusterd 服务了。
systemctl enable glusterd.service systemctl start glusterd.service
在节点1上
让我们来搭建 GlusterFS 集群。
root@node1:~# gluster peer probe node2.lowend.party 同伴探测:成功 root@node1:~# gluster peer probe node3.lowend.party 同伴探究:成功
在节点2上
root@node2:~# gluster peer probe node1.lowend.party 同伴探测:成功 root@node2:~# gluster peer probe node3.lowend.party 对等体探测:主机 node3.lowend.party 端口 24007 已在对等体列表中
在节点3上
root@node3:~# gluster peer probe node1.lowend.party 对等体探测:主机 node1.lowend.party 端口 24007 已在对等体列表中 root@node3:~# gluster peer probe node2.lowend.party 对等体探测:主机 node2.lowend.party 端口 24007 已在对等体列表中
在节点1上
root@node1:~# gluster peer status 同伴数量:2 主机名:node2.lowend.party UUID:4fdc500b-d0dc-4853-9eac-c30f31bf80d8 状态:集群中的对等节点(已连接) 主机名:node3.lowend.party Uuid: 363cac9f-5cf2-485d-ac70-37afa25cd785 状态:集群中的对等节点(已连接)
如果在节点 2 和节点 3 上运行该命令,应该会看到类似的信息。GlusterFS 运行正常!现在让我们创建一个 brick 并添加它。
在每个节点上
mkdir -p /data/brick1/gv0
在节点1上
root@node1:~# gluster volume create gv0 replica 3 node1.lowend.party:/data/brick1/gv0 node2.lowend.party:/data/brick1/gv0 node3.lowend.party:/data/brick1/gv0 卷创建:gv0:成功:请启动卷以访问数据 root@node1:~# gluster volume start gv0 卷启动:gv0:成功 root@node3:~# gluster 卷信息 卷名称:gv0 类型:复制 卷 ID:7be70513-926d-441e-99d8-e339e59db30a 状态:已启动 快照数量:0 砖块数量:1 x 3 = 3 传输类型:TCP 砖块: Brick1: node1.lowend.party:/data/brick1/gv0 Brick2:node2.lowend.party:/data/brick1/gv0 Brick3:node3.lowend.party:/data/brick1/gv0 选项已重新配置: cluster.granular-entry-heal:开启 storage.fips-mode-rchecksum:开启 transport.address-family: inet nfs.disable: 开启 performance.client-io-threads: 关闭
在每个节点上
mkdir /gluster
添加到 /etc/fstab:
echo "localhost:/gv0 /gluster glusterfs defaults,_netdev,noauto,x-systemd.automount 0 0" >> /etc/fstab
进而:
systemctl daemon-reload
如果你不理解那条 fstab 条目,我建议你参考这篇博客文章,其中指出了一个问题:
运行 GlusterFS 集群时,您可能需要使用服务器本身上的卷。
在启动过程中,GlusterFS 需要一些时间才能启动。systemd
systemd-mount会处理来自/etc/fstab挂载点,它会在glusterfs-server服务启动完成之前运行。挂载将会失败,因此重启后您将丢失已挂载的卷。
那里提出了一种解决方案,但第一个评论中的解决方案更简单。
现在重启系统,确保 GlusterFS 已按预期启动并挂载。我的系统显示一切正常。
测试 Gluster
我们来试用一下 Gluster。在节点 1 上:
echo "这是一个测试文件,用于检查 Gluster 是否正常工作。" > /gluster/testfile.txt
然后跳转到节点2:
root@node3:~# cat /gluster/testfile.txt 这是一个测试文件。你好。你好吗?
哇!
下一节我们将安装 WordPress,并利用 Gluster 来简化安装过程。