Mysql數據庫高可用解決方案-Mysql Router

目錄

一.MySQL Router介紹

1. 什么是 MySQL Router?

2. MySQL Router 的主要用途

3. MySQL Router 的工作原理

4. MySQL Router 的核心組件

5. MySQL Router 的部署和配置

6. MySQL Router 的優勢

7. 注意事項

8. MySQL Router 與其他工具的對比

9. 總結

二.Mysql Router配置

1. MySQL Router 配置文件概述

2. 配置文件的常用部分和參數

2.1 [DEFAULT] 部分

2.2 [logger] 部分

2.3 [metadata_cache] 部分

2.4 [routing] 部分

3. 配置示例

4. 使用引導(Bootstrap)生成配置

5. 配置時的注意事項

6. 驗證配置

7. 高級配置示例

8. 總結


一.MySQL Router介紹

MySQL Router 是一個輕量級中間件,用于在應用程序和后端 MySQL 服務器之間提供透明的連接路由。它是 MySQL 高可用性(HA)解決方案的重要組成部分,特別是在 MySQL InnoDB Cluster 和 Group Replication 環境中。以下是對 MySQL Router 的詳細介紹,包括其功能、用途、架構和工作原理。

1. 什么是 MySQL Router?

MySQL Router 是 MySQL 官方提供的一個工具,旨在簡化應用程序與 MySQL 數據庫集群之間的連接管理。它通過智能路由數據庫流量到合適的后端 MySQL 服務器,支持高可用性、可擴展性和負載均衡等功能。MySQL Router 不直接處理數據包內容,而是基于連接進行路由,因此性能開銷低,適合高吞吐量場景。

核心特性:

  1. 透明路由:應用程序連接到 MySQL Router 就像連接到單個 MySQL 實例,無需修改應用程序邏輯。
  2. 高可用性:自動處理主節點故障并將連接重定向到可用節點。
  3. 負載均衡:支持多種路由策略(如輪詢、首選可用),分發連接到不同服務器。
  4. 插件化架構:允許開發者通過插件擴展功能,滿足自定義需求。
  5. 與 InnoDB Cluster 集成:作為 InnoDB Cluster 的核心組件,自動從集群元數據獲取拓撲信息。

版本支持:

  1. MySQL Router 8.0 支持 MySQL Server 5.7 和 8.0。
  2. MySQL Router 8.4 支持 MySQL Server 8.0 和 8.4,但不支持更高版本(如 9.0)。

2. MySQL Router 的主要用途

MySQL Router 廣泛應用于以下場景:

高可用性(HA):

  1. 在主從復制或 InnoDB Cluster 中,MySQL Router 自動將連接路由到當前主節點(Primary)。
  2. 當主節點故障時,Router 檢測集群拓撲變化并將連接重定向到新的主節點,無需應用程序干預。

負載均衡:

  1. 對于讀操作,Router 可以將連接分發到從節點(Secondary),減輕主節點壓力。
  2. 支持輪詢(Round-Robin)或首選可用(First-Available)等策略。

簡化應用程序開發:

  1. 應用程序無需實現復雜的故障轉移邏輯,只需連接到 Router 的端口,Router 負責路由和故障處理。
  2. 對應用程序透明,連接方式與直接連接 MySQL 服務器一致。

集群管理:

  1. 在 InnoDB Cluster 中,Router 通過元數據緩存插件(Metadata Cache Plugin)與集群通信,動態獲取主從拓撲信息。

自定義擴展:

插件化架構允許開發者添加自定義路由邏輯或功能,例如特定的負載均衡策略。

示例場景:

應用程序連接到 Router 的端口(如 6446),Router 將寫請求路由到主節點,讀請求分發到從節點。

如果主節點故障,Router 自動將后續連接路由到新的主節點,應用程序只需重試連接。

3. MySQL Router 的工作原理

MySQL Router 作為應用程序和 MySQL 服務器之間的代理,負責管理連接路由。其工作流程如下:

客戶端連接:

  1. 應用程序(MySQL 客戶端或連接器)連接到 MySQL Router 監聽的端口(如 6446 或 6447)。
  2. Router 提供多個端口,通常分為讀寫(Read/Write)和只讀(Read-Only)端口。

路由決策:

  1. Router 根據配置的路由策略(如輪詢、首選可用)和集群元數據,選擇合適的后端 MySQL 服務器。
  2. 對于 InnoDB Cluster,Router 通過元數據緩存插件動態獲取主從拓撲。

