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服务恢复,再重新同步数据即可
|