Menu
快讀
  • 旅遊
  • 生活
    • 美食
    • 寵物
    • 養生
    • 親子
  • 娛樂
    • 動漫
  • 時尚
  • 社會
  • 探索
  • 故事
  • 科技
  • 軍事
  • 国际
快讀

官方工具:《MySQL Router 高可用原理與實戰》

2020 年 1 月 6 日 JAVA高级程序员
作者:民工哥
鏈接:https://segmentfault.com/a/1190000020751216?utm_source=tuicool&utm_medium=referral
官方工具:《MySQL Router 高可用原理與實戰》

Mysql route介紹

什麽是mysql route

MySQL Router是處于應用client和dbserver之間的輕量級代理程序,它能檢測,分析和轉發查詢到後端數據庫實例,並把結果返回給client。是mysql-proxy的一個替代品。其架構圖和功能如下。

官方工具:《MySQL Router 高可用原理與實戰》

(1)Router實現讀寫分離,程序不是直接連接數據庫IP,而是固定連接到mysql router。MySQL Router對前端應用是透明的。應用程序把MySQL Router當作是普通的mysql實例,把查詢發給MySQL Router,而MySQL Router會把查詢結果返回給前端的應用程序。

(2)從數據庫服務器故障,業務可以正常運行。由MySQL Router來進行自動下線不可用服務器。程序配置不需要任何修改。

(3)主數據庫故障,由MySQL Router來決定主從自動切換,業務可以正常訪問。程序配置不需要做任何修改。

讀寫分離原理

MySQL Router接受前端應用程序請求後,根據不同的端口來區分讀寫,把連接讀寫端口的所有查詢發往主庫,把連接只讀端口的select查詢以輪詢方式發往多個從庫,從而實現讀寫分離的目的。讀寫返回的結果會交給MySQL Router,由MySQL Router返回給客戶端的應用程序。

Mysql router用途

MySQL Router的主要用途是讀寫分離,主主故障自動切換,負載均衡,連接池等。

Mysql router主主故障自動切換的坑

Mysql router主主故障切換功能經過測試沒有問題,但是有一個比較大的坑需要注意,具體是什麽坑和解決方法在文章末尾,因爲你之前要是沒用接觸過mysql router估計以我的表達能力,說了你就暈了。

mysql router實驗架構介紹

實驗環境架構圖如下:

官方工具:《MySQL Router 高可用原理與實戰》

安裝部署mysql route

(1)下載地址:提供不同平台,二進制包和rpm包,選擇合適安裝方式即可,我這裏使用二進制包安裝

(2)解壓安裝

[root@c7-node1 ~]# tar xf mysql-router-2.0.3-linux-glibc2.12-x86-64bit.tar.gz -C /usr/local/
[root@c7-node1 ~]# cd /usr/local/
[root@c7-node1 local]# ln -s mysql-router-2.0.3-linux-glibc2.12-x86-64bit/ mysql-router
[root@c7-node1 local]# cd mysql-router
[root@c7-node1 mysql-router]# ll
total 0
drwxr-xr-x 2 7161 wheel 24 Feb 23 2016 bin
drwxr-xr-x 4 7161 wheel 36 Feb 23 2016 include
drwxr-xr-x 3 7161 wheel 150 Feb 23 2016 lib
drwxrwxr-x 2 7161 wheel 6 Feb 23 2016 run
drwxr-xr-x 3 7161 wheel 16 Feb 23 2016 share

(3) 配置

1、創建配置文件目錄,複制模版配置文件

[root@c7-node1 mysql-router]# mkdir /etc/mysql-route/
[root@c7-node1 mysql-router]# cp share/doc/mysqlrouter/sample_mysqlrouter.ini /etc/mysql-route/mysqlrouter.conf

2、配置文件設置,日志目錄需要自己手動創建

[root@node1 ~]# cat /etc/mysql-route/mysqlrouter.conf
[DEFAULT]
# 日志存放目錄
logging_folder = /data/log/mysql-route
# 插件存放目錄
plugin_folder = /usr/local/mysql-router/lib/mysqlrouter
# 配置文件存放目錄
config_folder = /etc/mysql-route
# 運行目錄
runtime_folder = /var/run
 
[logger]
# 日志運行級別
level = INFO
 
# 主節點故障轉移配置
[routing:basic_failover]
# 寫節點地址
bind_address=192.168.100.10
# 寫節點端口
bind_port = 7001
# 模式,讀寫
mode = read-write
# 主節點地址:默認情況下第一台主數據庫爲寫主庫,當第一台主數據庫DOWN機後,第二台數據庫被提升爲主庫
destinations = 192.168.100.11:3306,192.168.100.12:3306
 
