溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中Router高可用的原理是什么

發(fā)布時間:2021-07-13 16:06:07 來源:億速云 閱讀:155 作者:Leah 欄目:數(shù)據(jù)庫

今天就跟大家聊聊有關(guān)MySQL中Router高可用的原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

Mysql route介紹

什么是mysql route

MySQL Router是處于應用client和dbserver之間的輕量級代理程序,它能檢測,分析和轉(zhuǎn)發(fā)查詢到后端數(shù)據(jù)庫實例,并把結(jié)果返回給client。是mysql-proxy的一個替代品。其架構(gòu)圖和功能如下。

MySQL中Router高可用的原理是什么

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

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

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

讀寫分離原理

MySQL Router接受前端應用程序請求后,根據(jù)不同的端口來區(qū)分讀寫,把連接讀寫端口的所有查詢發(fā)往主庫,把連接只讀端口的select查詢以輪詢方式發(fā)往多個從庫,從而實現(xiàn)讀寫分離的目的。讀寫返回的結(jié)果會交給MySQL Router,由MySQL Router返回給客戶端的應用程序。

Mysql router用途

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

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

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

mysql router實驗架構(gòu)介紹

實驗環(huán)境架構(gòu)圖如下:

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、創(chuàng)建配置文件目錄,復制模版配置文件

[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、配置文件設置,日志目錄需要自己手動創(chuàng)建

[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  # 主節(jié)點故障轉(zhuǎn)移配置  [routing:basic_failover]  # 寫節(jié)點地址  bind_address=192.168.100.10  # 寫節(jié)點端口  bind_port = 7001  # 模式,讀寫  mode = read-write  # 主節(jié)點地址:默認情況下第一臺主數(shù)據(jù)庫為寫主庫,當?shù)谝慌_主數(shù)據(jù)庫DOWN機后,第二臺數(shù)據(jù)庫被提升為主庫  destinations = 192.168.100.11:3306,192.168.100.12:3306  # 從節(jié)點負載均衡配置  [routing:balancing]  # 綁定的IP地址  bind_address=192.168.100.10  # 監(jiān)聽的端口  bind_port = 7002  # 連接超時時間  connect_timeout = 3  # 最大連接數(shù)  max_connections = 1024  # 后端服務器地址  destinations = 192.168.100.12:3306,192.168.100.13:3306  # 模式:讀還是寫  mode = read-only  [keepalive]  interval = 60

日志目錄創(chuàng)建及授權(quán)

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

(4) 啟動:mysql route官方?jīng)]有提供啟動腳本,需要自己編寫

[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、創(chuàng)建測試帳號,測試庫

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

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

MySQL中Router高可用的原理是什么

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

MySQL中Router高可用的原理是什么

從庫down機測試

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

MySQL中Router高可用的原理是什么

主主故障切換測試

驗證:正常情況下數(shù)據(jù)寫入都是寫到主庫

MySQL中Router高可用的原理是什么

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

MySQL中Router高可用的原理是什么

注意:

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

2、第一臺主庫DOWN后,MySQL Router如何處理?

默認情況下第一臺主數(shù)據(jù)庫為寫主庫,當?shù)谝慌_主數(shù)據(jù)庫DOWN機后,第二臺數(shù)據(jù)庫被提升為主庫,稍后如果第一臺主庫被修復后,那么默認仍然連接第二臺為主庫進行讀寫,不會自動切回到第一臺主庫。

3、如果第一臺主數(shù)據(jù)庫被修復后,又希望切換回第一臺主庫,怎么辦?

可以重啟MySQL Router

主主故障切換的坑

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

MySQL中Router高可用的原理是什么

在一主多從的情況,如果主庫down機,切換到備份節(jié)點,其他從庫的主庫地址連接還是故障的主庫,這樣就會造成一個從庫slave_io線程connecting狀態(tài),造成復制延遲。我之前的主庫地址是192.168.10.11,備份主庫地址是192.168.10.12,但是主庫故障之后,mysql route可以把寫請求路由到新的主庫,但是從庫嘗試連接的主庫還是192.168.10.11,這種情況是正常的,因為mysql router主主故障切換原理就是這樣,但是生產(chǎn)環(huán)境就不能這么玩了。

解決辦法:

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

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

看完上述內(nèi)容,你們對MySQL中Router高可用的原理是什么有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI