關於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服務恢復,再重新同步數據即可

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM