MySQL路由器8.0

MySQL Router 8.0

文件生成於:2019-09-13(修訂:63490)html

摘要

MySQL 路由器是 InnoDB 集羣的一部分,是輕量級中間件,可在應用程序和後端 MySQL 服務器之間提供透明路由。它可用於各類用例,例如經過有效地將數據庫流量路由到適當的後端 MySQL 服務器來提供高可用性和可伸縮性。可插拔架構還使開發人員可以針對自定義用例擴展 MySQL 路由器。有關用 MySQL 路由器如何構建 InnoDB 羣集的其餘詳細信息,請參閱 InnoDB羣集mysql

強烈建議 MySQL Router 8.0 與 MySQL Server 8.0 或 5.7 版一塊兒使用。git

有關詳細說明每一個版本中的更改的說明,請參閱 MySQL Router發行說明github

若是您還沒有安裝 MySQL Router,請從 下載站點下載。sql

有關使用MySQL的幫助,請訪問 MySQL論壇,在那裏您能夠與其餘MySQL用戶討論您的問題。shell

MySQL Router 分商業版本和社區版本,許可信息不太同樣數據庫

目錄bootstrap

  1. 通常信息
  2. 安裝 MySQL Router
  3. 部署 MySQL Router
  4. 配置
  5. MySQL Router 應用程序
  6. MySQL Router 常見問題解答

第1章通常信息

目錄

1.1 MySQL InnoDB集羣的路由
1.2集羣元數據和狀態
1.3鏈接路由
1.4應用注意事項
1.5 MySQL Router 8.0的新功能
MySQL路由器是高可用性(HA)解決方案的構建塊。它經過智能地將鏈接路由到MySQL服務器來簡化應用程序開發,從而提升性能和可靠性。後端

MySQL Router 8 徹底支持 MySQL 5.7 和 MySQL 8,它取代了MySQL Router 2.x系列。若是您當前使用的是Router 2.0或2.1,那麼咱們建議您將安裝升級到MySQL Router 8。緩存

1.1 MySQL InnoDB集羣的路由

MySQL路由器是InnoDB集羣的一部分,是輕量級中間件,可在應用程序和後端MySQL服務器之間提供透明路由。它用於各類用例,例如經過將數據庫流量路由到適當的後端MySQL服務器來提供高可用性和可伸縮性。可插拔架構還使開發人員可以針對自定義用例擴展MySQL路由器。

有關Router如何成爲InnoDB集羣的其餘詳細信息,請參閱InnoDB集羣。

介紹

對於客戶端應用程序來處理故障轉移,他們須要瞭解InnoDB集羣拓撲並知道哪一個MySQL實例是PRIMARY。雖然應用程序能夠實現該邏輯,但MySQL路由器能夠爲您提供和處理此功能。

MySQL使用組複製在多個服務器之間複製數據庫,同時在服務器發生故障時執行自動故障轉移。當與MySQL InnoDB集羣一塊兒使用時,MySQL路由器充當代理,以隱藏網絡上的多個MySQL實例,並將數據請求映射到其中一個集羣實例。只要有足夠的在線副本而且組件之間的通訊無缺無損,應用程序就可以聯繫其中一個。MySQL路由器也可讓應用程序鏈接到MySQL路由器而不是直接鏈接到MySQL。

使用MySQL InnoDB集羣部署路由器
MySQL路由器的推薦部署模型是InnoDB集羣,其中Router與應用程序位於同一主機上。

配置集羣后,使用InnoDB集羣部署MySQL路由器的步驟以下:

安裝 MySQL路由器。

Bootstrap InnoDB集羣,並進行測試。

Bootstrapping經過使用--bootstrap和其餘命令行選項自動爲現有InnoDB集羣配置MySQL路由器 。在引導期間,路由器鏈接到羣集,獲取其元數據,並配置本身使用。Bootstrapping是可選的。

有關其餘信息,請參閱 第3章,部署MySQL路由器。

設置MySQL路由器以實現自動啓動。

