日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

MySQL Router實現MySQL的讀寫分離的方法

瀏覽:278日期:2023-10-02 13:42:52
目錄1.簡介2.配置MySQL Router2.1 安裝MySQL Router2.2 啟動并測試MySQL Router3.MySQL Router的配置文件解釋1.DEFAULT片段的配置。2.logger片段的配置。3.routing片段的配置。4.為MySQL Router提供SysV腳本1.簡介

MySQL Router是MySQL官方提供的一個輕量級MySQL中間件,用于取代以前老版本的SQL proxy。

既然MySQL Router是一個數據庫的中間件,那么MySQL Router必須能夠分析來自前面客戶端的SQL請求是寫請求還是讀請求,以便決定這個SQL請求是發送給master還是slave,以及發送給哪個master、哪個slave。這樣,MySQL Router就實現了MySQL的讀寫分離,對MySQL請求進行了負載均衡。

因此,MySQL Router的前提是后端實現了MySQL的主從復制。

MySQL Router很輕量級,只能通過不同的端口來實現簡單的讀/寫分離,且讀請求的調度算法只能使用默認的rr(round-robin),更多一點、更復雜一點的能力都不具備。所以,在實現MySQL Router時,需要自行配置好后端MySQL的高可用。高可用建議通過Percona XtraDB Cluster或MariaDB Galera或MySQL官方的group replication實現,如果實在沒有選擇,還可以通過MHA實現。

所以,一個簡單的MySQL Router部署圖如下。

MySQL Router實現MySQL的讀寫分離的方法

本文將使用MySQL Router分別實現后端無MySQL主從高可用情形的讀寫分離,至于為什么不實現后端有MySQL高可用的讀寫分離情形。在我看來,MySQL Router只是一個玩具,不僅功能少,而且需要在應用程序代碼中指定讀/寫的不同端口(見后文關于配置文件的解釋),在實際環境中應該沒人會這樣用。

2.配置MySQL Router

以下是實驗環境。

角色名 主機IP MySQL版本 數據狀態 MySQL Router 192.168.100.21 MySQL 5.7.22 無 master 192.168.100.22 MySQL 5.7.22 全新實例 slave1 192.168.100.23 MySQL 5.7.22 全新實例 slave2 192.168.100.24 MySQL 5.7.22 全新實例

因為后端MySQL主從復制沒有實現高可用,所以只有一個master節點負責寫操作。

所有后端MySQL節點都是剛安裝好的全新MySQL實例,所以直接開啟主從復制即可。如果是已有數據的主從復制,需要先保證它們已同步好,方法見:將slave恢復到master指定的坐標。

2.1 安裝MySQL Router

二進制版MySQL Router下載地址:https://dev.mysql.com/downloads/router/rpm倉庫:http://repo.mysql.com/yum/mysql-tools-community/el/7/x86_64/

此處使用二進制版的MySQL Router 2.1.6。

tar xf mysqlrouter-2.1.6-linux-glibc2.12-x86-64bit.tar.gzmv mysqlrouter-2.1.6-linux-glibc2.12-x86-64bit /usr/local/mysqlrouter

這就完了,就這么簡單。

解壓二進制包后,解壓目錄下有以下幾個文件。

[root@s1 mr]# lsbin data include lib run share

bin目錄下只有一個二進制程序mysqlrouter,這也是MySQL Router的主程序。

share目錄下有示例配置文件和示例SysV風格的啟動腳本,但是很不幸該腳本基于debian平臺,在redhat系列上需要修改和安裝一些東西才能使用。所以后文我自己寫了一個centos下的SysV腳本。

[root@s1 mr]# ls share/doc/mysqlrouter/License.txt README.txt sample_mysqlrouter.conf sample_mysqlrouter.init

最后,將主程序添加到PATH環境變量中。

echo 'PATH=$PATH:/usr/local/mysqlrouter/bin' >/etc/profile.d/mysqlrouter.shchmod +x /etc/profile.d/mysqlrouter.shsource /etc/profile.d/mysqlrouter.sh2.2 啟動并測試MySQL Router

以下是上述實驗環境的配置文件,這里只有一個master節點192.168.100.22:3306,如果有多個寫節點(master),則使用逗號分隔各節點。關于配置文件,后文會解釋。

[DEFAULT]config_folder = /etc/mysqlrouterlogging_folder = /usr/local/mysqlrouter/logruntime_folder = /var/run/mysqlrouter[logger]level = INFO[routing:slaves]bind_address = 192.168.100.21:7001destinations = 192.168.100.23:3306,192.168.100.24:3306mode = read-onlyconnect_timeout = 1[routing:masters]bind_address = 192.168.100.21:7002destinations = 192.168.100.22:3306mode = read-writeconnect_timeout = 2