連接轉發:

  1. Router 將客戶端的 MySQL 數據包直接轉發到目標服務器,不解析或修改數據包內容(連接路由方式),確保高性能。
  2. 如果目標服務器不可用,Router 返回連接錯誤,應用程序需重試連接,Router 會選擇其他可用服務器。

故障處理:

  1. 如果連接的 MySQL 服務器故障,Router 斷開客戶端連接,客戶端重試后 Router 選擇新的可用服務器。
  2. 在 InnoDB Cluster 中,Router 定期刷新元數據,檢測主從角色變化。

示例配置(簡化):

[routing:read_write]bind_address = 0.0.0.0bind_port = 6446destinations = metadata-cache://mycluster/default?role=PRIMARYmode = read-write[routing:read_only]bind_address = 0.0.0.0bind_port = 6447destinations = metadata-cache://mycluster/default?role=SECONDARYmode = read-only
  1. 6446 端口處理寫請求,路由到主節點。
  2. 6447 端口處理讀請求,路由到從節點(輪詢分發)。

4. MySQL Router 的核心組件

MySQL Router 的功能通過插件實現,主要包括以下核心插件:

Connection Routing Plugin:

連接路由插件 :

  1. 負責基于連接的路由,直接轉發 MySQL 數據包,提供最大吞吐量。
  2. 支持多種路由策略:

Round-Robin:輪詢分發連接,適合讀負載均衡。

First-Available:優先連接列表中的第一個可用服務器,適合主節點路由。

Next-Available:故障時切換到下一個可用服務器。

Round-Robin-with-Fallback:結合輪詢和故障轉移。

Metadata Cache Plugin:

與 InnoDB Cluster 或 Group Replication 集成,定期從集群元數據服務器獲取主從拓撲信息。

確保 Router 始終路由到正確的節點(主節點或從節點)。

Keepalive Plugin:

防止 Router 在無服務配置時立即退出,適用于某些部署場景。

Logger Plugin:

記錄 Router 的運行日志,用于調試和監控。

插件化架構:

開發者可以通過編寫自定義插件擴展 Router 功能,例如實現特定的路由邏輯或監控功能。

5. MySQL Router 的部署和配置

MySQL Router 通常部署在應用程序所在的同一主機上,以減少網絡延遲并支持本地 Unix 域套接字連接。以下是部署和配置的典型步驟:

安裝 MySQL Router:

從 MySQL 官方網站下載(如 MySQL Router 8.4 或 8.0):https://dev.mysql.com/downloads/router/

支持多種平臺(Linux、Windows、macOS 等)。

示例(Linux):

tar -xvf mysql-router-8.4.0-linux-glibc2.17-x86_64.tar.gz

配置 MySQL Router:

創建配置文件(通常為 mysqlrouter.conf),指定路由策略、端口和目標服務器。

示例(InnoDB Cluster):

[DEFAULT]logging_folder = /var/log/mysqlrouterruntime_folder = /var/run/mysqlrouter[logger]level = INFO[metadata_cache:mycluster]router_address = 127.0.0.1bootstrap_server_addresses = mysql://127.0.0.1:3310user = router_userpassword = router_pass[routing:read_write]bind_address = 0.0.0.0bind_port = 6446destinations = metadata-cache://mycluster/default?role=PRIMARYmode = read-write[routing:read_only]bind_address = 0.0.0.0bind_port = 6447destinations = metadata-cache://mycluster/default?role=SECONDARYmode = read-only

引導(Bootstrap):

使用 --bootstrap 選項自動配置 Router,從 InnoDB Cluster 獲取元數據:

mysqlrouter --bootstrap 127.0.0.1:3310 --directory /opt/myrouter --user snoopy

這會生成配置文件、啟動/停止腳本和日志目錄。

啟動 MySQL Router:

使用配置文件啟動:

mysqlrouter --config /path/to/mysqlrouter.conf

或使用引導生成的啟動腳本:

/opt/myrouter/start.sh

設置為開機啟動:

配置系統服務(如 systemd)以自動啟動 Router,類似于 MySQL 服務器的設置。

推薦部署方式:

將 Router 部署在應用程序主機上,綁定到 localhost(bind_address=127.0.0.1)。

使用不同的端口(如 6446 用于讀寫,6447 用于只讀)以區分流量類型。

6. MySQL Router 的優勢

  1. 高性能:基于連接路由,不解析數據包,延遲低,吞吐量高。
  2. 透明性:應用程序無需修改代碼,只需連接到 Router 的端口。
  3. 自動故障轉移:與 InnoDB Cluster 集成,動態適應主從角色變化。
  4. 靈活性:支持多種路由策略和插件擴展,適應不同場景。
  5. 易于管理:通過引導功能自動配置,減少手動配置工作。

