MySQL Router介紹及配置

1.mysql-route介紹


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

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

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

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

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

  • MySQL Router是MySQL Proxy的替代方案,MySQL官方不建議將MySQL Proxy用于生產(chǎn)環(huán)境,并且已經(jīng)不提供MySQL Proxy的下載。

  • 正如前面提到的,在目前形式中,MySQL Router最好與應(yīng)用程序一起使用。也就是說,應(yīng)該在運行應(yīng)用程序的相同機器上安裝Router。雖然這不是強制要求,但建議采用這種做法??梢跃帉懗绦騺肀O(jiān)控mysqlrouter的執(zhí)行,并在需要時重新啟動它。例如,如果目標(biāo)選項中的服務(wù)器列表已用盡,則可以使用新目標(biāo)列表重新啟動Router,或重新啟動Router以重試列表中的服務(wù)器。

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

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

  • Router對應(yīng)用是透明的,開發(fā)與Router一起使用的應(yīng)用程序不需要任何特殊的庫或接口,所增加的工作只是維護(hù)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,內(nèi)容如下:

# .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 

修改內(nèi)容如下:

# 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

# 主節(jié)點故障轉(zhuǎn)移配置
[routing:basic_failover]
# To be more transparent, use MySQL Server port 3306
bind_address = 0.0.0.0
bind_port = 23306
mode = read-write
# 主節(jié)點地址:默認(rèn)情況下第一臺主數(shù)據(jù)庫為寫主庫,當(dāng)?shù)谝慌_主數(shù)據(jù)庫DOWN機后,第二臺數(shù)據(jù)庫被提升為主庫
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
# 用于負(fù)載均衡的只讀模式
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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容