然后在MySQL Router所在的機器上創建上面使用的目錄。

shell> mkdir /etc/mysqlrouter /usr/local/mysqlrouter/log /var/run/mysqlrouter

這樣就可以啟動MySQL Router來提供服務了(啟動之前,請確保后端MySQL已被配置好主從復制)。

[root@s1 mr]# mysqlrouter &[1] 16122

查看監聽狀態。這里監聽的兩個端口7001和7002是前端連接MySQL Router用的,它們用來接收前端發送的SQL請求,并按照讀、寫規則,將SQL請求路由到后端MySQL主從節點。

[root@s1 mr]# netstat -tnlpActive Internet connections (only servers)Proto Recv-Q Send-Q Local AddressForeign Address State PID/Program name tcp0 0 0.0.0.0:6032 0.0.0.0:*LISTEN 1231/proxysql tcp0 0 0.0.0.0:6033 0.0.0.0:*LISTEN 1231/proxysql tcp0 0 0.0.0.0:22 0.0.0.0:*LISTEN 1152/sshdtcp0 0 192.168.100.21:7001 0.0.0.0:*LISTEN 16122/mysqlroutertcp0 0 127.0.0.1:25 0.0.0.0:*LISTEN 2151/master tcp0 0 192.168.100.21:7002 0.0.0.0:*LISTEN 16122/mysqlroutertcp6 0 0 :::22:::* LISTEN 1152/sshdtcp6 0 0 ::1:25 :::* LISTEN 2151/master

查看日志:

[root@s1 mr]# cat /usr/local/mysqlrouter/log/mysqlrouter.log 2018-07-07 10:14:29 INFO [7f8a8e253700] [routing:slaves] started: listening on 192.168.100.21:7001; read-only2018-07-07 10:14:29 INFO [7f8a8ea54700] [routing:masters] started: listening on 192.168.100.21:7002; read-write

最后進行測試即可。測試前,先在后端Master上授權MySQL Router節點允許連接,它將會復制到兩個slave節點上。

mysql> grant all on *.* to root@’192.168.100.%’ identified by ’P@ssword1!’;

連上MySQL Router的7002端口,這個端口是負責寫的端口。由于沒有配置主從高可用,所以,簡單測試下是否能寫即可。

[root@s1 mr]# mysql -uroot -pP@ssword1! -h192.168.100.21 -P7002 -e ’select @@server_id;’mysql: [Warning] Using a password on the command line interface can be insecure.+-------------+| @@server_id |+-------------+| 110 |+-------------+[root@s1 mr]# mysql -uroot -pP@ssword1! -h192.168.100.21 -P7002 -e ’create database mytest;’mysql: [Warning] Using a password on the command line interface can be insecure.[root@s1 mr]# mysql -uroot -pP@ssword1! -h192.168.100.21 -P7002 -e ’show databases;’mysql: [Warning] Using a password on the command line interface can be insecure.+--------------------+| Database |+--------------------+| information_schema || mysql || mytest || performance_schema || sys|+--------------------+

再測試下各slave節點,是否能實現rr調度算法的讀請求的負載均衡。

[root@s1 mr]# mysql -uroot -pP@ssword1! -h192.168.100.21 -P7001 -e ’select @@server_id;’ mysql: [Warning] Using a password on the command line interface can be insecure.+-------------+| @@server_id |+-------------+| 120 |+-------------+[root@s1 mr]# mysql -uroot -pP@ssword1! -h192.168.100.21 -P7001 -e ’select @@server_id;’mysql: [Warning] Using a password on the command line interface can be insecure.+-------------+| @@server_id |+-------------+| 130 |+-------------+[root@s1 mr]# mysql -uroot -pP@ssword1! -h192.168.100.21 -P7001 -e ’show databases;’mysql: [Warning] Using a password on the command line interface can be insecure.+--------------------+| Database |+--------------------+| information_schema || mysql || mytest || performance_schema || sys|+--------------------+

顯然,測試的結果一切正常。

這樣看來MySQL Router好簡單,確實好簡單。只需提供一個合理的配置文件,一切都完成了。那么,下面解釋下MySQL Router的配置文件。

3.MySQL Router的配置文件解釋

MySQL Router的配置文件也很簡單,需要配置的項不多。