7. 注意事項

應用程序重試邏輯:

Router 不解析數據包,服務器故障時會返回連接錯誤,應用程序需實現重試邏輯。

示例:應用程序檢測到連接錯誤后,重新連接到 Router 的同一端口。

權限要求:

引導時需要具有足夠權限的 MySQL 用戶(如對 mysql_innodb_cluster_metadata 表的訪問權限)。

示例權限:

GRANT SELECT, EXECUTE ON mysql_innodb_cluster_metadata.* TO 'router_user'@'%';GRANT INSERT, UPDATE, DELETE ON mysql_innodb_cluster_metadata.routers TO 'router_user'@'%';

端口沖突:

如果多個 Router 實例運行在同一主機上,需通過 base-port 配置避免端口沖突。

示例:base-port=3307。

性能影響:

Router 的性能開銷極低,但建議部署在應用程序主機上以減少網絡延遲。

版本兼容性:

確保 Router 版本與 MySQL 服務器版本兼容。例如,MySQL Router 8.4 不支持 MySQL 9.0。

日志和監控:

檢查 Router 日志(默認在 logging_folder 指定目錄)以排查問題。

示例日志:

2025-04-23 19:00:00 INFO [routing:read_write] started: listening on 0.0.0.0:6446; read-write2025-04-23 19:00:00 INFO [metadata_cache] Connected with metadata server running on 127.0.0.1:3310

8. MySQL Router 與其他工具的對比

特性

MySQL Router
MySQL 路由器

ProxySQL
代理 SQL

HAProxy

用途

MySQL 集群路由、HA、負載均衡

高級查詢路由、緩存、負載均衡

通用 TCP/HTTP 負載均衡

數據包解析

不解析,直接轉發(連接路由)

解析 SQL 查詢

不解析,直接轉發

性能

高(低開銷)

中(解析開銷)

高(通用負載均衡)

與 InnoDB Cluster 集成

原生支持,自動配置

需要手動配置

需要手動配置

復雜性

簡單,專注于 MySQL HA

功能豐富,配置復雜

通用性強,配置中等

典型場景

InnoDB Cluster、Group Replication
InnoDB 集群、組復制

復雜查詢路由、讀寫分離

通用負載均衡

選擇建議:

  1. 如果使用 InnoDB Cluster 或 Group Replication,優先選擇 MySQL Router,因其原生集成和簡單配置。
  2. 如果需要 SQL 級別路由或查詢緩存,考慮 ProxySQL。
  3. 如果需要通用負載均衡,HAProxy 是一個靈活的選擇。

9. 總結

MySQL Router 是一個輕量、高效的中間件,專為 MySQL 高可用性和負載均衡設計。它通過透明路由和自動故障轉移簡化了應用程序與 MySQL 集群的交互,特別適合 InnoDB Cluster 和 Group Replication 環境。其插件化架構和低性能開銷使其成為構建可擴展數據庫架構的理想選擇。

快速入門建議:

下載并安裝 MySQL Router(推薦 8.4 版本)。

使用 --bootstrap 選項自動配置與 InnoDB Cluster 的連接。

配置讀寫和只讀端口,啟動 Router 并測試連接。

確保應用程序支持連接重試以處理故障轉移。

信息來源于15個網頁:

1、https://www.mysql.com/products/enterprise/router.html

2、https://dev.mysql.com/doc/mysql-router/8.0/en/

3、https://dev.mysql.com/doc/mysql-router/8.4/en/mysql-router-innodb-cluster.html

4、

https://medium.com/%40umairhassan27/mysql-router-with-mysql-ndb-cluster-a-quick-guide-ed81e1410ece

5、https://dev.mysql.com/blog-archive/setting-up-mysql-router/

6、GitHub - mysql/mysql-router: MySQL Router is lightweight middleware that provides transparent routing between your application and any backend MySQL Servers.

7、

https://www.quora.com/What-is-the-purpose-behind-bootstrapping-a-MySQL-router-for-use-with-an-InnoDB-cluster

8、

https://blogs.oracle.com/cloud-infrastructure/post/simple-guide-deploying-mysql-router-mysql-database-service-oci

9、

https://hub.docker.com/r/mysql/mysql-router

10、

https://dev.mysql.com/doc/mysql-router/8.4/en/

11、

MySQL Router 8.0

12、

https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-general-using-developing.html

13、

https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-innodb-cluster.html

14、

https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-general.html

15、

https://dev.mysql.com/doc/mysql-shell-gui/en/mysql-shell-vscode-consoles-mysql-router.html