將系統配置爲在從新引導主機時自動啓動MySQL路由器,該過程相似於MySQL服務器配置爲自動啓動的過程。有關其餘詳細信息,請參見 第5.1節「啓動MySQL路由器」。

例如,在建立MySQL InnoDB集羣后,您可使用如下命令配置MySQL路由器:

shell> mysqlrouter --bootstrap localhost:3310 --directory /opt/myrouter --user snoopy

此示例將MySQL路由器引導至現有的InnoDB集羣,其中:

localhost:3310 是InnoDB集羣的成員,PRIMARY或引導程序將重定向到集羣中的PRIMARY。

因爲使用了可選的 --directory引導選項,所以本示例建立一個包含全部生成的目錄和文件的自包含安裝 /opt/myrouter/。這些文件包括 start.sh,stop.sh, log/,和一個全功能的MySQL路由器配置文件名爲 mysqlrouter.conf。

只有主機的系統用戶snoopy 才能訪問/opt/myrouter/*。

有關--bootstrap修改引導程序配置過程的方法,請參閱相關選項。例如,傳入 --conf-use-sockets啓用Unix域套接字鏈接,由於默認狀況下僅啓用TCP / IP鏈接。

1.2集羣元數據和狀態

MySQL路由器經過坐在應用程序和MySQL服務器之間工做。應用程序一般鏈接到路由器,就好像它們鏈接到普通的MySQL服務器同樣。每當應用程序鏈接到路由器時,路由器從其知道的候選池中選擇合適的MySQL服務器,而後鏈接到它。從那一刻開始,Router轉發應用程序和MySQL之間的全部網絡流量,包括從它返回的響應。

MySQL路由器保留在線MySQL服務器的緩存列表,或配置的InnoDB集羣的拓撲和狀態。最初,當路由器啓動時,列表從路由器的配置文件加載。當使用該--bootstrap選項引導路由器時,此列表是使用InnoDB羣集服務器生成的 。

爲了更新緩存,元數據緩存組件與包含元數據的InnoDB集羣服務器之一保持開放鏈接。它經過從MySQL的性能模式查詢元數據數據庫和實時狀態信息來實現。每當修改InnoDB集羣時都會更改集羣元數據,例如使用MySQL Shell添加或刪除MySQL服務器,而且只要檢測到集羣狀態更改,就會經過MySQL服務器的Group Replication插件實時更新performance_schema表。例如,若是其中一個MySQL服務器出現意外關閉。

當路由器檢測到鏈接的MySQL服務器關閉時,例如由於元數據緩存已丟失其鏈接而沒法再次鏈接,它會嘗試鏈接到不一樣的MySQL服務器以重新的MySQL服務器獲取元數據和InnoDB集羣狀態。

關閉的MySQL服務器的應用程序鏈接會自動關閉。而後,他們必須從新鏈接到Router,後者將它們重定向到在線MySQL服務器。

1.3鏈接路由

鏈接路由意味着將MySQL鏈接重定向到可用的MySQL服務器。MySQL數據包完整路由,無需檢查。有關使用基本鏈接路由的示例部署,請參見 第3.3節「基本鏈接路由」。

應用程序鏈接到MySQL路由器而不是直接鏈接到MySQL服務器,若是鏈接失敗,則應用程序將重試鏈接,由於MySQL路由器在嘗試失敗後選擇新的MySQL服務器。這也稱爲簡單重定向鏈接路由,由於它須要應用程序重試鏈接。也就是說,若是從MySQL路由器到MySQL服務器的鏈接中斷,則應用程序遇到鏈接失敗。可是,新的鏈接嘗試會觸發路由器查找並鏈接到另外一臺MySQL服務器。

路由服務器和路由策略在配置文件中定義。例如,如下部分告訴MySQL路由器監聽localhost的端口7002上的鏈接,而後將這些鏈接重定向到由該destinations選項定義的MySQL實例,包括在本地主機上運行的服務器偵聽端口3306,3307和3308。咱們還使用該 routing_strategy選項來使用循環形式的負載平衡。有關其餘信息,請參見 第4.3節「配置選項」

[routing:simple_redirect]
bind_port = 7002
routing_strategy = round-robin
destinations = localhost:3306,localhost:3307,localhost:3308

此示例部分標題爲 routing:simple_redirect。第一部分 routing是內部使用的部分名稱,用於肯定要加載的插件。第二部分 simple_redirect是可選的部分鍵,用於區分其餘路由策略。

當服務器再也不可訪問時,MySQL路由器將移動到列表中的下一個服務器目標,若是列表按照循環策略耗盡,則循環回第一個服務器目標。

注意
在MySQL Router 8.0以前,使用了現已棄用的 mode選項,而不是routing_strategy MySQL Router 8.0中添加的選項。

1.4應用注意事項

MySQL路由器使用不須要特定的庫或接口。除了管理MySQL路由器實例以外,編寫應用程序就像MySQL路由器是典型的MySQL實例同樣。

使用MySQL路由器的惟一區別是如何創建與MySQL服務器的鏈接。必須更新在啓動時使用單個MySQL鏈接而不測試鏈接錯誤的應用程序。這是由於MySQL路由器在嘗試鏈接時重定向鏈接,而且不讀取數據包或執行分析。若是MySQL服務器出現故障,Router會將鏈接錯誤返回給應用程序。

出於這些緣由,應編寫應用程序以測試鏈接錯誤,若是遇到,則重試鏈接。若是在您的應用程序中使用此技術或相似技術,那麼使用MySQL路由器將不須要任何額外的努力。

如下內容更好地說明了爲何您可能但願使用MySQL路由器並從應用程序的角度研究它的使用方式。

方案

MySQL路由器有幾種可能的場景,包括:

做爲開發人員,我但願個人應用程序鏈接到服務,以便默認狀況下鏈接到組複製集羣的當前主服務器。

做爲管理員,我想設置多個服務,以便MySQL路由器在每一個高可用副本集的不一樣端口上進行偵聽。

做爲管理員,我但願可以在端口3306上運行鏈接路由服務,以使其對用戶或應用程序更加透明。

做爲管理員,我想爲每一個鏈接路由服務配置一個模式,以便指定是返回主服務器仍是輔助服務器。

MySQL路由器的工做流程
使用MySQL路由器的工做流程以下:

  • MySQL客戶端或鏈接器鏈接到MySQL路由器,例如,端口6446。
  • 路由器檢查可用的MySQL服務器。

    • 路由器打開與合適的MySQL服務器的鏈接。
    • 路由器在應用程序和MySQL服務器之間來回轉發數據包
    • 若是鏈接的MySQL服務器出現故障,路由器將斷開鏈接。而後,應用程序能夠重試鏈接到路由器,而後路由器選擇一個不一樣的可用MySQL服務器。

使用MySQL路由器鏈接

應用程序鏈接到MySQL路由器,路由器將應用程序鏈接到可用的MySQL服務器。

此示例演示鏈接是否透明地鏈接到其中一個InnoDB集羣實例。由於此示例使用沙盒InnoDB集羣,其中全部實例都在同一主機上運行,​​因此咱們檢查port 狀態變量以查看鏈接了哪一個MySQL實例。

使用MySQL客戶端鏈接MySQL路由器,例如:

shell> mysql -u root -h 127.0.0.1 -P 6446 -p

這些端口號取決於您的配置,但在此示例中比較端口:

mysql> select @@port;
+--------+
| @@port |
+--------+
|   3310 |
+--------+
1 row in set (0.00 sec)

總而言之,客戶端(應用程序)鏈接到端口6446但鏈接到端口3310上的MySQL實例。

建議

如下是使用MySQL路由器的建議。

在與應用程序相同的主機上安裝並運行MySQL Router。有關緣由的列表,請參閱 第3章,部署MySQL路由器。

bind_port = 127.0.0.1:<port>在配置文件中 使用路由器綁定到localhost 。或者,在Linux上,禁用TCP鏈接(請參閱參考資料 --conf-skip-tcp)並將其限制爲僅使用Unix套接字鏈接(請參閱參考資料 --conf-use-sockets)。

1.5 MySQL Router 8.0的新功能

本節總結了MySQL Router 8.0中添加的許多與MySQL Router 2.1相關的新功能。

版本編號

MySQL Router 8.0.3是第一個使用新編號的8.0.x版本,是MySQL Router 2.1.4的後續版本。

MySQL鏈接器和其餘MySQL客戶端工具和應用程序如今將其版本號的第一個數字與它們支持的(最高)MySQL服務器版本同步。此更改使您能夠輕鬆直觀地肯定要將哪一個客戶端版本用於哪一個服務器版本。一樣,MySQL路由器如今使用與MySQL服務器相同的版本號。

新功能和變化

routing_strategy 添加了 可選 配置選項。可用的值是 first-available, next-available, round-robin,和 round-robin-with-fallback。

之前,這些策略經過mode配置選項描述爲調度模式,其中讀寫模式默認爲第一個可用策略,而只讀模式默認爲循環策略。這保留了這些模式的先前行爲。

在--ssl-key和 --ssl-cert可選的引導命令行選項添加。他們直接使用MySQL客戶端的對應方,並指定客戶端證書和私鑰以方便客戶端身份驗證。當在引導期間使用的root賬戶是使用REQUIRE X509建立時,這頗有用,這須要客戶端在登陸時進行身份驗證。

添加了 新的 connect_timeout 和 read_timeout元數據配置文件選項。它們在[DEFAULT]命名空間下定義,並影響內部操做,例如元數據服務器鏈接。

Bootstrap如今接受InnoDB集羣的任何成員,並自動查找並從新鏈接到可寫主服務器。之前,只接受了初級。

Bootstrap如今接受該 --config選項並讀取[logger] level 選項的定義。

最大併發客戶端鏈接數從大約500增長到超過5000,這個限制如今取決於操做系統。爲此,基於select()的fd事件調用被poll()(或Windows上的WSAPoll())取代。

添加了 一個新的mysqlrouter_plugin_info實用程序來幫助調試MySQL路由器插件。它提供了諸如插件版本,描述,ABI版本,要求和函數指針之類的信息。

其餘變動

有關MySQL Router 8.0中引入的全部更改的完整列表,請參閱 MySQL Router 8.0發行說明

第2章安裝MySQL路由器

目錄

2.1在Linux上安裝MySQL路由器
2.2在macOS上安裝MySQL路由器
2.3在Windows上安裝MySQL路由器
2.4從源代碼安裝MySQL路由器
本章介紹如何獲取和安裝MySQL路由器。可從 下載站點下載。

2.1在Linux上安裝MySQL路由器

MySQL路由器的二進制發行版可用於幾種Linux版本,包括Fedora,Oracle Linux,Red Hat和Ubuntu。

安裝選項包括:

官方MySQL Yum或APT存儲庫包:這些二進制文件由MySQL Release團隊構建。有關安裝這些的詳細信息,請參閱使用 Yum 或 APT安裝它們的快速指南 。

下載官方MySQL軟件包:可從 https://dev.mysql.com/downloa... 。使用首選軟件包管理器下載並安裝。

或者,從MySQL路由器8.0.13開始,MySQL路由器包含在MySQL服務器的源和單片二進制包中。

下載源代碼並自行編譯:源代碼可在 https://dev.mysql.com/downloa... tar.gzRPM或RPM包的形式得到。或者,源代碼也 能夠在GitHub上得到。

有關編譯MySQL路由器的信息,請參閱 從源代碼安裝MySQL路由器。

在Linux上安裝的過程取決於您的Linux發行版。

使用官方DEB或RPM軟件包安裝MySQL路由器會在MySQL路由器默認運行的主機上建立一個名爲「mysqlrouter」的本地系統用戶和組。有關其餘信息,請參閱系統 user的配置選項。

安裝DEB包
在Ubuntu和其餘使用Debian軟件包方案的系統上,您能夠下載並安裝.deb軟件包或使用APT軟件包管理器。

使用APT包管理器
按照MySQL APT Repository文檔中的描述安裝MySQL APT存儲 庫。例如:

注意
從這裏下載APT配置包 。

shell> sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb

在配置屏幕上啓用「MySQL工具和鏈接器」。

更新您的APT存儲庫:

shell> sudo apt-get update

安裝MySQL路由器。例如:

shell> sudo apt-get install mysql-router

手動安裝包
您也能夠下載.deb軟件包並從命令行安裝它

shell> sudo dpkg -i package.deb

package.deb是MySQL路由器包名稱; 例如, MySQL路由器版本號在哪裏。 mysql-router-version-1ubu1604-amd64.debversion

安裝RPM包
在基於RPM的系統上,您能夠下載並安裝RPM軟件包,也可使用Yum軟件包管理器。

使用Yum Package Manager
首先,按照MySQL Yum Repository文檔中的描述安裝MySQL Yum存儲 庫。例如:

注意
從這裏下載Yum配置包 。

shell> sudo rpm -Uvh mysql57-community-release-el7-11.noarch.rpm

接下來,安裝MySQL路由器。例如:

shell> sudo yum install mysql-router

手動安裝RPM包

shell> sudo rpm -i package.rpm

package.rpm是MySQL路由器包名稱; 例如, MySQL路由器版本號在哪裏。 mysql-router-version-el7.x86_64.rpmversion

卸載
在Linux上卸載MySQL路由器的過程取決於您使用的軟件包。

卸載DEB包
要卸載Debian軟件包,請使用如下命令:

shell> sudo dpkg -r mysql-router

此命令不會刪除配置文件。要刪除它們和數據目錄,請使用:

shell> sudo dpkg --purge mysql-router

注意
或者,使用apt-get remove mysql-router或apt-get purge mysql-router。

卸載RPM包
要卸載RPM軟件包,請使用如下命令:

shell> sudo rpm -e mysql-router

注意
一樣,使用yum remove mysql-router。

此命令不會刪除配置文件。

什麼不被刪除
不清除時,卸載過程不會刪除配置文件。在Debian系統上,這可能包括如下文件:

/etc/init.d/mysqlrouter
/etc/mysqlrouter/mysqlrouter.conf
/etc/apparmor.d/usr.sbin.mysqlrouter

第3章部署MySQL路由器

目錄

3.1引導MySQL路由器
3.2在沙盒中試用MySQL路由器
3.3基本鏈接路由
績效建議
爲了得到最佳性能,MySQL路由器一般與使用它的應用程序安裝在同一主機上。可能的緣由包括:

容許本地UNIX域套接字鏈接到應用程序,而不是TCP / IP。

注意
Unix域套接字能夠與鏈接到MySQL路由器的應用程序一塊兒使用,但不適用於鏈接到MySQL服務器的MySQL路由器。

減小網絡延遲。

容許MySQL路由器鏈接到MySQL,而不須要爲路由器的主機提供額外的賬戶,對於專門爲應用程序主機建立的MySQL賬戶,例如 myapp@198.51.100.45而不是像myapp @%這樣的值 。

一般,應用程序服務器最容易擴展。

您能夠在網絡上運行多個MySQL路由器實例,而無需將MySQL路由器隔離到單個計算機上。這是由於MySQL路由器對任何特定服務器或主機都沒有親和力。

圖片描述
圖3.1 MySQL路由器部署示例

示例部署顯示了一箇中央組複製和高可用性設置,其中有三個實體指向或鏈接到它:MySQL Shell和兩個堆棧,每一個堆棧包括MySQL路由器,MySQL鏈接器和應用程序。

3.2在沙盒中試用MySQL路由器

經過使用InnoDB集羣設置路由器沙箱來測試MySQL路由器安裝。在這種狀況下,路由器充當中間節點,將客戶端鏈接重定向到服務器列表。若是一臺服務器出現故障,客戶端將重定向到列表中的下一個可用服務器。

設置MySQL服務器沙箱
首先啓動三個MySQL服務器。您能夠經過多種方式執行此操做,包括:

使用InnoDB集羣提供的MySQL Shell AdminAPI接口。這是推薦且最簡單的方法,本節將對此進行介紹。有關其餘信息,請參閱 InnoDB Cluster。

有關腳本方法,請參閱 Scripting AdminAPI或 https://github.com/mattlord/D...

經過在三個不一樣的主機上或在同一主機上安裝三個MySQL Server實例。

使用mysql-test-run.plMySQL Test Suite框架中的腳本。有關其餘信息,請參閱MySQL測試套件。

使用mysqlcloneserver MySQL實用程序。

如下示例使用AdminAPI方法設置咱們的羣集沙箱。這是一個簡要的概述,請參閱 InnoDB集羣手冊中的InnoDB Cluster的Sandbox部署以獲取更多詳細信息。如下假設您安裝了當前版本的MySQL Shell,MySQL Server和MySQL Router。

部署沙箱羣集
此示例使用MySQL Shell AdminAPI來設置具備三個MySQL實例(一個主要和兩個輔助實例)的InnoDB集羣,以及帶有生成配置文件的自舉獨立MySQL路由器。使用「......」縮短輸出。

shell> mysqlsh

mysql-js> dba.deploySandboxInstance(3310)
...
mysql-js> dba.deploySandboxInstance(3320)
...
mysql-js> dba.deploySandboxInstance(3330)
...

mysql-js> connect root@localhost:3310
...

mysql-js> cluster = dba.createCluster("myCluster")
...

mysql-js> cluster.addInstance("root@localhost:3320")
...
mysql-js> cluster.addInstance("root@localhost:3330")
...

mysql-js> cluster.status()
{

"clusterName": "myCluster", 
"defaultReplicaSet": {
    "name": "default", 
    "primary": "localhost:3310", 
    "ssl": "REQUIRED", 
    "status": "OK", 
    "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", 
    "topology": {
        "localhost:3310": {
            "address": "localhost:3310", 
            "mode": "R/W", 
            "readReplicas": {}, 
            "role": "HA", 
            "status": "ONLINE"
        }, 
        "localhost:3320": {
            "address": "localhost:3320", 
            "mode": "R/O", 
            "readReplicas": {}, 
            "role": "HA", 
            "status": "ONLINE"
        }, 
        "localhost:3330": {
            "address": "localhost:3330", 
            "mode": "R/O", 
            "readReplicas": {}, 
            "role": "HA", 
            "status": "ONLINE"
        }
    }
}, 
"groupInformationSourceMember": "mysql://root@localhost:3310"

}

mysql-js> q

Bye!
設置路由器
接下來,設置MySQL Router以重定向到這些MySQL實例。咱們將使用bootstrapping(using --bootstrap),並使用 建立一個獨立的MySQL路由器安裝 --directory。這使用元數據緩存插件來安全地存儲憑據。

shell> mysqlrouter --bootstrap root@localhost:3310 --directory /tmp/myrouter

Please enter MySQL password for root:

Bootstrapping MySQL Router instance at '/tmp/mysqlrouter'...
MySQL Router has now been configured for the InnoDB cluster 'myCluster'.

The following connection information can be used to connect to the cluster.

Classic MySQL protocol connections to cluster 'myCluster':

  • Read/Write Connections: localhost:6446
  • Read/Only Connections: localhost:6447

X protocol connections to cluster 'myCluster':

  • Read/Write Connections: localhost:64460
  • Read/Only Connections: localhost:64470

shell> cd /tmp/myrouter

shell> ./start.sh
MySQL路由器現已配置並運行,而且正在使用咱們以前設置的 myCluster集羣。

測試路由器
如今經過鏈接到配置的MySQL路由器端口,像鏈接任何其餘MySQL服務器同樣鏈接到MySQL路由器。

如下示例鏈接到端口6446上的MySQL路由器,咱們爲讀寫鏈接配置的端口:

shell> mysql -u root -h 127.0.0.1 -P 6446 -p
mysql> SELECT @@port;

@@port
3310

如圖所示,咱們使用端口6446鏈接到MySQL路由器,可是看到咱們鏈接到端口3310(咱們的PRIMARY)上的MySQL實例。接下來讓咱們鏈接到一個只讀的MySQL實例:

shell> mysql -u root -h 127.0.0.1 -P 6447 -p
mysql> SELECT @@port;

@@port
3320

如圖所示,咱們使用端口6447鏈接到MySQL路由器,可是看到咱們鏈接到端口3320(咱們的輔助設備之一)上的MySQL實例。只讀模式默認爲循環策略,其中下一個鏈接引用不一樣的輔助:

shell> mysql -u root -h 127.0.0.1 -P 6447 -p
mysql> SELECT @@port;

@@port
3330

如圖所示,咱們與端口6447的第二個只讀鏈接鏈接到不一樣的MySQL輔助節點,在這種狀況下鏈接到端口3330而不是3320。

如今經過首先殺死咱們鏈接到上面的主MySQL實例(端口3310)來測試故障轉移。

shell> mysqlsh --uri root@127.0.0.1:6446

mysql-js> dba.killSandboxInstance(3310)

The MySQL sandbox instance on this host in
/home/philip/mysql-sandboxes/3310 will be killed

Killing MySQL instance...

Instance localhost:3310 successfully killed.
您能夠繼續使用MySQL Shell檢查鏈接,但讓咱們使用上面咱們作的相同的mysql客戶端示例:

shell> mysql -u root -h 127.0.0.1 -P 6446 -p
mysql> SELECT @@port;

@@port
3320

shell> mysql -u root -h 127.0.0.1 -P 6447 -p
mysql> SELECT @@port;

@@port
3330

如圖所示,儘管鏈接到相同的端口(主端口爲6446,輔助端口爲6447),但底層端口已更改。咱們的新主服務器從端口3310更改成3320,而咱們的輔助服務器從3320更改成3330。

咱們如今已經演示了MySQL路由器執行簡單的重定向到主要和次要MySQL實例的列表。

3.3基本鏈接路由

該鏈接路由插件執行基於鏈接的路由,這意味着它的數據包轉發到服務器,而不檢查它們。這是一種提供高吞吐量的簡單方法。有關鏈接路由的其餘常規信息,請參見 第1.3節「鏈接路由」。

一個簡單的基於鏈接的路由設置以下所示。第4.3.2節「配置文件選項」中介紹了這些和其餘選項 。

[logger]
level = INFO

[routing:secondary]
bind_address = localhost
bind_port = 7001
destinations = foo.example.org:3306,bar.example.org:3306,baz.example.org:3306
routing_strategy = round-robin

[routing:primary]
bind_address = localhost
bind_port = 7002
destinations = foo.example.org:3306,bar.example.org:3306
routing_strategy = first-available

在這裏,咱們使用鏈接路由來循環MySQL鏈接到端口7001上的三個MySQL服務器,如循環法 所定義 routing_strategy。此示例還使用端口7002爲兩個服務器配置第一個可用策略。第一個可用策略使用目標列表中的第一個可用服務器。分配給每一個實例的MySQL實例數 destinations取決於您,由於這只是一個示例。路由器不會檢查數據包,也不會根據分配的策略或模式限制鏈接,所以應用程序能夠肯定在何處發送讀取和寫入請求,在咱們的示例中爲端口7001或7002。

注意
在MySQL Router 8.0以前,使用了現已棄用的 mode選項,而不是routing_strategy MySQL Router 8.0中添加的選項。

假設全部三個MySQL實例都在運行,接下來經過傳入配置文件啓動MySQL路由器:

shell> ./bin/mysqlrouter -config=/etc/mysqlrouter-config.conf

如今,MySQL路由器正在偵聽端口7001和7002,並將請求發送到適當的MySQL實例。例如:

shell> ./bin/mysql --user=root --port 7001 --protocol=TCP

首先鏈接到foo.example.org,而後是bar.example.org,而後是baz.example.org,第四個調用將返回foo.example.org。相反,咱們以不一樣方式配置端口7002的行爲:

shell> ./bin/mysql --user=root --port 7002 --protocol=TCP首先鏈接到foo.example.org,其餘請求將繼續鏈接到foo.example.org,直到出現故障,此時bar.example.org如今被使用。有關此行爲的其餘信息,請參閱 mode。

相關文章
相關標籤/搜索