# 從節點負載均衡配置
[routing:balancing]
# 綁定的IP地址
bind_address=192.168.100.10
# 監聽的端口
bind_port = 7002
# 連接超時時間
connect_timeout = 3
# 最大連接數
max_connections = 1024
# 後端服務器地址
destinations = 192.168.100.12:3306,192.168.100.13:3306
# 模式:讀還是寫
mode = read-only
 
[keepalive]
interval = 60

日志目錄創建及授權

[root@c7-node1 ~]# mkdir /data/log/mysql-route/
[root@c7-node1 ~]# chown mysql:mysql /data/log/mysql-route/

(4) 啓動:mysql route官方沒有提供啓動腳本,需要自己編寫

[root@c7-node1 ~]# cat /usr/lib/systemd/system/mysqlrouter.service
[Unit]
Description=MySQL Router
After=syslog.target
After=network.target
 
[Service]
Type=simple
User=mysql
Group=mysql
 
ExecStart=/usr/local/mysql-router/bin/mysqlrouter -c /etc/mysql-route/mysqlrouter.conf
 
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

5、啓動服務

[root@c7-node1 ~]# systemctl enable mysqlrouter
[root@c7-node1 ~]# systemctl start mysqlrouter

讀寫分離測試

1、創建測試帳號,測試庫

MariaDB [(none)]> create database mysql_route;
MariaDB [(none)]> GRANT all ON mysql_route.* TO 'route'@'%' IDENTIFIED BY 'route';
MariaDB [(none)]> FLUSH PRIVILEGES;

2、驗證讀負載均衡:從結果看到每次讀都是訪問不同的主機

官方工具:《MySQL Router 高可用原理與實戰》

3、驗證寫:可以看到每次寫都是寫到主節點

官方工具:《MySQL Router 高可用原理與實戰》

從庫down機測試

下面是從庫down機測試截圖,可以看到兩個節點都正常的情況下,是輪訓從兩個從庫取數據,如果其中一個從庫故障,那麽mysql router會自動下線故障的從庫,如果從庫恢複,mysql router會自動把從庫上線。

官方工具:《MySQL Router 高可用原理與實戰》

主主故障切換測試

驗證:正常情況下數據寫入都是寫到主庫

官方工具:《MySQL Router 高可用原理與實戰》

我們手動停止主庫的mysql服務,模擬故障,再次寫入,可以看到寫入數據的節點是主庫的備份節點。

官方工具:《MySQL Router 高可用原理與實戰》

注意:

1、備份從庫不能打開read-only = on,不然切換之後寫入會報錯

2、第一台主庫DOWN後,MySQL Router如何處理?

默認情況下第一台主數據庫爲寫主庫,當第一台主數據庫DOWN機後,第二台數據庫被提升爲主庫,稍後如果第一台主庫被修複後,那麽默認仍然連接第二台爲主庫進行讀寫,不會自動切回到第一台主庫。

3、如果第一台主數據庫被修複後,又希望切換回第一台主庫,怎麽辦?

可以重啓MySQL Router

主主故障切換的坑

Mysql router的主主故障切換如果是運行在一主一從的情況下,從庫作爲主庫的備份,這種情況是使用mysql router主主故障切換是沒有問題的,但是在一主多從的情況下使用主主故障切換就會處在如下問題。

官方工具:《MySQL Router 高可用原理與實戰》

在一主多從的情況,如果主庫down機,切換到備份節點,其他從庫的主庫地址連接還是故障的主庫,這樣就會造成一個從庫slave_io線程connecting狀態,造成複制延遲。我之前的主庫地址是192.168.10.11,備份主庫地址是192.168.10.12,但是主庫故障之後,mysql route可以把寫請求路由到新的主庫,但是從庫嘗試連接的主庫還是192.168.10.11,這種情況是正常的,因爲mysql router主主故障切換原理就是這樣,但是生産環境就不能這麽玩了。

解決辦法:

1、在切換時需要自己編寫腳本觸發一個shell腳本或者event來處理重連的問題。

2、不使用mysql router主主故障轉移功能,而是自己使用其他方式保證mysql主庫高可用。

如有侵權煩請告知,我們會立即刪除並表示歉意,謝謝。

官方工具:《MySQL Router 高可用原理與實戰》

相關文章:

  • 單日新高!新增447例,累計3699 | 不遵守新加坡防疫措施將被取消PR、准證
  • 解讀新加坡買房攻略和誤區
  • 留學獅城 | 爲什麽新加坡的空調這麽冷?
  • 新加坡旅行達人必備神器:訂新航 /Airbnb/攜程/景點/遊輪全線折上再返現!還送5000新幣等你拿!
  • 樟宜機場要滿足大家所有的聖誕購物幻想!無需出國,全場低至3折、狂發折扣碼、萬種商品參與折扣!
  • 重磅!所有女生朝思暮想的一天:新加坡Sephora會員日來了!皇後粉獨家福利 + 附贈必買草單!
科技

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

©2025 快讀 | 服務協議 | DMCA | 聯繫我們