二.Mysql Router配置

MySQL Router 的配置是其核心功能實現的關鍵,通過配置文件(通常為 mysqlrouter.conf)定義路由策略、端口、目標服務器以及與 MySQL 集群的交互方式。本文將詳細講解 MySQL Router 的配置,包括配置文件結構、常用參數、配置示例以及配置時的注意事項,特別針對與 MySQL InnoDB Cluster 或 Group Replication 的集成。

1. MySQL Router 配置文件概述

MySQL Router 的配置文件采用 INI 格式,分為多個部分(Section),每個部分定義特定的功能模塊或路由策略。配置文件通常位于安裝目錄或通過 --bootstrap 自動生成。

配置文件路徑:

默認路徑:<安裝目錄>/mysqlrouter.conf 或通過 --config 指定。

引導(Bootstrap)模式生成路徑:<引導目錄>/mysqlrouter.conf。

基本結構:

[DEFAULT]logging_folder = /var/log/mysqlrouterruntime_folder = /var/run/mysqlrouter[logger]level = INFO[metadata_cache:cluster_name]...[routing:strategy_name]...

主要部分:

  1. [DEFAULT]:全局設置,例如日志和運行時目錄。
  2. [logger]:日志級別和輸出設置。
  3. [metadata_cache]:與 InnoDB Cluster 的元數據交互,用于動態獲取集群拓撲。
  4. [routing]:定義具體的路由策略,例如讀寫分離或負載均衡。

2. 配置文件的常用部分和參數

以下是 MySQL Router 配置中最常用的部分及其關鍵參數,附帶說明:

2.1 [DEFAULT] 部分

定義全局設置,適用于所有模塊。

logging_folder:日志文件存儲目錄。

示例:logging_folder = /var/log/mysqlrouter

默認:空(日志輸出到控制臺)。

runtime_folder:運行時文件(如 PID 文件或套接字文件)存儲目錄。

示例:runtime_folder = /var/run/mysqlrouter

默認:當前工作目錄。

plugin_folder:插件所在目錄(通常無需手動設置)。

示例:plugin_folder = /usr/lib/mysqlrouter

config_folder:配置文件目錄(通常無需設置)。

示例:config_folder = /etc/mysqlrouter

示例:

[DEFAULT]logging_folder = /var/log/mysqlrouterruntime_folder = /var/run/mysqlrouter

2.2 [logger] 部分

控制日志輸出級別和行為。

level:日志級別。

可選值:DEBUG、INFO(默認)、WARNING、ERROR、FATAL。

示例:level = INFO

filename(可選):日志文件名,覆蓋 [DEFAULT] 中的 logging_folder。

示例:filename = mysqlrouter.log

說明:

DEBUG 提供最詳細的日志,適合排查問題。

INFO 是生產環境的推薦級別,記錄關鍵操作。

2.3 [metadata_cache] 部分

用于與 InnoDB Cluster 或 Group Replication 集成,動態獲取集群主從拓撲信息。

group_replication_id(可選):指定 Group Replication 的組 ID。

示例:group_replication_id = aaabbbccc-dddd-eeee-ffff-gggghhhhiiii

bootstrap_server_addresses:集群元數據服務器的地址列表(MySQL 實例)。

格式:mysql://host:port[,host:port,...]

示例:bootstrap_server_addresses = mysql://127.0.0.1:3310,mysql://127.0.0.1:3320

user:訪問元數據的 MySQL 用戶名。

示例:user = router_user

password:元數據用戶的密碼(建議加密存儲)。

示例:password = router_pass

ttl:元數據緩存的生存時間(秒),控制拓撲刷新的頻率。

示例:ttl = 0.5(每 0.5 秒刷新)。

默認:0.5 秒。

metadata_cluster:集群名稱。

示例:metadata_cluster = mycluster

示例: metadata_cluster = mycluster

connect_timeout:連接元數據服務器的超時時間(秒)。

示例:connect_timeout = 30

read_timeout:讀取元數據的超時時間(秒)。

示例:read_timeout = 30

示例:

[metadata_cache:mycluster]bootstrap_server_addresses = mysql://127.0.0.1:3310,mysql://127.0.0.1:3320,mysql://127.0.0.1:3330user = router_userpassword = router_passttl = 0.5metadata_cluster = mycluster

說明:

bootstrap_server_addresses 應包含所有可能的元數據服務器地址(通常是集群中的所有節點)。

user 需要具有訪問 mysql_innodb_cluster_metadata 表的權限。

ttl 值越小,拓撲更新越頻繁,但會增加元數據查詢開銷。

2.4 [routing] 部分

