MySQL Router 测试使用 转
生活随笔
收集整理的這篇文章主要介紹了
MySQL Router 测试使用 转
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
MySQL Router 測試使用1. 特性
MySQL Router 并沒有包括一些特別新的特性, 總體上看中規(guī)中矩, 不過 first-available 和插件兩個特性挺有意思, 后續(xù)會進行講解, 特性包括:
對連接請求進行路由;和 Fabric 配套使用, 方便管理;
插件特性, 需要的功能以插件形式提供;2. 配置
MySQL Router 在啟動的時候會讀取默認的配置文件, 用戶可以通過 -DROUTER_CONFIGDIR= 或編輯 cmake/settings.cmake 來自定義配置文件, 默認情況下從以下路徑讀取:[root@cz-centos7 bin]# ./mysqlrouter --help
Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Start MySQL Router.Configuration read from the following files in the given order (enclosed
in parentheses means not available for reading):(./mysqlrouter.ini)(/root/.mysqlrouter.ini)Usage: mysqlrouter [-v|--version] [-h|--help][-c|--config=][-a|--extra-config=]
Options:-v, --versionDisplay version information and exit.-h, --helpDisplay this help and exit.-c , --config Only read configuration from given file.-a , --extra-config Read this file after configuration files are read from eitherdefault locations or from files specified by the --configoption.
值得一提的是 -c 選項指定的配置會被最先加載, -a 指定的配置后續(xù)加載.2.1 配置文件設(shè)置2.1.1 通用選項通用選項可以放到 [DEFAULT] 塊中, 通常包括一些目錄路徑配置:logging_folder: MySQL Router 運行時產(chǎn)生 log 的目錄路徑, log 文件默認為 mysqlrouter.log, 不設(shè)置路徑默認輸出到標準輸出(STDOUT);
plugin_folder: MySQL Router 的插件路徑, 該路徑必須和 MySQL Router 的安裝目錄對應(yīng)上, 如果是自定義的安裝路徑, 該選項必須要指定, 默認為 /usr/local/lib/mysqlrouter;
runtime_folder: MySQL Router 運行時候的目錄路徑, 默認為 /usr/local ;
config_folder: MySQL Router 配置文件的路徑, 默認為 /usr/loca/etc/mysqlrouter
舉例如下:[DEFAULT]
logging_folder = /var/log/mysqlrouter
plugin_folder = /usr/local/mysqlrouter/lib
runtime_folder = /usr/local/mysqlrouter
2.1.2 路由選項以下選項可以放到路由策略 [routing:] 塊中:bind_address: 工具啟動的時候綁定的網(wǎng)卡地址, 默認為 127.0.0.1, 如果沒有指定端口, bind_port 選項則必須指定; bind_port: 工具啟動監(jiān)聽的端口, 如果 bind_address 以 ip:port 形式指定, 則 bind_port 不需要再指定; connect_timeout: 工具連接后端 MySQL Server 的超時時間, 默認為 1s, 有效的值為 1 ~ 65535; destinations: 以分號形式提供后端需要連接的 MySQL Server 列表; mode: 該選項必須要指定, 不同模式對應(yīng)不同的調(diào)度策略, 目前支持兩種方式: read-write 和 read-only; max_connections: 連接到 MySQL Router 的最大連接數(shù), 類似 MySQL Server 中的 max_connections 選項;
在 mode 選項中, 我們可以選用 read-write 和 read-only 模式:
read-write: 通常用于路由到后端的 MySQL master, 在 read-write 模式中, 所有的流量都轉(zhuǎn)發(fā)到 destinations 指定的列表的首個地址, 比如 “127.0.0.1:3301, 127.0.0.1:3302″, 則所有的流量都轉(zhuǎn)發(fā)到 3301 端口, 如果 3301 端口失敗, 則嘗試連接 3302 端口, 如果列表中沒有有效的MySQL Server, 路由請求會被中斷丟棄; 這種方式被稱作 “first-available”. 這種方式可以適用于一般的主從架構(gòu)中, 比如指定列表 “master:3301, slave1:3301″, 在 master 出現(xiàn)故障的時候, MySQL Router 會自己連接 slave1, 不過中間的切換過程需要我們做很多的操作來滿足這種工作模式.read-only: 路由請求到后端的 MySQL slave, 從這點看 read-only 模式下, destitions 指定的 MySQL Server 列表應(yīng)該都是 slave, 不同于 read-write 都指定的是 master. 在 read-only 模式中, 使用輪詢( round-robin )方式轉(zhuǎn)發(fā)請求到后端的 Server. 如果一個 Server 不可用,則嘗試下一個 Server, 這意味著不會丟失一個請求, 如果服務(wù)都不可用, 則丟棄請求.這種模式下如果應(yīng)用讀寫分離, read-only 會是比較好的選擇.從上面兩點看, MySQL Router 的服務(wù)模式和我們熟知的 cobar, atlas, kingshard 等大為不同, master, slave 都需要單獨配置, 這點在擴展性方面比較差, 估計很多人不會喜歡該模式, 不過話說回來, 如果能夠和 Fabric 很好的配合使用的話, 可能會吸引一部分用戶使用.2.1.3 日志日志選擇可以放到 [logger] 塊中, 可以用來指定日志級別, 默認為 INFO, 輸出則依賴 logging_folder 的選項: [logger] level = DEBUG
2.2 配置舉例我們以讀擴展的配置舉例說明(read-write 模式估計不受歡迎 ~~, 可以配置多個 routing:, MySQL Router 可以啟動多個routing ):[DEFAULT] logging_folder = /usr/local/mysqlrouter/log plugin_folder = /usr/local/mysqlrouter/lib/mysqlrouter runtime_folder = /usr/local/mysqlrouter[logger] level = DEBUG[routing:readtest] bind_address = 0.0.0.0:7001 mode = read-only destinations = 10.0.21.7:3301,10.0.21.17:3301 #不能有空格
3 連接測試啟動./bin/mysqlrouter -c /usr/local/mysqlrouter/etc/mysqlrouter.ini 先來看看最簡單的測試:[root@cz-centos7 ~]# time for x in `seq 1 5`; do /opt/Percona-Server-5.5.33-rel31.1-566.Linux.x86_64/bin/mysql -h 10.0.21.90 -P 7001 -uroot percona -Bse "show global variables like 'hostname'; show tables"; done 配置舉例[DEFAULT] logging_folder = /usr/local/mysqlrouter/log plugin_folder = /usr/local/mysqlrouter/lib/mysqlrouter runtime_folder = /usr/local/mysqlrouter[logger] level = DEBUG[routing:readtest] bind_address = 0.0.0.0:7001 mode = read-write destinations = 10.0.21.17:3301 #多個地址用逗號分隔, 中間不能有空格 我們這里只設(shè)置一個 master, 然后再對比下直連 MySQL 和連接 MySQL Router 的測試結(jié)果.直連 master:[root@cz-centos7 ~]# /opt/mysql/bin/mysqlslap -h 10.0.21.17 -P 3301 -uroot -a --auto-generate-sql-execute-number=10000 --auto-generate-sql-load-type=read --auto-generate-sql-secondary-indexes=3 --auto-generate-sql-unique-query-number=1 --auto-generate-sql-write-number=1000 -c 10 BenchmarkAverage number of seconds to run all queries: 180.839 secondsMinimum number of seconds to run all queries: 180.839 secondsMaximum number of seconds to run all queries: 180.839 secondsNumber of clients running queries: 10Average number of queries per client: 10000 連接 MySQL Router:[root@cz-centos7 ~]# /opt/mysql/bin/mysqlslap -h 10.0.21.90 -P 7001 -uroot -a --auto-generate-sql-execute-number=10000 --auto-generate-sql-load-type=read --auto-generate-sql-secondary-indexes=3 --auto-generate-sql-unique-query-number=1 --auto-generate-sql-write-number=1000 -c 10 BenchmarkAverage number of seconds to run all queries: 433.598 secondsMinimum number of seconds to run all queries: 433.598 secondsMaximum number of seconds to run all queries: 433.598 secondsNumber of clients running queries: 10Average number of queries per client: 10000 從時間總是上看, 直連方式中10個線程執(zhí)行 1w 次請求需要大約 181s 左右, 平均每個線程每秒執(zhí)行5.5次, 連接 MySQL Router 則每個線程平均每秒執(zhí)行2.3次, 多了一層轉(zhuǎn)發(fā)性能消耗還是比較明顯的. 這里只是簡單的測試, destinations 中如果提供多個服務(wù)作為 read 擴展, 相信性能還是會有所提升的.總體上看, 應(yīng)用程序本身支持讀寫分離的話, 分別指定兩個 routing section(read-write 和 read-only) 會是很不錯的選擇, 當(dāng)然比起 atlas, cobar 等, 應(yīng)用程序的結(jié)構(gòu)會稍顯復(fù)雜, 擴展性不強.
2.1.2 路由選項以下選項可以放到路由策略 [routing:] 塊中:bind_address: 工具啟動的時候綁定的網(wǎng)卡地址, 默認為 127.0.0.1, 如果沒有指定端口, bind_port 選項則必須指定; bind_port: 工具啟動監(jiān)聽的端口, 如果 bind_address 以 ip:port 形式指定, 則 bind_port 不需要再指定; connect_timeout: 工具連接后端 MySQL Server 的超時時間, 默認為 1s, 有效的值為 1 ~ 65535; destinations: 以分號形式提供后端需要連接的 MySQL Server 列表; mode: 該選項必須要指定, 不同模式對應(yīng)不同的調(diào)度策略, 目前支持兩種方式: read-write 和 read-only; max_connections: 連接到 MySQL Router 的最大連接數(shù), 類似 MySQL Server 中的 max_connections 選項;
在 mode 選項中, 我們可以選用 read-write 和 read-only 模式:
read-write: 通常用于路由到后端的 MySQL master, 在 read-write 模式中, 所有的流量都轉(zhuǎn)發(fā)到 destinations 指定的列表的首個地址, 比如 “127.0.0.1:3301, 127.0.0.1:3302″, 則所有的流量都轉(zhuǎn)發(fā)到 3301 端口, 如果 3301 端口失敗, 則嘗試連接 3302 端口, 如果列表中沒有有效的MySQL Server, 路由請求會被中斷丟棄; 這種方式被稱作 “first-available”. 這種方式可以適用于一般的主從架構(gòu)中, 比如指定列表 “master:3301, slave1:3301″, 在 master 出現(xiàn)故障的時候, MySQL Router 會自己連接 slave1, 不過中間的切換過程需要我們做很多的操作來滿足這種工作模式.read-only: 路由請求到后端的 MySQL slave, 從這點看 read-only 模式下, destitions 指定的 MySQL Server 列表應(yīng)該都是 slave, 不同于 read-write 都指定的是 master. 在 read-only 模式中, 使用輪詢( round-robin )方式轉(zhuǎn)發(fā)請求到后端的 Server. 如果一個 Server 不可用,則嘗試下一個 Server, 這意味著不會丟失一個請求, 如果服務(wù)都不可用, 則丟棄請求.這種模式下如果應(yīng)用讀寫分離, read-only 會是比較好的選擇.從上面兩點看, MySQL Router 的服務(wù)模式和我們熟知的 cobar, atlas, kingshard 等大為不同, master, slave 都需要單獨配置, 這點在擴展性方面比較差, 估計很多人不會喜歡該模式, 不過話說回來, 如果能夠和 Fabric 很好的配合使用的話, 可能會吸引一部分用戶使用.2.1.3 日志日志選擇可以放到 [logger] 塊中, 可以用來指定日志級別, 默認為 INFO, 輸出則依賴 logging_folder 的選項: [logger] level = DEBUG
2.2 配置舉例我們以讀擴展的配置舉例說明(read-write 模式估計不受歡迎 ~~, 可以配置多個 routing:, MySQL Router 可以啟動多個routing ):[DEFAULT] logging_folder = /usr/local/mysqlrouter/log plugin_folder = /usr/local/mysqlrouter/lib/mysqlrouter runtime_folder = /usr/local/mysqlrouter[logger] level = DEBUG[routing:readtest] bind_address = 0.0.0.0:7001 mode = read-only destinations = 10.0.21.7:3301,10.0.21.17:3301 #不能有空格
3 連接測試啟動./bin/mysqlrouter -c /usr/local/mysqlrouter/etc/mysqlrouter.ini 先來看看最簡單的測試:[root@cz-centos7 ~]# time for x in `seq 1 5`; do /opt/Percona-Server-5.5.33-rel31.1-566.Linux.x86_64/bin/mysql -h 10.0.21.90 -P 7001 -uroot percona -Bse "show global variables like 'hostname'; show tables"; done 配置舉例[DEFAULT] logging_folder = /usr/local/mysqlrouter/log plugin_folder = /usr/local/mysqlrouter/lib/mysqlrouter runtime_folder = /usr/local/mysqlrouter[logger] level = DEBUG[routing:readtest] bind_address = 0.0.0.0:7001 mode = read-write destinations = 10.0.21.17:3301 #多個地址用逗號分隔, 中間不能有空格 我們這里只設(shè)置一個 master, 然后再對比下直連 MySQL 和連接 MySQL Router 的測試結(jié)果.直連 master:[root@cz-centos7 ~]# /opt/mysql/bin/mysqlslap -h 10.0.21.17 -P 3301 -uroot -a --auto-generate-sql-execute-number=10000 --auto-generate-sql-load-type=read --auto-generate-sql-secondary-indexes=3 --auto-generate-sql-unique-query-number=1 --auto-generate-sql-write-number=1000 -c 10 BenchmarkAverage number of seconds to run all queries: 180.839 secondsMinimum number of seconds to run all queries: 180.839 secondsMaximum number of seconds to run all queries: 180.839 secondsNumber of clients running queries: 10Average number of queries per client: 10000 連接 MySQL Router:[root@cz-centos7 ~]# /opt/mysql/bin/mysqlslap -h 10.0.21.90 -P 7001 -uroot -a --auto-generate-sql-execute-number=10000 --auto-generate-sql-load-type=read --auto-generate-sql-secondary-indexes=3 --auto-generate-sql-unique-query-number=1 --auto-generate-sql-write-number=1000 -c 10 BenchmarkAverage number of seconds to run all queries: 433.598 secondsMinimum number of seconds to run all queries: 433.598 secondsMaximum number of seconds to run all queries: 433.598 secondsNumber of clients running queries: 10Average number of queries per client: 10000 從時間總是上看, 直連方式中10個線程執(zhí)行 1w 次請求需要大約 181s 左右, 平均每個線程每秒執(zhí)行5.5次, 連接 MySQL Router 則每個線程平均每秒執(zhí)行2.3次, 多了一層轉(zhuǎn)發(fā)性能消耗還是比較明顯的. 這里只是簡單的測試, destinations 中如果提供多個服務(wù)作為 read 擴展, 相信性能還是會有所提升的.總體上看, 應(yīng)用程序本身支持讀寫分離的話, 分別指定兩個 routing section(read-write 和 read-only) 會是很不錯的選擇, 當(dāng)然比起 atlas, cobar 等, 應(yīng)用程序的結(jié)構(gòu)會稍顯復(fù)雜, 擴展性不強.
?
轉(zhuǎn)載于:https://www.cnblogs.com/zengkefu/p/5499706.html
總結(jié)
以上是生活随笔為你收集整理的MySQL Router 测试使用 转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]面向对象的六大原则
- 下一篇: Linux学习入门