mysql router默認會尋找安裝目錄下的'mysqlrouter.conf'和家目錄下的'.mysqlrouter.conf'。也可以在二進制程序mysqlrouter命令下使用'-c'或者'--config'手動指定配置文件。

MySQL router的配置文件是片段式的,常用的就3個片段:[DEFAULT]、[logger]、[routing:NAME]。片段名稱區分大小寫,且只支持單行'#'或';'注釋,不支持行中、行尾注釋。

以上面示例的配置文件為例。

[DEFAULT]config_folder = /etc/mysqlrouterlogging_folder = /usr/local/mysqlrouter/logruntime_folder = /var/run/mysqlrouter[logger]level = INFO[routing:slaves]bind_address = 192.168.100.21:7001destinations = 192.168.100.23:3306,192.168.100.24:3306mode = read-onlyconnect_timeout = 1[routing:masters]bind_address = 192.168.100.21:7002destinations = 192.168.100.22:3306mode = read-writeconnect_timeout = 21.DEFAULT片段的配置。

[DEFAULT]片段通常配置配置文件的目錄、日志的目錄、MySQL router運行時的目錄(如pid文件)。

例如:

[DEFAULT]config_folder=/etc/mysqlrouter # 指定額外的配置文件目錄,該目錄下的conf文件都會被加載logging_folder=/usr/local/mysqlrouter/log # 指定日志目錄,日志文件名為mysqlrouter.logruntime_folder=/var/run/mysqlrouter# 指定運行時目錄,默認為/run/mysqlrouter2.logger片段的配置。

[logger]片段只有一個選項,設置日志的記錄級別。

[logger]level=debug # 有debug、info(默認)、warning、error、fatal,不區分大小寫3.routing片段的配置。

[routing:NAME]是MySQL router主要部分,設置不同的路由實例,其中NAME可以隨意命名。如[routing:slaves]、[routing:masters]。

在routing配置片段,可以設置的選項包括:

(1).bind_address和bind_port

bind_address和bind_port是mysql router監聽前端SQL請求的地址和端口。其中端口是MySQL Router要求強制提供的,但可以不用bind_port綁定,因為它可用通過bind_address的IP:PORT格式指定。一個routing規則中只能設置一個地址監聽指令,但可以通過'0.0.0.0'來監聽主機上所有的地址。如果沒有提供監聽地址,則默認監聽127.0.0.1。

另外,監聽地址不能出現在destinations指令指定的列表中。

示例如下:

[routing:slaves]bind_port = 7001[routing:slaves]bind_address = 192.168.100.21bind_port = 7001[routing:slaves]bind_address = 192.168.100.21:7001

一般來說,通過不同端口實現讀/寫分離,并非好方法,最大的原因是需要在應用程序代碼中指定這些連接端口。但是,MySQL Router只能通過這種方式實現讀寫分離,所以MySQL Router拿來當玩具玩玩就好。

(2).destinations

定義routing規則的轉發目標,格式為HOST:PORT,HOST可以是IP也可以是主機名,多個轉發目標使用逗號分隔。如定義的目標列表是多個slave。

[routing:slaves]bind_address = 192.168.100.21:7001destinations = 192.168.100.23:3306,192.168.100.24:3306[routing:masters]bind_address = 192.168.100.21:7002destinations = 192.168.100.22:3306,192.168.100.100:3306

(3).mode

MySQL router提供兩種mode:read-only和read-write。這兩種方式會產生不同的轉發調度方式。

設置為read-write,常用于設置destinations為master時,實現master的高可用。

調度方式:當MySQL router第一次收到客戶端請求時,會將請求轉發給destinations列表中的第一個目標,第二次收到客戶端請求還是會轉發給第一個目標,只有當第一個目標聯系不上(如關閉了MySQL服務、宕機等)才會聯系第二個目標,如果所有目標都聯系不上,MySQL Router會中斷。這種調度方式被稱為'first-available'。 當聯系上了某一個目標時,MySQL Router會將其緩存下來,下次收到請求還會繼續轉發給該目標。既然是緩存的目標,就意味著在MySQL Router重啟之后就會失效。 所以通過MySQL Router實現讀寫分離的寫時,可以設置多個master,讓性能好的master放在destinations列表的第一個位置,其他的master放在后面的位置作為備用master。

設置為read-only,常用于設置destinations為slave時,實現MySQL讀請求負載均衡。