定義具體的路由策略,例如讀寫分離或只讀負載均衡。每個 [routing] 部分對應一個路由實例。

bind_address:Router 監聽的地址。

示例:bind_address = 0.0.0.0(監聽所有接口)。

默認:127.0.0.1。

bind_port:Router 監聽的端口。

示例:bind_port = 6446

destinations:目標服務器或元數據緩存的引用。

靜態路由:host:port[,host:port,...]

動態路由:metadata-cache://cluster_name/replicaset_name?role=ROLE

示例:destinations = metadata-cache://mycluster/default?role=PRIMARY

角色選項:

  1. PRIMARY:主節點(讀寫)。
  2. SECONDARY:從節點(只讀)。
  3. PRIMARY_AND_SECONDARY:主從節點混合。

mode:路由模式。

read-write:路由到主節點,適合寫操作。

read-only:路由到從節點,適合讀操作。

示例:mode = read-write

protocol:連接協議。

可選值:classic(默認,MySQL 經典協議)、x(X Protocol)。

示例:protocol = classic

routing_strategy:路由策略。

first-available:選擇第一個可用服務器。

next-available:故障時切換到下一個服務器。

round-robin:輪詢分發連接。

round-robin-with-fallback:輪詢為主,故障時回退。

示例:routing_strategy = round-robin

max_total_connections:Router 接受的最大連接數。

示例:max_total_connections = 512

默認:512。

connect_timeout:連接目標服務器的超時時間(秒)。

示例:connect_timeout = 1

client_ssl_mode:客戶端到 Router 的 SSL 模式。

可選值:DISABLED、PREFERRED(默認)、REQUIRED。

示例:client_ssl_mode = PREFERRED

server_ssl_mode:Router 到服務器的 SSL 模式。

示例:server_ssl_mode = PREFERRED

示例:

[routing:read_write]
bind_address = 0.0.0.0
bind_port = 6446
destinations = metadata-cache://mycluster/default?role=PRIMARY
mode = read-write
routing_strategy = first-available
protocol = classic[routing:read_only]
bind_address = 0.0.0.0
bind_port = 6447
destinations = metadata-cache://mycluster/default?role=SECONDARY
mode = read-only
routing_strategy = round-robin
protocol = classic

說明:

read_write 路由用于寫操作,連接到主節點(role=PRIMARY)。

read_only 路由用于讀操作,輪詢分發到從節點(role=SECONDARY)。

端口 6446 和 6447 是常用約定,實際可自定義。

3. 配置示例

以下是一個完整的 MySQL Router 配置文件示例,適用于 InnoDB Cluster,提供讀寫分離和負載均衡。


[DEFAULT]logging_folder = /var/log/mysqlrouterruntime_folder = /var/run/mysqlrouter[logger]level = INFO[metadata_cache:mycluster]bootstrap_server_addresses = mysql://192.168.1.1:3306,mysql://192.168.1.2:3306,mysql://192.168.1.3:3306user = router_userpassword = router_passttl = 0.5metadata_cluster = myclusterconnect_timeout = 30read_timeout = 30[routing:read_write]bind_address = 0.0.0.0bind_port = 6446destinations = metadata-cache://mycluster/default?role=PRIMARYmode = read-writerouting_strategy = first-availableprotocol = classicmax_total_connections = 512connect_timeout = 1client_ssl_mode = PREFERREDserver_ssl_mode = PREFERRED[routing:read_only]bind_address = 0.0.0.0bind_port = 6447destinations = metadata-cache://mycluster/default?role=SECONDARYmode = read-onlyrouting_strategy = round-robinprotocol = classicmax_total_connections = 512connect_timeout = 1client_ssl_mode = PREFERREDserver_ssl_mode = PREFERRED

配置說明:

  1. Router 監聽 6446(讀寫)和 6447(只讀)端口。
  2. 元數據從三個 MySQL 節點(192.168.1.1:3306 等)獲取,每 0.5 秒刷新。
  3. 寫操作路由到主節點,讀操作輪詢分發到從節點。
  4. 使用經典協議,支持 SSL 連接。

4. 使用引導(Bootstrap)生成配置

MySQL Router 提供 --bootstrap 選項,自動從 InnoDB Cluster 獲取元數據并生成配置文件,簡化配置過程。

運行引導命令:

mysqlrouter --bootstrap mysql://router_user@192.168.1.1:3306 --directory /opt/myrouter --user snoopy

mysql://router_user@192.168.1.1:3306:集群中任一節點的地址。

--directory:生成配置文件的目錄。

--user:運行 Router 的系統用戶。

生成內容:

配置文件:/opt/myrouter/mysqlrouter.conf。

啟動腳本:/opt/myrouter/start.sh。

停止腳本:/opt/myrouter/stop.sh。

日志目錄:/opt/myrouter/log。

運行時目錄:/opt/myrouter/run。

啟動 Router:

/opt/myrouter/start.sh

引導的優勢:

自動檢測集群拓撲,生成正確的 metadata_cache 和 routing 配置。

自動設置默認端口(6446、6447 等)。

減少手動配置錯誤。

引導時的權限要求:

CREATE USER 'router_user'@'%' IDENTIFIED BY 'router_pass';GRANT SELECT, EXECUTE ON mysql_innodb_cluster_metadata.* TO 'router_user'@'%';GRANT INSERT, UPDATE, DELETE ON mysql_innodb_cluster_metadata.routers TO 'router_user'@'%';GRANT SELECT ON performance_schema.replication_group_members TO 'router_user'@'%';

5. 配置時的注意事項

端口沖突:

確保 bind_port(如 6446、6447)未被占用。

如果多個 Router 實例運行在同一主機,使用 --base-port 指定端口范圍:

mysqlrouter --bootstrap ... --base-port 7000

元數據用戶權限:

確保 metadata_cache 部分的 user 有足夠權限訪問 mysql_innodb_cluster_metadata 表。

避免使用 root 用戶,建議創建專用用戶。

SSL 配置:

如果 MySQL 集群啟用了 SSL,設置 client_ssl_mode 和 server_ssl_mode 為 REQUIRED。

提供 SSL 證書路徑(如果需要):

client_ssl_cert = /path/to/client-cert.pem

client_ssl_key = /path/to/client-key.pem

性能優化:

調整 ttl 值:較小的 ttl(如 0.1 秒)適合快速故障轉移,但增加元數據查詢開銷;較大的 ttl(如 5 秒)適合穩定集群。

增加 max_total_connections 以支持高并發。

日志監控:

檢查日志文件(logging_folder 指定目錄)以排查問題。

示例日志:

2025-04-23 19:00:00 INFO [routing:read_write] Started: listening on 0.0.0.0:6446

2025-04-23 19:00:00 INFO [metadata_cache] Connected to metadata server at 192.168.1.1:3306

應用程序重試邏輯:

Router 不處理 SQL 重試,應用程序需在連接失敗時重試連接到同一端口。

示例:配置連接池(如 Java 的 HikariCP)設置重試間隔。

版本兼容性:

確保 Router 版本與 MySQL 服務器版本兼容。例如,MySQL Router 8.4 支持 MySQL 8.0 和 8.4,但不支持 9.0。

檢查文檔:https://dev.mysql.com/doc/mysql-router/8.4/en/

6. 驗證配置

配置完成后,驗證 Router 是否正常工作:

啟動 Router:

mysqlrouter --config /path/to/mysqlrouter.conf

檢查日志:

確認 Router 是否成功連接到元數據服務器并監聽端口:

cat /var/log/mysqlrouter/mysqlrouter.log

測試連接:

使用 MySQL 客戶端連接 Router 的端口:

mysql -u app_user -p -h 127.0.0.1 -P 6446

連接 6446 測試寫操作(主節點)。

連接 6447 測試讀操作(從節點)。

模擬故障轉移:

停止主節點,觀察 Router 是否將寫連接路由到新的主節點。

示例:關閉主節點的 MySQL 服務:

systemctl stop mysql

7. 高級配置示例

以下是一些高級配置場景的示例:

7.1 靜態路由(不使用元數據緩存)

如果不使用 InnoDB Cluster,可以手動指定目標服務器:

[routing:read_write]bind_address = 0.0.0.0bind_port = 6446destinations = 192.168.1.1:3306mode = read-writerouting_strategy = first-available[routing:read_only]bind_address = 0.0.0.0bind_port = 6447destinations = 192.168.1.2:3306,192.168.1.3:3306mode = read-onlyrouting_strategy = round-robin

適用場景:簡單的讀寫分離,不依賴集群元數據。

7.2 使用 Unix 域套接字

在本地部署時,使用 Unix 域套接字減少網絡開銷:

[routing:read_write]bind_address = /var/run/mysqlrouter/rw.sockdestinations = metadata-cache://mycluster/default?role=PRIMARYmode = read-writerouting_strategy = first-availableprotocol = classic

連接方式:

mysql -u app_user -p --socket=/var/run/mysqlrouter/rw.sock

7.3 高并發配置

為高并發場景增加連接數并優化超時:

