MySQL Router介紹及配置

1.mysql-route介紹


架構圖
  • MySQL Router是MySQL官方提供的一個輕量級中間件,可以在應用程序與MySQL服務器之間提供透明的路由方式。主要用以解決MySQL主從庫集群的高可用、負載均衡、易擴展等問題。Router可以與MySQL Fabric無縫連接,允許Fabric存儲和管理用于路由的高可用數據庫服務器組,使管理MySQL服務器組更加簡單。

  • MySQL Router是一個可執行文件,可以與應用程序在同一平臺上運行,也可以單獨部署。雖然MySQL Router是InnoDB Cluster(MySQL 7.X)的一部分,MySQL 5.6 等版本數據庫仍然可以使用Router作為其中間代理層。MySQL Router的配置文件中包含有關如何執行路由的信息。它與MySQL服務器的配置文件類似,也是由多個段組成,每個段中包含相關配置選項。

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

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

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

  • MySQL Router是MySQL Proxy的替代方案,MySQL官方不建議將MySQL Proxy用于生產環境,并且已經不提供MySQL Proxy的下載。

  • 正如前面提到的,在目前形式中,MySQL Router最好與應用程序一起使用。也就是說,應該在運行應用程序的相同機器上安裝Router。雖然這不是強制要求,但建議采用這種做法。可以編寫程序來監控mysqlrouter的執行,并在需要時重新啟動它。例如,如果目標選項中的服務器列表已用盡,則可以使用新目標列表重新啟動Router,或重新啟動Router以重試列表中的服務器。

  • MySQL Router非常輕量級,與直連Servers相比,其性能損耗低于1%。擺在Router面前的問題,是其對鏈接數的支撐能力,原則上我們一個Router節點限定在500個TCP鏈接。Router本身CPU、內存、磁盤消耗都極低,但是要求Router節點對網絡IO的支撐能力應該較強。考慮到Router底層為“異步IO”,如果條件允許,應該構建在較高版本的Linux平臺下,且給予合理的CPU資源。MySQL Router在2.1.4版本以下,內核基于select() IO模型,存在連接數500上限、較大SQL請求導致CPU過高,以及并發連接過高時Router假死等問題,建議升級到2.1.6+。

  • Router對連接的管理是基于“粘性”方式,即應用與Router的一個TCP連接,將對應一個Router與MySQL Server的連接,當應用與Router的連接失效時,Router也將斷開其與MySQL Server的連接。只要Router上下游網絡聯通性正常,那么Router將不會主動斷開與應用的連接,也不會切換其與Server的連接。即當應用與Router創建一個新連接時,Router將根據負載均衡算法,選擇一個Server并與其建立連接,此后將唯一綁定,直到此Server失效時觸發重新選擇其他Server。這就引入一個問題,如果某個連接上發生了“繁重”的SQL操作,那么將會導致下游Server伴隨高負載而無法“負載均衡”。

  • Router對應用是透明的,開發與Router一起使用的應用程序不需要任何特殊的庫或接口,所增加的工作只是維護MySQL Router實例。

  1. 安裝配置
# 解壓
tar -xzvf mysql-router-2.1.6-linux-glibc2.12-x86-64bit.tar.gz 
mv mysql-router-2.1.6-linux-glibc2.12-x86-64bit mysql-router-2.1.6

修改用戶配置文件vi .bash_profile,內容如下:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
export PATH=$PATH:/home/cluster/mysql-router-2.1.6
#更新資源
source ~/.bashrc
#驗證是否成功,如果正常輸出安裝成功
mysqlrouter --help
  1. 配置MySQL router
    在mysql-router-2.1.6目錄下新建mysqlrouter.conf文件
    或者拷貝mysql-router-2.1.6/share/doc/mysqlrouter/sample_mysqlrouter.conf
#
cp mysql-router-2.1.6/share/doc/mysqlrouter/sample_mysqlrouter.conf mysqlrouter.conf 
vi mysqlrouter.conf 

修改內容如下:

# MySQL Router sample configuration
#
# The following is a sample configuration file which shows
# most of the plugins available and most of their options.
#
# The paths used are defaults and should be adapted based
# on how MySQL Router was installed, for example, using the
# CMake option CMAKE_INSTALL_PREFIX
#
# The logging_folder is kept empty so message go to the
# console.
#

[DEFAULT]
logging_folder = /home/cluster/mysql-router-2.1.6/logs
plugin_folder = /home/cluster/mysql-router-2.1.6/lib/mysqlrouter
config_folder = /home/cluster/mysql-router-2.1.6
runtime_folder = /home/cluster/mysql-router-2.1.6/run
#data_folder = /var/lib
#keyring_path = /var/lib/keyring-data
#master_key_path = /var/lib/keyring-key

[logger]
level = INFO

# 主節點故障轉移配置
[routing:basic_failover]
# To be more transparent, use MySQL Server port 3306
bind_address = 0.0.0.0
bind_port = 23306
mode = read-write
# 主節點地址:默認情況下第一臺主數據庫為寫主庫,當第一臺主數據庫DOWN機后,第二臺數據庫被提升為主庫
destinations = 192.168.62.37:3306,192.168.62.15:3306

[routing:balancing]
bind_address = 0.0.0.0
bind_port = 23307
max_connections = 1024
# 用于負載均衡的只讀模式
mode = read-only
# 這里的兩個socket是輪詢用的
destinations = 192.168.62.15:3306,192.168.62.37:3306

# If no plugin is configured which starts a service, keepalive
# will make sure MySQL Router will not immediately exit. It is
# safe to remove once Router is configured.
[keepalive]
interval = 60
  1. MySQL router啟停
#啟動
mysqlrouter --config  mysqlrouter.cnf &
#查看端口是否啟動
netstat -nlt
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:23306           0.0.0.0:*               LISTEN    

#停止mysqlrouter
ps -ef | grep mysqlrouter
cluster   9614     1  0 09:51 ?        00:00:00 bin/mysqlrouter --config mysqlrouter.conf
cluster  13348 11508  0 10:30 pts/0    00:00:00 grep --color=auto mysqlrouter

kill -9 9614
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容