調度方式:當MySQL route收到客戶端請求時,會從destinations列表中的第一個目標開始向后輪詢(round-robin),第一個請求轉發給第一個目標,第二個請求轉發給第二個目標,轉發給最后一個目標之后的下一個請求又轉發給第一個目標。如果第一個目標不可用,會依次向后檢查,直到目標可用,如果所有目標都不可用,則MySQL Router中斷。 那些不可用的目標會暫時被隔離,并且mysql router會不斷的檢查它們的狀況,當重新可用時會重新加入到目標列表。

(4).connect_timeout

MySQL Router聯系destinations的超時時間,默認為1秒,值的范圍為1-65536。應該盡量設置值小點,免得等待時間過長。 對于read-write模式,可以將超時時間設置的稍長一點點,防止誤認為主master不可用而去聯系備master。 對于read-only模式,可以將超時時間設置的稍短一點點,因為這種模式下是destinations列表輪詢的,即使誤判了影響也不會太大。

(5).其他選項

還能設置一些其他的指令,如使用的協議、最大請求數等,但是都可以不用設置使用默認值,它們都是MySQL Router結合MySQL優化過的一些選項,本身已經較完美了。

配置文件大概就這些內容,配置好后,記得先創建default片段中涉及到的目錄。之后就可以啟動mysql router提供讀/寫分離服務了。

4.為MySQL Router提供SysV腳本

MySQL Router只提供了一個主程序(bin目錄下的mysqlrouter),且該程序只能啟動,沒有停止選項,所以只能使用kill命令來殺掉進程。

MySQL Router也提供了示例啟動腳本,該腳本在位置為$basedir/share/doc/mysqlrouter/sample_mysqlrouter.init,但是該腳本是基于Debian平臺的,在CentOS上需要設置和安裝一些東西,所以不用它,自己寫個粗糙點的腳本即可。

shell> vim /etc/init.d/mysqlrouter#!/bin/bash# chkconfig: - 78 30# Description: Start / Stop MySQL RouterDAEMON=/usr/local/mysqlrouterproc=$DAEMON/bin/mysqlrouterDAEMON_OPTIONS='-c ${DAEMON}/mysqlrouter.conf'. /etc/init.d/functionsstart() { if [ -e /var/lock/subsys/mysqlrouter ]; thenaction 'MySQL Router is working' /bin/false else$proc $DAEMON_OPTIONS & &>/dev/nullretval=$?echo if [ $retval -eq 0 ]; then touch /var/lock/subsys/mysqlrouteraction 'Starting MySQL Router' /bin/trueelseecho 'Starting MySQL Router Failure'fi fi} stop() { if [ -e /var/lock/subsys/mysqlrouter ]; thenkillall $procretval=$?echoif [ $retval -eq 0 ]; then rm -f /var/lock/subsys/mysqlrouter action 'Stoping MySQL Router' /bin/truefi elseaction 'MySQL Router is not working' /bin/false fi}status() { if [ -e /var/lock/subsys/mysqlrouter ]; thenecho 'MySQL Router is running' elseecho 'MySQL Router is not running' fi}case '$1' in start)startsleep 1;; stop)stopsleep 1;; restart)stopstartsleep 1;; status)status;; *)echo 'Usage: $0 {start|stop|status|restart}'retval=1;;esacexit $retval

然后賦予執行權限。

shell> chmod +x /etc/init.d/mysqlrouter

