使用 Dnspod 还有一个重要原因就是 Dnspod 提供了完善 API,可以很好的实现 DNS 联动,即监控主机探测到故障后,可以立即通过 API 接口将对应主机的 A 记录禁用,这样后续用户流量将会流向还在正在工作的主机;当故障主机恢复后,通过 API 接口迅速恢复之前禁用的 A 记录,从而实现主备切换,实现真正意义的热备。
具体的 API 操作将在后文相关监控部署的章节详述。
3、MySQL 主从复制
MySQL 的主从复制功能是实现读写分离的关键,其原理是主服务器将写查询以二进制日志的方式记录下来,然后从服务器会自动获取主服务器上的二进制日志中的内容,并在本地执行,从而实现数据从主服务器到从服务器的复制。MySQL 的主从复制有非常多的属性可以设置,可以实现相当复杂的功能,但这些内容已经超出了本文的讨论范围,下文仅给出实现 MySQL 主从复制的最基本配置。
3.1 MySQL 主机配置
配置文件位于 /etc/mysql/my.cnf,主要的配置项是开启 Servier-id,以及开启二进制日志功能(log_bin),最简单的做法,就是找到配置文件中对应的条目,直接去掉语句前面的注释符号'#',参考配置如下:
如果以上配置没有问题,从服务器就会从主服务器二进制日志的指定位置开始同步数据到本地,如果需要更加复制的同步策略请参考 MySql 的官方文档。
4、应用系统配置(Discuz!X)
在本文之前的几篇教程中我们介绍了 Discuz!X 分布式部署策略、读写分离以及负载均衡的做法,但是为了能够实现快速主备切换,还需要在此基础上做一些调整。调整的主要思路是通过修改 Discuz!X 的配置文件,使用 Define 语句将数据库的主机名与 IP 地址直接对应起来。首先来看看正常运行的状态下,Discuz!X 与数据库的对应关系,见下图:
S1 表示 PC 服务器 1,S2 表示 PC 服务器 2;Dz 1 和 Dz 2 分别表示 Discuz!X 应用程序;DB M 表示主数据库服务器,DB S 表示从数据库服务器。正常运行状态下 Dz1 和 Dz2 读取数据时访问 DB S,写数据时访问 DB M,然后 DB S 会自动同步 DB M 的数据到本地。根据图中所示业务模型,整理 DZ1 和 DZ2 的配置文件如下: