ProxySQL是用C++語言開發的,一個輕量級開源軟件,性能和功能滿足讀寫中間件所需的絕大多數功能,其配置數據基于SQLite存儲,目前已到v2.0.13版本。
功能方面如下:
- 最基本的讀/寫分離,且方式有多種。
- 可定制基于用戶、基于schema、基于語句的規則對SQL語句進行路由。換句話說,規則很靈活。基于schema和與語句級的規則,可以實現簡單的sharding。
- 不支持分表,可以分庫,但利用規則配置實現分表。
- 可緩存查詢結果。基本ProxySQL的緩存策略實現了基本的緩存功能,絕大多數時候夠用。支持動態加載配置,即一般可以在線修改配置,但有少部分參數還是需要重啟來生效。支持query cache。支持對query的路由,可以針對某個語句進行分配執行實例。
- 監控后端節點。ProxySQL可以監控后端節點的多個指標,包括:ProxySQL和后端的心跳信息,后端節點的read-only/read-write,slave和master的數據同步延遲性 (replication lag)。
特性方面:
- 連接池,而且是 multiplexing;
- 主機和用戶的最大連接數限制;
- 自動下線后端DB;延遲超過閥值ping 延遲超過閥值網絡不通或宕機
- 強大的規則路由引擎;實現讀寫分離查詢重寫sql流量鏡像
- 支持prepared statement;
- 支持Query Cache;
- 支持負載均衡,與gelera結合自動failover;
- 將所有配置保存寫入到SQLit表中。
- 支持動態加載配置,即一般可以在線修改配置,但有少部分參數還是需要重啟來生效。
- 支持query cache。
- 支持對query的路由。
- 不支持分表,可以分庫,但是利用規則配置實現分表。
ProxySQL:
官方站點
官方github
percona ProxySQL手冊
下面基于2.0.10版本所有操作。
安裝部署
安裝地址
官方說明
proxysql服務器上安裝MySQL客戶端,用于在本機連接到ProxySQL的管理接口
一、tar.gz安裝
[root@ss30 proxysql-2.0.10]# tar -xvf proxysql-2.0.10.tar.gz.gz
[root@ss30 proxysql-2.0.10]# cd proxysql-2.0.10/
[root@ss30 proxysql-2.0.10]# make -j 4
[root@ss30 proxysql-2.0.10]# make install DESTDIR=/opt/idc/proxysql-2.0.10
make[1]: Leaving directory `/opt/idc/softwares/proxysql-2.0.10/src'
[root@ss30 proxysql-2.0.10]# make install DESTDIR=/opt/idc/proxysql-2.0.10
install -m 0755 src/proxysql /usr/bin
install -m 0600 etc/proxysql.cnf /etc
if [ ! -d /var/lib/proxysql ]; then mkdir /var/lib/proxysql ; fi
Creating proxysql user and group
useradd -r -U -s /bin/false proxysql
install -m 0644 systemd/system/proxysql.service /usr/lib/systemd/system/
systemctl enable proxysql.service
Created symlink from /etc/systemd/system/multi-user.target.wants/proxysql.service to /usr/lib/systemd/system/proxysql.service.
卸載:make uninstall
二、rpm包安裝
rpm解壓即可,會在/usr/local/proxysql 生成文件
[root@ss30 softwares]# rpm -ivh proxysql-2.0.10-1-centos7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:proxysql-2.0.10-1 warning: group proxysql does not exist - using root
warning: group proxysql does not exist - using root
################################# [100%]
Created symlink from /etc/systemd/system/multi-user.target.wants/proxysql.service to /etc/systemd/system/proxysql.service.
三、啟動服務
[root@ss30 softwares]# systemctl start proxysql
[root@ss30 softwares]# ps -ef | grep proxy
proxysql 3964 1 0 21:01 ? 00:00:00 /usr/bin/proxysql -c /etc/proxysql.cnf
proxysql 3965 3964 7 21:01 ? 00:00:00 /usr/bin/proxysql -c /etc/proxysql.cnf
root 3989 77420 0 21:01 pts/2 00:00:00 grep --color=auto proxy
服務命令:systemctl start | stop | restart | statu proxysql
四、配置信息
ProxySQL很少停止或重啟,因為絕大多數配置都可以在線修改。
服務啟動配置文件
[root@ss30 proxysql-2.0.10]# vim /etc/systemd/system/proxysql.service
[Unit]
Description=High Performance Advanced Proxy for MySQL
After=network.target
[Service]
Type=forking
RuntimeDirectory=proxysql
#PermissionsStartOnly=true
#ExecStartPre=/usr/bin/mkdir -p /var/run/proxysql /var/run/proxysql
#ExecStartPre=/usr/bin/chown -R proxysql: /var/run/proxysql/
ExecStart=/usr/bin/proxysql -c /etc/proxysql.cnf
#PIDFile=/var/lib/proxysql/proxysql.pid
#StandardError=null # all output is in stderr
SyslogIdentifier=proxysql
Restart=no
User=proxysql
Group=proxysql
PermissionsStartOnly=true
UMask=0007
LimitNOFILE=102400
LimitCORE=1073741824
ProtectHome=yes
NoNewPrivileges=true
CapabilityBoundingSet=CAP_SETGID CAP_SETUID CAP_SYS_RESOURCE
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX AF_ALG
ProtectSystem=full
PrivateDevices=yes
[Install]
WantedBy=multi-user.target
五、參數配置文件
[root@ss30 softwares]# vim /etc/proxysql.cnf
datadir="/var/lib/proxysql"
errorlog="/var/lib/proxysql/proxysql.log"
admin_variables=
{
admin_credentials="admin:admin"
# mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"
mysql_ifaces="0.0.0.0:6032"
# refresh_interval=2000
# debug=true
}
......
ProxySQL結構
- Qurey Processor 用于匹配查詢規則并根據規則決定是否緩存查詢或者將查詢加入黑名單或者重新路由、重寫查詢或者鏡像查詢到其他hostgroup。
- User Auth 為底層后端數據庫認證提供了用戶憑證。
- Hostgroup manager – 負責管理發送SQL請求都后端數據庫并跟蹤SQL請求狀態。
- Connection pool – 負責管理后端數據庫連接,連接池中建立的連接被所有的前端應用程序共享。
- Monitoring – 負責監控后端數據庫健康狀態主從復制延時并臨時下線不正常的數據庫實例。
一、啟動過程
- RUNTIME層代表的是ProxySQL當前生效的配置,包括 globalvariables, mysqlservers, mysqlusers, mysqlquery_rules。無法直接修改這里的配置,必須要從下一層load進來
- MEMORY層是平時在mysql命令行修改的 main 里頭配置,可以認為是SQLite數據庫在內存的鏡像。該層級的配置在main庫中以mysql開頭的表以及globalvariables表,這些表的數據可以直接修改;
- DISK|CONFIG FILR層持久存儲的那份配置,一般在$(DATADIR)/proxysql.db,在重啟的時候會從硬盤里加載。 /etc/proxysql.cnf文件只在第一次初始化的時候用到,完了后,如果要修改監聽端口,還是需要在管理命令行里修改,再 save 到硬盤。
注意:
如果找到數據庫文件(proxysql.db),ProxySQL 將從 proxysql.db 初始化其內存中配置。因此,磁盤被加載到 MEMORY 中,然后加載到 RUNTIME 中。
如果找不到數據庫文件(proxysql.db)且存在配置文件(proxysql.cfg),則解析配置文件并將其內容加載到內存數據庫中,然后將其保存在 proxysql.db 中并在加載到 RUNTIME。
請務必注意,如果找到 proxysql.db,則不會解析配置文件。也就是說,在正常啟動期間,ProxySQL 僅從持久存儲的磁盤數據庫初始化其內存配置。
二、數據庫結構
ProxySQL自身共有5個 庫,分別為3個保存在內存中的庫,和三個保存在磁盤的SQLite庫。
通過6032管理端口登入后,默認就是main庫,所有的配置更改都必須在這個庫中進行,disk存檔庫不會直接受到影響。接下來看下
[root@ss30 proxysql-2.0.10]# mysql -uadmin -padmin -h127.0.0.1 -P6032
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 2
Server version: 5.5.30 (ProxySQL Admin Module)
mysql> 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)
- main:內存配置數據庫,表里存放后端db實例、用戶驗證、路由規則等信息。表名以 runtime開頭的表示proxysql當前運行的配置內容,不能通過dml語句修改,只能修改對應的不以 runtime 開頭的(在內存)里的表,然后 LOAD 使其生效, SAVE 使其存到硬盤以供下次重啟加載。
- disk:是持久化到硬盤的配置,sqlite數據文件。SQLite3 數據庫,默認位置為 $(DATADIR)/proxysql.db,在重新啟動時,未保留的內存中配置將丟失。因此,將配置保留在 DISK 中非常重要。(SQLite是一個進程內的庫,實現了自給自足的、無服務器的、零配置的、事務性的 SQL 數據庫引擎)
- stats:proxysql運行抓取的統計信息,包括到后端各命令的執行次數、流量、processlist、查詢種類匯總/執行時間等等。
- monitor:庫存儲 monitor 模塊收集的信息,主要是對后端db的健康/延遲檢查。
- stats_history:統計信息歷史庫
三、核心配置表
五、小結
這些數據庫的功能實現了實用化內容:
- 允許輕松動態更新配置,便于運維管理,與MySQL兼容的管理界面可用于此目的。
- 允許盡可能多的配置項目動態修改,而不需要重新啟動ProxySQL進程
- 可以毫不費力地回滾無效配置
- 通過多級配置系統實現的,其中設置從運行時移到內存,并根據需要持久保存到磁盤
ProxySQL讀寫分離配置
一、MySQL里創建賬號
數據庫段創建訪問用戶,監控用戶
[root@ss30 ~]# mysql -uroot -p123456 -h127.0.0.1 -P3410
mysql> GRANT ALL PRIVILEGES ON *.* TO 'dbadmin'@'%' identified by '123456' WITH GRANT OPTION;
mysql> create user monitor@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> grant replication client on *.* to monitor@'%';
Query OK, 0 rows affected (0.01 sec)
二、添加MySQL節點
...
? 接下來內容請訪問原文(https://www.modb.pro/db/28841?YYF)進行查看~
更多數據庫相關內容,可訪問墨天輪(https://www.modb.pro/?YYF)進行瀏覽。






