目录 | Table of Contents
WordPress 确实是做博客非常好的一个工具。但是基本上都是单一节点的。做成多个点的集群其实也是非常方便的,并不需要借助什么组件。
数据库的同步
多点数据库相互同步的方式比较麻烦,也只能构建一个环状结构。因此这里主要讲述的是Master-Master 主主(双主)复制模式的构建
为了方便表述,在这里分别称两个服务器为A和B。 PHPMyAdmin 提供一个非常方便的设置,但是似乎并没有什么用。所以还是自己手动设置吧,首先将两台服务器的配置文件设置好,我使用的是Mariadb。
[mysqld] #skip-networking 必须使用网络,所以这个要关闭,注释掉 bind-address = 监听的IP地址 port=你的端口号,如果不想使用默认的端口 server-id=1434495932 服务器的ID,两台服务器必须设置不一样的 report-host=example.com 向被连接服务器报告自己的名字 log_bin=mysql-bin 启动 log bin log_error=mysql-bin.err 记录错误 #binlog_ignore_db=provider 如果有不想被复制的数据库请使用这个设置 #设置自动增长值,避免冲突。 auto_increment_offset=2 auto_increment_increment=2
两台服务器都必须进行设置,注意,server-id 和 report-host 应该是不一样的。auto_increment_offset 应该一个设置成1,另外一个设置成2。让它们错开。两台服务器都restart 一下,让设置生效。在进行同步的时候,应该合理使用screen,避免重复登陆数据库,另外关闭其它页面服务避免不必要的数据库读写。另外只需要在服务器A设置用户就行了,如果设置全部同步的话,另外一台服务器会复制权限表。
登陆服务器A,锁住数据库。
FLUSH TABLES WITH READ LOCK;
使用Screen切出来 导出数据库
mysqldump --all-databases -u root -p > backup.sql
复制到服务器B
scp backup.sql root@b.example.com:/somewhere/backup.sql
在服务器B登陆数据库,并且导入数据
source backup.sql
查看数据库A的记录位置
MariaDB [(none)]> SHOW Master STATUS\G; *************************** 1. row *************************** File: mysql-bin.000011 Position: 35378810 Binlog_Do_DB: Binlog_Ignore_DB: 1 row in set (0.00 sec)
在数据库B设置从模式,注意需要根据上个输出结果填入File和Position
CHANGE MASTER TO MASTER_HOST='服务器A的地址', MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=35378810, MASTER_PORT=你定制的端口, MASTER_USER='复制用户名', MASTER_PASSWORD='密码'; START SLAVE; SHOW SLAVE STATUS\G;
这时候应该找到两个Yes, 如果没有找到,就要检查服务器A的表是否有改动了(没有锁住?)。
Slave_IO_Running: Yes Slave_SQL_Running: Yes
然后锁住数据库B,并显示数据库B的状态。
FLUSH TABLES WITH READ LOCK; SHOW Master STATUS\G;
在数据库A设置Change master to ,然后显示从状态,这时候出现两个Yes就可以了。
接着两个数据库都可以解除锁定了。
文件的同步
文件同步有很多方法,最简单的构建就是使用rsync 然后配合crontab定时执行增量式复制。使用了一段时间,感觉还是挺稳定的 。
rsync -rtvouzp -e 'ssh -p ssh的端口' --links --progress root@cdn-sora.ink.moe:/var/www/html/ /var/www/html/
WordPress的部署
似乎,并不需要干什么,只不过最好在本机上面host文件,禁用掉一些不必要的插件,pageview那些计数的,其实还是可以用的。只不过有关文件操作的就要注意一点了。发布了才发现没有提及wordpress。
局限性
数据库同步的技术非常成熟,但是文件只能够做到增量式的相互复制。如果需要删除某个文件就需要在两个服务器上面同时操作。是不太方便的。另外Session并没有同步,如果可以搭配Redis同步会更加好,因此建议在编辑的常用后端,修改host文件绑定ip地址。