到此這篇關于MySQL Router實現MySQL的讀寫分離的方法的文章就介紹到這了,更多相關MySQL Router 讀寫分離內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品视频免费| 国产精品天天看天天狠| 亚洲综合福利| 亚洲精品观看| 亚洲日本免费电影| 国产精品腿扒开做爽爽爽挤奶网站| 国际精品欧美精品| 国产成人免费av一区二区午夜| 久久精品网址| 国产一区二区三区天码| 国际精品欧美精品| 日韩.com| 亚洲午夜久久久久久尤物| 一本一道久久a久久精品蜜桃| 午夜欧美在线| 亚洲精品影视| 国产精品宾馆| 欧洲av不卡| 国产一二在线播放| 日本午夜大片a在线观看| 91精品国产91久久久久久黑人| 亚洲视频综合| 亚洲精品黄色| 久久99性xxx老妇胖精品| 精品久久97| 亚洲国产成人精品女人| 噜噜噜躁狠狠躁狠狠精品视频| 日本不卡在线视频| 国产精品传媒麻豆hd| av资源中文在线天堂| 国产午夜久久| 精品国产一区二| 99国产精品自拍| 久久精品免视看国产成人| 久久伊人久久| 亚洲精品大全| 麻豆视频一区二区| 红桃视频国产精品| 精品久久国产一区| 亚洲丝袜啪啪| 久久伦理在线| 精品99久久| 欧美在线观看天堂一区二区三区| 欧美日韩视频免费观看| 91国内精品| 亚洲经典在线| 久久精品官网| 成人台湾亚洲精品一区二区| 蜜臀久久99精品久久久久久9| 亚洲精品影视| 亚洲精品a级片| 久久婷婷丁香| 欧美xxxx中国| 久久91视频| 国产三级一区| 亚洲精品动态| 亚洲一区二区日韩| 亚洲欧洲一区| 亚洲欧美高清| 亚洲精品1区| 好吊一区二区三区| 欧美日韩国产高清电影| 免费视频一区二区| 欧美激情综合| 日韩一区二区免费看| 久久午夜视频| 亚洲资源网站| 中文字幕在线看片| 亚洲免费成人| 蜜桃久久久久| 夜夜精品视频| 国产精品久久亚洲不卡| 国产成人精品999在线观看| 在线成人动漫av| 亚洲欧美在线综合| 国产精品免费99久久久| 精品欧美日韩精品| 欧美99久久| 欧美中文高清| 欧美经典一区| 亚洲精品1区2区| 麻豆精品新av中文字幕| 在线亚洲观看| 久久久久黄色| 国产高清一区二区| 亚洲日本久久| 国产精品一区毛片| 欧美成人久久| 精品一区av| 日本不卡一区二区| 日韩欧美一区二区三区在线观看| 无码日韩精品一区二区免费| 鲁大师精品99久久久| 99re国产精品| 国产亚洲久久| 91久久久精品国产| 精品久久久亚洲| 国产欧美日韩精品一区二区三区| 日韩成人午夜精品| 国产一区二区三区自拍| 国产一区二区三区四区五区 | 激情偷拍久久| 日本成人在线不卡视频| 久久国产成人| 蜜臀a∨国产成人精品| 99成人在线视频| 久久精品色播| 国产精品v日韩精品v欧美精品网站 | 日本一区二区中文字幕| 韩国久久久久久| 国产亚洲欧美日韩精品一区二区三区 | 精品久久久亚洲| 亚洲制服一区| 久久av一区二区三区| 久久国产直播| 老司机免费视频一区二区三区| 亚洲精品日本| 亚州欧美在线| 国产区精品区| 久久精品国内一区二区三区| 美日韩一区二区三区| 亚洲综合在线电影| 蜜桃久久久久久久| 美女国产一区二区三区| 黑人精品一区| 国产在线日韩精品| 国产福利电影在线播放| 欧美日本精品| 久久精品xxxxx| 91精品国产自产在线丝袜啪| 免费黄网站欧美| 国产视频一区免费看| 蜜臀久久99精品久久久久宅男| 国产亚洲精品v| 亚洲2区在线| 久久精品国产免费| 精品深夜福利视频| 久久人人97超碰国产公开结果| 美女视频一区在线观看| 色偷偷色偷偷色偷偷在线视频| 国产精品99一区二区三| **爰片久久毛片| 欧美另类中文字幕| 久久一区二区中文字幕| 欧美福利在线| 日韩av电影一区| 日本欧美在线看| 狠狠久久伊人中文字幕| 中文欧美日韩| 亚洲天堂资源| 97久久超碰| 国产精品毛片在线看| 麻豆精品在线| 亚洲精品大全| 中文欧美日韩| 欧美日韩色图| 欧美影院精品| 91亚洲国产成人久久精品| 久久久久国产精品一区二区| 国产成人精品999在线观看| 日韩制服丝袜av| 综合国产精品| 激情欧美国产欧美| 中文字幕日本一区二区| 精品精品久久| 亚洲一区亚洲| 国产粉嫩在线观看| 国产精品分类| 国产伦一区二区三区| 久久精品国产99| 国产99亚洲| 日韩高清电影免费| 国语对白精品一区二区| 午夜久久影院| 国产美女久久| 久久九九99| 91成人网在线观看| 青青青国产精品| 99久久久久久中文字幕一区| 蜜桃视频一区二区三区| 国产精品啊啊啊| 999国产精品视频| 日本一区免费网站| 国产伦久视频在线观看| 先锋亚洲精品| 精品视频97| 日韩一区精品视频| 久久精品一本| 免费成人在线观看| 日韩成人精品一区二区| 天堂成人国产精品一区| 国产精品亚洲产品| 免费国产自久久久久三四区久久| 亚洲一级淫片| 日韩在线观看不卡| 91av一区| 欧美网站在线| 日韩成人精品一区| 97精品国产99久久久久久免费| 日韩成人亚洲|