[routing:read_write]bind_address = 0.0.0.0bind_port = 6446destinations = metadata-cache://mycluster/default?role=PRIMARYmode = read-writerouting_strategy = first-availablemax_total_connections = 2048connect_timeout = 2client_ssl_mode = REQUIREDserver_ssl_mode = REQUIRED

8. 總結

MySQL Router 的配置通過 INI 格式的配置文件實現,核心包括全局設置([DEFAULT])、日志([logger])、元數據緩存([metadata_cache])和路由策略([routing])。通過 --bootstrap 模式可以簡化配置,自動生成與 InnoDB Cluster 集成的設置。配置時需注意端口沖突、權限設置、SSL 配置和應用程序重試邏輯。

推薦配置流程:

使用 --bootstrap 生成初始配置文件。

根據需求調整端口、路由策略和 SSL 設置。

驗證日志和連接,確保路由正常。

配置系統服務以實現開機啟動。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/78041.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78041.shtml
英文地址,請注明出處:http://en.pswp.cn/web/78041.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【學習筆記】機器學習(Machine Learning) | 第六周|過擬合問題

機器學習&#xff08;Machine Learning&#xff09; 簡要聲明 基于吳恩達教授(Andrew Ng)課程視頻 BiliBili課程資源 文章目錄 機器學習&#xff08;Machine Learning&#xff09;簡要聲明 摘要過擬合與欠擬合問題一、回歸問題中的過擬合1. 欠擬合&#xff08;Underfit&#x…

當算力遇上堵車:AI如何讓城市血管不再“血栓”?

目錄 一、算力治堵的“外科手術” 二、算力治堵的“內科檢查” 三、算力治堵的“中醫調理” 治堵如治水,算力是新時代的“大禹” “堵車”是每個大城市的通病,但鮮少有人意識到:交通擁堵的根源并非車輛過多,而在于車速過慢,不是因為堵車才慢,而是因為慢才堵車。中國工…

VM虛擬機安裝CentOS7.9

目錄 1.下載CentOS7.9 2.VM虛擬機選擇自定義&#xff0c;然后一直傻瓜式下一步 3.選擇編輯虛擬機設置&#xff0c;然后選擇剛剛下載的ISO 4.輸入 ip addr 獲取ip地址 5.用Xshell連接 1.下載CentOS7.9 鏈接&#xff1a;https://pan.baidu.com/s/1kW2gGWnbcjNtq4kz46LKVw?p…

文本解析到大模型應用

文本解析到到大模型應用 一、背景 最近接到一個比較惡心的工作&#xff0c;之前有個同事將很多個小的文檔整合到了一個大文檔中&#xff0c;同時暴露出一個新的問題&#xff0c;大的文檔雖然查找問題比較方便但是維護起來較為麻煩&#xff0c;所以需要將大的文檔按照標題拆分…

AWS虛擬專用網絡全解析:從基礎到高級實踐

導語 AWS虛擬專用網絡是連接企業本地數據中心與AWS云環境的關鍵橋梁。本文將深入探討AWS VPN的核心概念、配置方法、最佳實踐以及常見問題解決方案,助您構建安全、可靠的混合云網絡架構。 一、AWS VPN概述 1. 定義 AWS VPN是一種網絡服務,允許用戶通過加密隧道將本地網絡…

【含文檔+PPT+源碼】基于微信小程序的校園快遞平臺

項目介紹 本課程演示的是一款基于微信小程序的校園快遞平臺&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 1.包含&#xff1a;項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 2.帶你從零開始部署運行本套系統 3.該項目附帶…

基于 Rancher 部署 Kubernetes 集群的工程實踐指南

一、現狀分析 在當今的云計算和容器化領域&#xff0c;Kubernetes&#xff08;K8S&#xff09;已經成為了容器編排和管理的事實標準。根據 Gartner 的數據&#xff0c;超過 70% 的企業在生產環境中使用 K8S 來管理容器化應用。然而&#xff0c;K8S 的安裝和管理對于許多企業來…

Windows服務器提權實戰:常見方法、場景與防御指南

在滲透測試中&#xff0c;??權限提升&#xff08;提權&#xff09;??是從低權限賬戶&#xff08;如IIS、Apache運行賬戶&#xff09;獲取系統管理員&#xff08;如SYSTEM&#xff09;權限的關鍵步驟。本文將從實戰角度解析Windows服務器提權的常見技術&#xff0c;并結合真…

C# | 基于C#實現的BDS NMEA-0183數據解析上位機

