不少人都會把中間件認爲是讀寫分離,其實讀寫分離只是中間件能夠提供的一種功能,最主要的功能仍是在於他能夠分庫分表。下面介紹下常見的開源mysql中間件。mysql
ProxySQL是一個高性能的、高可用性MySQL中間件,優勢以下:linux
> 幾乎全部的配置都可在線更改(其配置數據基於SQLite存儲),無需重啓proxysql > 強大的規則路由引擎,支持讀寫分離、查詢重寫、sql流量鏡像 > 詳細的狀態統計,至關於有了統一的查看sql性能和sql語句統計的入口 > 自動重連和從新執行機制,若一個請求在連接或執行過程當中意外中斷,proxysql會根據其內部機制從新執行該操做 > query cache功能:比mysql自帶QC更靈活,可多維度控制哪類語句能夠緩存 > 支持鏈接池(connection pool)。 > 支持分庫、分表 > 支持負載均衡 > 自動下線後端DB,根據延遲超過閥值、ping 延遲超過閥值、網絡不通或宕機都會自動下線節點。
下面重點介紹下ProxySQL的基礎和應用案例。git
proxySQL的官網是http://www.proxysql.com/ ,能夠從官網提供的github下載proxySQL軟件,地址爲:https://github.com/sysown/proxysql/releases, 也能夠在percona站點進行下載,下載地址爲:https://www.percona.com/downloads/proxysql/。
目前最新的proxySQL版本是proxysql-1.4.8。下面將以此版本爲主進行介紹。github
proxySQL提供了源碼包和rpm包兩種安裝方式,這裏選擇rpm方式進行安裝,過程以下:
[root@proxysql mysql]# yum install perl-DBD-mysql
[root@proxysql mysql]# rpm -ivh proxysql-1.4.8-1-centos7.x86_64.rpm
這樣,proxySQL就安裝完成了。sql
ProxySQL安裝好的數據目錄在/var/lib/proxysql/,配置文件目錄是/etc/proxysql.cnf。啓動腳本是/etc/init.d/proxysql。啓動proxysql以後,在/var/lib/proxysql/下面能夠看到以下文件:數據庫
proxysql.db:此文件是SQLITE的數據文件,proxysql配置,如後端數據庫的帳號、密碼、路由等存儲在這個數據庫裏面。 proxysql.log:此文件是日誌文件。 proxysql.pid:此文件是是進程pid文件。
須要注意的是:proxysql.cnf是ProxySQL的一些靜態配置項,用來配置一些啓動選項,sqlite的數據目錄等等。此配置文件只在第一次啓動的時候讀取進行初始化,後面只讀取proxysql.db文件。後端
ProxySQL在啓動後,會啓動管理端口和客戶端端口,能夠在配置文件/etc/proxysql.cnf中看到管理和客戶端的端口信息,默認管理的端口是6032,帳號和密碼都是admin,後面能夠動態修改,而且管理端口只能經過本地鏈接;客戶端默認端口是6033,帳號和密碼能夠經過管理接口去進行設置。centos
首先啓動proxysql ,執行以下命令:
[root@proxysql app1]# /etc/init.d/proxysql start
Starting ProxySQL: DONE!
而後登陸proxysql的管理端口6302,執行以下操做:緩存
[root@proxysql app1]# mysql -uadmin -padmin -h127.0.0.1 -P6032 MySQL [(none)]> show databases; +-----+---------------+-------------------------------------+ | seq | name | file | +-----+---------------+-------------------------------------+ | 0 | main | | | 2 | disk | /var/lib/proxysql/proxysql.db | | 3 | stats | | | 4 | monitor | | | 5 | stats_history | /var/lib/proxysql/proxysql_stats.db | +-----+---------------+-------------------------------------+ 5 rows in set (0.00 sec)
proxySQL默認有五個數據庫,對每一個庫的功能介紹以下:服務器
* main庫:內存配置數據庫,表裏存放後端db實例、用戶驗證、路由規則等信息。表名以 runtime_開頭的表示proxysql當前運行的配置內容,不能經過dml語句修改,只能修改對應的不以 runtime_ 開頭的(在內存)裏的表,而後LOAD使其生效, SAVE使其存到硬盤以供下次重啓加載。 * disk庫:是持久化到硬盤的配置庫,對應/var/lib/proxysql/proxysql.db文件,也就是sqlite的數據文件。 * stats庫:是proxysql運行抓取的統計信息庫,包括到後端各命令的執行次數、流量、processlist、查詢種類彙總/執行時間等等。 * monitor庫:存儲monitor模塊收集的信息,主要是對後端db的健康、延遲檢查。
下面依次介紹下每一個庫中經常使用的一些表的含義和功能。
登陸到proxySQL的管理端口,而後經過以下命令可查看main庫裏面的表,操做以下:
MySQL [(none)]> show tables from main;
經常使用的幾個表介紹以下:
global_variables 設置變量,包括監聽的端口、管理帳號等。 mysql_replication_hostgroups: 監視指定主機組中全部服務器的read_only值,而且根據read_only的值將服務器分配給寫入器或讀取器主機組。ProxySQL monitor模塊會監控hostgroups後端全部servers 的read_only 變量,若是發現從庫的read_only變爲0、主庫變爲1,則認爲角色互換了,自動改寫mysql_servers表裏面 hostgroup關係,達到自動 Failover 效果。 mysql_servers 設置後端MySQL的表 mysql_users 配置後端數據庫的程序帳號和監控帳號。 scheduler 調度器是一個相似於cron的實現,集成在ProxySQL中,具備毫秒的粒度。經過腳本檢測來設置ProxySQL。
登陸到proxySQL的管理端口,而後經過以下命令可查看stats庫裏面的表,操做以下:
MySQL [(none)]> show tables from stats;
經常使用的幾個表介紹以下:
stats_mysql_commands_counters 統計各類SQL類型的執行次數和時間,經過參數mysql-commands_stats控制開關,默認是ture。 stats_mysql_connection_pool 鏈接後端MySQL的鏈接信息。 stats_mysql_processlist 相似MySQL的show processlist的命令,查看各線程的狀態。 stats_mysql_query_digest 表示SQL的執行次數、時間消耗等。經過變量mysql-query_digests控制開關,默認是開。 stats_mysql_query_rules 路由命中次數統計。
登陸到proxySQL的管理端口,而後經過以下命令可查看monitor庫裏面的表,操做以下:
MySQL [(none)]> show tables from monitor;
經常使用的幾個表介紹以下:
mysql_server_connect_log 鏈接到全部MySQL服務器以檢查它們是否可用,該表用來存放檢測鏈接的日誌。 mysql_server_ping_log 使用mysql_ping API ping後端MySQL服務器,檢查它們是否可用,該表用來存放ping的日誌。 mysql_server_replication_lag_log 後端MySQL服務主從延遲的檢測。
以爲不過癮,後續還有一些列文章在等着呢:
原新浪網、阿里雲(原萬網)系統架構師,Linux暢銷書《按部就班linux》做者、51CTO博客博客專家博主、51CTO特級講師,個人最新專欄: 輕鬆玩轉ELK海量可視化日誌分析系統,連載更新中,猛戳查看:
《輕鬆玩轉ELK海量可視化日誌分析系統》