在本教程系列中,我们将从头开始建立一个高度可用的WordPress网站。
第1部分–简介,注意事项和体系结构
第2部分–设置VPSes
第3部分–设置MariaDB多主复制
第4部分–文件复制和设置DRBD
第5部分–设置OCFS2
第6部分–循环DNS加密和结论
文件复制选项
有很多文件复制技术。 我们将使用DRBD,但首先让我们介绍为什么我们没有选择其他一些东西。 我们的要求是双向复制和实时复制:
rsync:不是双向的,不是实时的。 如果您是唯一的作者,也是唯一将上载媒体的人,等等,那么您可以在每次更新后运行rsync(或在cron作业中进行设置)。 这不是一个坏选择,但是您需要以其他方式处理certbot验证。 我建议您使用DNS验证或在RRDNS配置中的certbot上阅读本文。
lsyncd:实时,但不是双向的。 仅支持单向同步。
一致:双向但不是实时的。 如果可以忍受滞后,则可以每两个分钟在cron作业中统一运行一次,以使节点保持同步。
glusterfs: –双向(实际上是双向)和实时的,但至少需要三个节点。
镜像:不保留所有者,组等。
在本教程中,我们将使用双向和实时的DRBD。 因为我们希望每个节点都能够写入/更改文件,所以我们不能使用ext4或任何其他“常规”文件系统,而需要一个支持共享磁盘操作的文件系统。 为了我们的目的,我们将使用OFCS2(Oracle群集文件系统2)
为DRBD做准备
要使用DRBD,我们需要在每一侧都有一个原始的,未格式化的分区。 DRBD工作在块级别,而不是文件系统级别。 在Linode的经理中,我向每个节点添加了一个新的10GB块存储磁盘。 如果您使用的是KVM,则在设置节点时需要预留一个未使用的分区。
首先在两个节点上安装所需的软件包:
apt-get -y install drbd-utils ocfs2-tools
在两个节点上加载DRBD内核模块:
root @ web1:〜/ mysql#modprobe drbd root @ web1:〜/ mysql#lsmod | grep drbd drbd 421888 0 lru_cache 16384 1 drbd libcrc32c 16384 1 drbd
我检查了dmesg,发现我添加的块存储已映射到/ dev / sdc:
[17461.350617] scsi 1:0:0:0:Direct-Access Linode Volume 2.5+ PQ:0 ANSI:5 [17461.353223] sd 1:0:0:0:发生了开机或设备复位 [17461.355751] sd 1: 0:0:0:[sdc] 20971520 512字节逻辑块:(10.7 GB / 10.0 GiB) [17461.357007] sd 1:0:0:0:[sdc]写保护已关闭 [17461.357771] sd 1:0: 0:0:[sdc]模式检测:63 00 00 08 [17461.357912] sd 1:0:0:0:[sdc]写入缓存:已启用,读取缓存:已启用,不支持DPO或FUA [17461.360936] sd 1:0:0:0:附加的scsi通用sg2类型0 [17461.365013] sd 1:0:0:0:[sdc]附加的SCSI磁盘
在两个节点上,我对/ dev / sdc进行了分区,以添加一个占用整个磁盘的主分区:
root @ web1:/ etc#fdisk / dev / sdc 欢迎使用fdisk(util-linux 2.33.1)。 更改将仅保留在内存中,直到您决定将其写入为止。 使用write命令之前请小心。 设备不包含可识别的分区表。 用磁盘标识符0x477ee7d7创建了一个新的DOS disklabel。 命令(m寻求帮助):p 磁盘/ dev / sdc:10 GiB,10737418240字节,20971520扇区 磁盘型号:卷 单位:1 * 512的 扇区 = 512字节扇区大小(逻辑/物理):512字节/ 512字节I / O大小(最小/最佳):512字节/ 512字节 Disklabel类型:dos 磁盘标识符:0x477ee7d7 命令(m用于帮助):n 分区类型 p 主要(0个主要,0个扩展,4个空闲) e 扩展(逻辑分区的容器) 选择(默认p):p 分区号(1-4,默认1):1 第一个扇区(2048-20971519,默认2048):<return> 最后一个扇区,+ /-扇区或+/-大小{K,M,G,T,P}(2048-20971519,默认20971519): 创建了一个新的分区1,类型为“ Linux”,大小为10 GiB。 命令(m以获取帮助):w 分区表已更改。 调用ioctl()以重新读取分区表。 同步磁盘。
现在,分区表如下所示:
root @ web1:/ etc#fdisk / dev / sdc 欢迎使用fdisk(util-linux 2.33.1)。 更改将仅保留在内存中,直到您决定将其写入为止。 使用write命令之前请小心。 命令(m寻求帮助):p 磁盘/ dev / sdc:10 GiB,10737418240字节,20971520扇区 磁盘型号:卷 单位:1 * 512的 扇区 = 512字节扇区大小(逻辑/物理):512字节/ 512字节I / O大小(最小/最佳):512字节/ 512字节 Disklabel类型:dos 磁盘标识符:0x477ee7d7 设备 启动起始 端 扇区大小ID类型 / dev / sdc1 2048 20971519 20969472 10G 83 Linux
设置DRBD
现在,让我们设置一些配置文件。 在每个节点上,将/etc/drbd.d/global_common.conf重命名为/etc/drbd.d/global_common.conf.dist并将其替换为:
全局{ 用法计数是; } 通用{ net { 协议C; } }
协议C是同步复制。 这是在我们的方案中的最佳选择,因为(a)服务器位于同一数据中心内,从而减少了延迟,并且(b)WordPress是“少数作家,许多读者”的站点,在该站点中大多数操作都被读取而不是写。
接下来,创建/etc/drbd.d/r0.res并按如下所示进行填充:
资源r0 { 位于web1.lowend.party { 地址1.1.1.1:7788; 设备/ dev / drbd0; 内部元磁盘; 磁盘/ dev / sdc1; } 在web2.lowend.party { 地址2.2.2.2:7788; 设备/ dev / drbd0; 内部元磁盘; 磁盘/ dev / sdc1; } # 启动{ # 成为原色的两个; # } net { cram-hmac-alg sha1; 共享秘密“秘密”; #allow-two-primaries是; after-sb-0pri丢弃零更改; after-sb-1pri次要丢弃; after-sb-2pri断开连接; } }
几个重要的注意事项:
- “ on”子句必须与“ hostname”命令的输出匹配。
- 您会注意到“ net”子句的“ startup”子句和“ allow-two-primaries”部分都被注释掉了。 这是故意的。 初始化DRBD后,我们将启用这些指令。
现在在每个节点上,执行以下命令:
drbdadm create-md r0 drbdadm up r0
现在,您可以查看/ proc / drbd以查看状态,或运行drbdadm:
root @ web1:/etc/drbd.d# cat / proc / drbd 版本:8.4.10(api:1 / proto:86-101) srcversion:983FCB77F30137D4E127B83 0:cs:Connected ro:Secondary / Secondary ds:Inconsistent / Inconsistent C r ----- ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:10484380 root @ web1:/ etc / drbd.d#drbdadm status r0 r0角色:辅助 磁盘:不一致的 对等角色:辅助 复制:已建立的对等磁盘:不一致
此输出告诉使用该卷处于不一致状态,并且群集的两侧都是次要的。 本质上,双方都在等待主数据库更新,但是两者都不是主数据库,因此没有任何反应。 让我们修复它。 在web1上,执行以下命令:
drbdadm primary --force r0
现在,如果您查看/ proc / drbd,您将看到同步开始了:
root @ web1:/etc/drbd.d# cat / proc / drbd 版本:8.4.10(api:1 / proto:86-101) srcversion:983FCB77F30137D4E127B83 0:cs:SyncSource ro:Primary / Secondary ds:UpToDate / Inconsistent C r ----- ns:1732 nr:0 dw:0 dr:1732 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:10482648 [> ... .................]同步: 0.1%(10236/10236)M 完成:1:27:21速度:1,732(1,732)K / sec
对于10G容量,不要为估计1小时27分钟的同步时间而感到惊讶。 大约10秒后,我检查了/ proc / drbd,它看起来像这样:
root @ web1:/etc/drbd.d# cat / proc / drbd 版本:8.4.10(api:1 / proto:86-101) srcversion:983FCB77F30137D4E127B83 0:cs:SyncSource ro:Primary / Secondary ds:UpToDate / Inconsistent C r ----- ns:596272 nr:0 dw:0 dr:596272 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:9888108 [> ... ................]同步: 5.8%(9656/10236)M 结束:0:07:16速度:22,640(14,904)K / sec
卷同步后,您将看到以下内容:
root @ web1:/etc/drbd.d# cat / proc / drbd 版本:8.4.10(api:1 / proto:86-101) srcversion:983FCB77F30137D4E127B83 0:cs:Connected ro:Primary / Primary ds:UpToDate / UpToDate C r ----- ns:134792 nr:0 dw:134792 dr:1469 al:120 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
现在,在两个节点上都更改/etc/drbd.d/r0.res,并取消注释部分的注释。 您可以手动执行此操作,也可以通过运行下面的sed命令(请确保在两个节点上都执行此操作):
#systemctl stop drbd #sed -i's /#//'/etc/drbd.d/r0.res#systemctl start drbd #systemctl enable drbd drbd.service不是本机服务,重定向到systemd-sysv-install。 执行中:/ lib / systemd / systemd-sysv-install enable drbd
DRBD现在应该报告它是最新的(在所有节点上都一致)并且所有节点都是主节点:
root @ web1:/ etc#cat / proc / drbd 版本:8.4.10(api:1 / proto:86-101) srcversion:983FCB77F30137D4E127B83 0:cs:Connected ro:Primary / Primary ds:UpToDate / UpToDate C r-- --- ns:609047 nr:7596 dw:15911 dr:623182 al:4 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 root @ web1:/ etc#drbdadm状态全部 r0角色:主 磁盘:UpToDate 对等角色:主 复制:已建立对等磁盘:UpToDate
现在,我们的DRBD配置已完成。
下一部分:第5部分–设置OCFS2