以下是一個基于C#實現的BDS NMEA-0183數據解析上位機的示例代碼,包含基礎功能和界面: using System; using System.Collections.Generic; using System.IO.Ports; using System.Windows.Forms; using System.Drawing; using System.Globalization;namespace BDS_NMEA_Viewer…

圖像增強技術:從基礎原理到企業級開發實戰

簡介 圖像增強技術是提升圖像質量、改善視覺效果和提高后續處理效果的核心方法。本文將全面解析圖像增強的五大核心技術:灰度級修正、圖像平滑、圖像銳化、圖像偽彩色處理和圖像幾何校正,并提供基于OpenCV和Elasticmagic的完整企業級開發實戰代碼。通過系統化的知識整理和可…

解決中文亂碼:字符編碼全攻略 - ASCII、Unicode、UTF-8、GB2312詳解

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

體系學習1:C語言與指針1——預定義、進制打印、傳參為數組

1、不對一段代碼進行編譯 #if 0 statement #endif2、輸出地址 int d[3]{1,2,3}; printf("%p",(void*)d);//p期待的是void*類型的數據3、不同進制的打印 int data 1200; char hed[9];//為\0預留位置&#xff01;&#xff01;&#xff01; sprintf(hed,"%08X&…

Java 基礎--數組(Array):存儲數據的“排排坐”

作者&#xff1a;IvanCodes 發布時間&#xff1a;2025年5月1日&#x1f913; 專欄&#xff1a;Java教程 大家好&#xff01;&#x1f44b; 咱們在編程時&#xff0c;經常需要處理一批相同類型的數據&#xff0c;比如班級里所有同學的成績 &#x1f4af;、一周每天的最高氣溫 …

CSS常用屬性_(進階)

目錄 1.尺寸單位與顏色 &#xff08;1&#xff09;尺寸 &#xff08;2&#xff09;顏色 常用2種 &#xff08;3&#xff09;顏色屬性值&#xff08;透明度&#xff09; 例如&#xff1a; 2.字體屬性font 例如&#xff1a; **順序 3.文本屬性 ?編輯例如&#xff1a; …

【RabbitMQ】保證消息不丟失

要確保 RabbitMQ 在消費者&#xff08;Python 服務&#xff09;重啟或掛掉時消息不丟失&#xff0c;需結合 消息持久化、確認機制&#xff08;ACK&#xff09; 和 死信隊列&#xff08;DLX&#xff09; 實現高可靠性&#xff1a; 1. 消息持久化&#xff08;Durability&#xff…

Python基本語法(控制語句)

#控制語句 Python語言的控制語句和其他編程語言類似&#xff0c;常用的有if…else、while、for語句。 案例2一7控制語句 第1組代碼&#xff0c;說明if-else語句&#xff1a; #1 print(\n1,if) x,y,z10,20,5 if x>y:print(x>y) else:print(x<y)輸出結果: 1,if x<…

并發設計模式實戰系列(10):Balking(猶豫模式)

&#x1f31f; 大家好&#xff0c;我是摘星&#xff01; &#x1f31f; 今天為大家帶來的是并發設計模式實戰系列&#xff0c;第10章Balking&#xff08;猶豫模式&#xff09;&#xff0c;廢話不多說直接開始~ 目錄 一、核心原理深度拆解 1. 狀態守護機制 2. 與狀態模式的…

【強化學習系列】貝爾曼方程

首先回顧狀態價值函數和動作價值函數的定義&#xff1a; 狀態價值函數 v π ( s ) v_\pi(s) vπ?(s)是從狀態 s s s出發&#xff0c;直至一幕結束后獲得的回報的期望值 動作價值函數 q π ( s , a ) q_\pi(s,a) qπ?(s,a)是從狀態 s s s出發&#xff0c;采取動作 a a a后&…

donet使用指定版本sdk

ps:來自微軟官方方案,實測可行,就是在項目任意目錄下在新建 global.json,并配置sdk版本 SDK 使用最新安裝的版本 SDK 命令包括 dotnet new 和 dotnet run。 .NET CLI 必須為每個 dotnet 命令選擇一個 SDK 版本。 即使在以下情況下&#xff0c;它也會默認使用計算機上安裝的最新…

x-cmd install | Orbiton:極簡至上的終端文本編輯器與輕量級 IDE

目錄 核心特點安裝適用場景優勢 厭倦了臃腫復雜的 IDE&#xff1f;渴望一個輕巧、快速、專注的編碼環境&#xff1f;Orbiton&#xff0c;一款極簡主義的終端文本編輯器與輕量級 IDE&#xff0c;將帶給你前所未有的編碼體驗。 核心特點 極簡主義&#xff0c;專注編碼&#xff1…