在本教程系列中,我们将从头开始建立一个高度可用的WordPress网站。
第1部分–简介,注意事项和体系结构
第2部分–设置VPSes
第3部分–设置MariaDB多主复制
第4部分–文件复制和设置DRBD
第5部分–设置OCFS2
第6部分–循环DNS加密和结论
设置MariaDB多主复制
在web1上,设置/etc/mysql/maria.conf.d/replication.cnf:
[mysqld] 日志bin server_id = 1 绑定地址= 1.1.1.1 auto-increment-increment = 2 auto-increment-offset = 1
最佳做法是将自动增量设置为主机数量(在我们的示例中为2)。 为了简单起见,auto-increment-offset应该与服务器ID相匹配。 这些参数控制的是如何处理自动递增字段,以防止主机之间的主键冲突。
在web2的同一文件中:
[mysqld] 日志bin server_id = 2 绑定地址= 2.2.2.2 auto-increment-increment = 2 auto-increment-offset = 2
唯一更改的是server_id和bind-address。 您可能会问为什么server_id使用下划线,而每个其他参数名称都使用连字符。 我也想知道。
然后在每个节点上重新启动Mariadb。
systemctl重新启动mariadb
现在在web1上,创建复制用户。 我将我的名字命名为“ master”,但您可以随意命名。锁定所有表, 但不要退出会话。 如果退出会话(退出,control-D等),则锁将被释放:
MariaDB [(无)]>创建由“复杂密码”标识的用户“主” @“%”; 查询正常,受影响的0行(0.000秒) MariaDB [(无)]>将*。*上的复制从属授予'master'@'%'; 查询正常,受影响的0行(0.000秒) MariaDB [(无)]>刷新权限; 查询正常,受影响的0行(0.000秒) MariaDB [(none)]>具有读取锁定的刷新表; 查询确定,受影响的行数为0.001秒(0.001秒) MariaDB [[无]]>显示主服务器状态; + ------------------- + ---------- + -------------- + --- --------------- + | 档案 | 职位| Binlog_Do_DB | Binlog_Ignore_DB | + ------------------- + ---------- + -------------- + --- --------------- + | mysqld-bin.000001 | 329 | | | + ------------------- + ---------- + -------------- + --- --------------- + 设置1行(0.000秒)
记下文件名和位置号。
现在转到web2并创建复制用户:
MariaDB [(无)]>创建用户'master'@'%'由'complex-password-88-kf'标识; 查询正常,受影响的0行(0.000秒) MariaDB [(无)]>授权复制*。*至'master'@'%'; 查询正常,受影响的0行(0.000秒) MariaDB [(无)]>冲洗特权; 查询正常,受影响的0行(0.000秒)
接下来,我们将设置web2从属服务器:
MariaDB [(无)]>停止奴隶; 查询正常,影响0行,1警告(0.000秒) MariaDB [(无)]>将MASTER更改为MASTER_HOST ='1.1.1.1',MASTER_USER ='master',MASTER_PASSWORD ='complex-password',MASTER_LOG_FILE ='mysqld-bin.000001',MASTER_LOG_POS = 329,MASTER_HEARTBEAT_PERIOD = 60; 查询正常,受影响的0行(0.006秒) MariaDB [[无]]>启动从属服务器; 查询正常,受影响的0行(0.001秒)
请注意,我们正在将web2的复制主服务器设置为web1的IP。 我们正在使用从web1的SHOW MASTER STATUS输出中获取的日志文件名和日志位置。
我还建议启用MASTER_HEARTBEAT_PERIOD参数。 它们每60秒钟(在这种情况下)就在复制链接之间发送心跳信号,因此不会关闭连接。
您可以在节点2上检查从属状态。 我将输出调整一些:
MariaDB [(无)]>显示从属状态\ G *************************** 1.行******** ******************* Slave_IO_State:等待master发送事件 Master_Host:1.1.1.1 Master_User:master Master_Port:3306 Connect_Retry:60 Master_Log_File:mysqld-bin.000001 Read_Master_Log_Pos: 329 Slave_IO_Running:是 Slave_SQL_Running:是 Slave_SQL_Running_State:从站已读取所有中继日志;等待从属I / O线程将其更新 为已设置的1行(0.000秒)
在这里,我们看到上面输入的参数。 您还希望同时看到Slave_IO_Running和Slave_SQL_Running为“是”。 如果看不到“是”,或者看到“ Last_IO_Error”或“ Last_SQL_Error”下的内容,请检查/var/log/mysql/error.log以获取提示。 这可能意味着您在replication.cnf文件中输入了错误,没有重新启动MariaDB,或者在“ CHANGE MASTER”命令中犯了一个错误。
现在在web2上,显示主状态: MariaDB [(无)]>显示主服务器状态; + ------------------- + ---------- + -------------- + --- --------------- + | 档案 | 职位| Binlog_Do_DB | Binlog_Ignore_DB | + ------------------- + ---------- + -------------- + --- --------------- + | mysqld-bin.000001 | 329 | | | + ------------------- + ---------- + -------------- + --- --------------- + 设置1行(0.000秒)
现在回到web1并在那里设置复制,首先解锁表:
MariaDB [(无)]>解锁表; 查询正常,受影响的0行(0.000秒) MariaDB [(无)]>停止奴隶; 查询正常,影响0行,1警告(0.000秒) MariaDB [(无)]>将MASTER更改为MASTER_HOST ='2.2.2.2',MASTER_USER ='master',MASTER_PASSWORD ='complex-password',MASTER_LOG_FILE ='mysqld-bin.000001',MASTER_LOG_POS = 329,MASTER_HEARTBEAT_PERIOD = 60; 查询正常,受影响的0行(0.005秒) MariaDB [[无]]>启动从属服务器; 查询正常,受影响的0行(0.000秒)
同样,您可以使用“ SHOW SLAVE STATUS”命令:
MariaDB [(无)]>显示从属状态\ G *************************** 1.行******** ******************* Slave_IO_State:等待master发送事件 Master_Host:2.2.2.2 Master_User:master Master_Port:3306 Connect_Retry:60 Master_Log_File:mysqld-bin.000001 Read_Master_Log_Pos: 329 Slave_IO_Running:是 Slave_SQL_Running:是 Slave_SQL_Running_State:从站已读取所有中继日志;等待从属I / O线程将其更新 为已设置的1行(0.000秒)
现在让我们对其进行测试。 在web1上:
MariaDB [(无)]> connect wp; 读取表信息以完成表名和列名 您可以关闭此功能以使用-A快速启动。 连接ID: 42 当前数据库:wp MariaDB [wp]>创建表repltest(id整数,名称varchar(30)) ; 查询正常,受影响的0行(0.007秒) MariaDB [wp]>插入repltest(id,name)值(1,'Thor'); 查询正常,受影响的1行(0.003秒) MariaDB [wp]>插入repltest(id,name)值(2,“美国队长”); 查询正常,受影响的1行(0.002秒) MariaDB [wp]>插入repltest(id,name)值(3,“钢铁侠”); 查询正常,受影响1行(0.001秒) MariaDB [wp]>提交; 查询正常,受影响的0行(0.000秒)
现在在web2上:
MariaDB [(无)]> connect wp; 读取表信息以完成表名和列名 您可以关闭此功能以使用-A更快地启动 连接ID: 42 当前数据库:wp MariaDB [wp]>从repltest中选择*; + ------ + ----------------- + | id | 名称 | + ------ + ----------------- + | 1 | 雷神 | | 2 | 美国队长| | 3 | 钢铁侠 | + ------ + ----------------- + 设置3行(0.000秒)
OK,所以web1-> web2复制正在工作。 现在让我们以相反的方向进行测试。 在web2上:
MariaDB [wp]>创建表repltest2(id整数,名称varchar(30)); 查询正常,受影响的0行(0.005秒) MariaDB [wp]>插入repltest2(id,name)值(1,'Donald Blake'); 查询正常,受影响的1行(0.002秒) MariaDB [wp]>插入repltest2(id,name)值(2,'Steve Rogers'); 查询正常,受影响的1行(0.002秒) MariaDB [wp]>插入repltest2(id,name)值(3,'Tony Stark'); 查询正常,受影响的1行(0.002秒) MariaDB [wp]>提交; 查询正常,受影响的0行(0.000秒)
在web1上:
MariaDB [wp]>从repltest2选择*; + ------ + -------------- + | id | 名称 | + ------ + -------------- + | 1 | 唐纳德·布莱克| | 2 | 史蒂夫·罗杰斯| | 3 | 托尼·史塔克 | + ------ + ---------------- + 设置3行(0.000秒)
我们现在正在进行双向数据库复制。
如果出现任何错误,请检查以下内容:
(1)您没有防火墙阻止连接。
(2)有很多细节可以正确键入-IP,日志文件名,日志位置,server_id,密码等。 仔细检查所有内容。 不要害怕重启MariaDB,重置密码并重做STOP SLAVE / CHANGE MASTER / START SLAVE命令。
下一部分:第4部分–文件复制和设置DRBD