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

 

posted @   叮伱格斐呃  阅读(1331)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
Live2D
欢迎阅读『关于mysql主从架构master宕机后,请求转移问题解决办法』
点击右上角即可分享
微信分享提示