靈活強大的MySQL代理中間件ProxySQL應用實戰(1)

1、常見的Mysql中間件介紹

不少人都會把中間件認爲是讀寫分離,其實讀寫分離只是中間件能夠提供的一種功能,最主要的功能仍是在於他能夠分庫分表。下面介紹下常見的開源mysql中間件。mysql

  • DBProxy是由美團點評公司技術工程部DBA團隊(北京)開發維護的一個基於MySQL協議的數據中間層。它在奇虎360公司開源的Atlas基礎上,修改了部分bug,而且添加了不少特性。
  • Atlas是由奇虎360公發的基於MySQL協議的數據庫中間件產品,它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎上,修改了若干Bug,並增長了不少功能特性。目前該產品在360內部獲得了普遍應用。
  • Cobar是阿里巴巴B2B開發的關係型分佈式系統,管理將近3000個MySQL實例。 在阿里經受住了考驗,後面因爲做者的走開的緣由cobar沒有人維護 了,阿里也開發了tddl替代cobar。
  • MyCAT是社區愛好者在阿里cobar基礎上進行二次開發,解決了cobar當時存 在的一些問題,而且加入了許多新的功能在其中。目前MyCAT社區活躍度很高,目前已經有一些公司在使用MyCAT。整體來講支持度比較高,也會一直維護下去。
  • MySQL Route是如今MySQL 官方Oracle公司發佈出來的一箇中間件。

2、proxySQL簡介

ProxySQL是一個高性能的、高可用性MySQL中間件,優勢以下:linux

> 幾乎全部的配置都可在線更改(其配置數據基於SQLite存儲),無需重啓proxysql
> 強大的規則路由引擎,支持讀寫分離、查詢重寫、sql流量鏡像
> 詳細的狀態統計,至關於有了統一的查看sql性能和sql語句統計的入口
> 自動重連和從新執行機制,若一個請求在連接或執行過程當中意外中斷,proxysql會根據其內部機制從新執行該操做
> query cache功能:比mysql自帶QC更靈活,可多維度控制哪類語句能夠緩存
> 支持鏈接池(connection pool)。
> 支持分庫、分表
> 支持負載均衡
> 自動下線後端DB,根據延遲超過閥值、ping 延遲超過閥值、網絡不通或宕機都會自動下線節點。

下面重點介紹下ProxySQL的基礎和應用案例。git

3、proxySQL的下載與安裝

一、下載proxySQL

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

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的目錄結構

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

4、proxySQL庫表功能介紹

一、庫、表說明

首先啓動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的健康、延遲檢查。

下面依次介紹下每一個庫中經常使用的一些表的含義和功能。

二、main庫

登陸到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。

三、stats庫

登陸到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
路由命中次數統計。

四、monitor庫

登陸到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海量可視化日誌分析系統》
靈活強大的MySQL代理中間件ProxySQL應用實戰(1)

相關文章
相關標籤/搜索