暂无图片
MySQL ProxySQL介绍
最近更新:2022-03-11 14:21:05

image.png ProxySQL是用C++语言开发的,一个轻量级开源软件,性能和功能满足读写中间件所需的绝大多数功能,其配置数据基于SQLite存储,目前已到v2.0.13版本。

功能方面如下:

  • 最基本的读/写分离,且方式有多种。
  • 可定制基于用户、基于schema、基于语句的规则对SQL语句进行路由。换句话说,规则很灵活。基于schema和与语句级的规则,可以实现简单的sharding。 不支持分表,可以分库,但利用规则配置实现分表。
  • 可缓存查询结果。基本ProxySQL的缓存策略实现了基本的缓存功能,绝大多数时候够用。 1.支持动态加载配置,即一般可以在线修改配置,但有少部分参数还是需要重启来生效。 2.支持query cache。 3.支持对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: 官方站点: https://www.proxysql.com/ 官方github: https://github.com/sysown/proxysql/wiki percona ProxySQL手册:https://www.percona.com/doc/percona-xtradb-cluster/LATEST/howtos/proxysql.html

下面基于2.0.10版本所有操作。

安装部署

安装地址:https://github.com/sysown/proxysql/releases 官方说明:https://github.com/sysown/proxysql/wiki proxysql服务器上安装mysql客户端,用于在本机连接到ProxySQL的管理接口

1.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

2.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.

3.启动服务

[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

4.配置信息 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

5.参数配置文件

[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结构

......