关于mysql主从架构master宕机
关于mysql主从架构master宕机后,请求转移问题解决办法 mysql架构:一主一从 问题一:有两台mysql数据库,已做好主从。如果运行某一天master服务器mysql故障导致前端请求无法处理怎么办? 答:将前端需要数据库处理的请求转移到slave机上。 问题二:怎么转移? 答: 方法一:如果业务比较简单,只通过一个或很少的数据库连接文件连接后台mysql数据库,可直接修改连接文件代码的连接IP为slave机IP。 方法二:如果主从架构比较复杂,可将其升级为MHA架构自动实现故障转移,具体见:https://www.cnblogs.com/dannylinux/p/8033318.html 方法三:如果业务比较复杂,涉及很多连接问题,去手动修改代码连接文件很麻烦。这时就可以通过iptables防火墙转发规则实现了。如下: 前端服务器: 公网IP:12.1.1.1 提供WEB服务 master机: 公网IP:无 内网IP:13.1.1.1 系统:云服务器Centos 7 mysqld端口:3306 slave机: 公网IP:无 内网IP:13.1.1.2 系统:云服务器Centos 7 mysqld端口:3306 实验开始 两台服务器数据主从运行顺利,slave机能及时同步数据。假设突发情况导致master服务器宕机。 前端web服务器上 1.开启转发 vim /etc/sysctl.conf net.ipv4.ip_forward = 1 2.添加iptables防火墙端口转发规则 iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to-destination 13.1.1.2:3306 #路由前,将所有对3306端口的请求都转发到13.1.1.2的3306端口 iptables -t nat -A POSTROUTING -d 13.1.1.2 -p tcp --dport 3306 -j SNAT --to-source 12.1.1.1 #路由后,将IP为内网13.1.1.2,端口为3306的返回请求源地址转换为公网IP12.1.1.1 解析: PREROUTING 当外网的数据包进入到内网时,需要修改数据包中的公网 IP 为内网的主机 IP,这种 DNAT 的行为规则在 PREROUTING 链里添加。 POSTROUTING 包含有SNAT源地址转换的行为规则,把内网地址转换成公网地址。 SNAT 和 DNAT: SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。 1).内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT; 2).外网的数据经过路由发往内网主机时,数据包中的目的 IP (路由器上的公网 IP) 将修改为内网 IP,这种变更行为就是 DNAT 。 PREROUTING 、 POSTROUTING与SNAT 、DNAT对应关系: SNAT 操作对应链 POSTROUTING DNAT 操作对应链 PREROUTING 3.如果master服务恢复,再重新同步数据即可