特点
- 数据库层代理,同时关于数据库实时统计和流量查询
- 配置无需重启服务,可随时更新,同时落地到数据库中(sqlite)
- 充当防火墙角色
- 查询路由规则丰富,同时支持缓存数据
- 数据分片—数据库、表、用户这三个维度
- 关于后端数据库节点可随时增删
它适用于:mysql和mariadb、Percona Server
同时还可以支持:AWS Aurora 和RDS、ClickHouse、Galera Cluster、Oracle NDB Cluster、SQLite
安装步骤
Centos系统
添加源
cat <<EOF | tee /etc/yum.repos.d/proxysql.repo
[proxysql_repo]
name= ProxySQL YUM repository
baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/centos/\$releasever
gpgcheck=1
gpgkey=https://repo.proxysql.com/ProxySQL/repo_pub_key
EOF
安装proxysql
yum install proxysql -y
启动前,先将配置文件修改,修改如下
[root@MWF-DB-T01 ~]# egrep -v "^#|^$" /etc/proxysql.cnf
datadir="/gwmfc/app/proxysql "
errorlog="/var/log/proxysql/proxysql.log"
admin_variables=
{
admin_credentials="admin-sql:admin-sql;sys-sql:sys-sql "
mysql_ifaces="127.0.0.1:6032"
}
mysql_variables=
{
threads=4
max_connections=2048
default_query_delay=0
default_query_timeout=36000000
have_compress=true
poll_timeout=2000
interfaces="0.0.0.0:6033"
default_schema="information_schema"
stacksize=1048576
server_version="8.0.19"
connect_timeout_server=3000
monitor_username="monitor-sql"
monitor_password="monitor-sql"
monitor_history=600000
monitor_connect_interval=60000
monitor_ping_interval=10000
monitor_read_only_interval=1500
monitor_read_only_timeout=500
ping_interval_server_msec=120000
ping_timeout_server=500
commands_stats=true
sessions_sort=true
connect_retries_on_failure=10
}
mysql_servers =
(
)
mysql_users:
(
)
mysql_query_rules:
(
)
scheduler=
(
)
mysql_replication_hostgroups=
(
)
注意:黄色部分是修改后的
修改pid文件的路径,文件/etc/systemd/system/proxysql.service
PIDFile=/data/proxysql/proxysql.pid
注意:配置文件和服务文件的修改是将/var/lib/proxysql的目录不使用了,数据目录放到了/data目录下(pid也放到了这里),日志放到了/var/log下
需要提前创建好目录
mkdir /var/log/proxysql / /gwmfc/app/proxysql -p
chown -R proxysql.proxysql /var/log/proxysql /data/proxysql
启动服务
systemctl enable proxysql
systemctl start proxysql
配置架构
在讲解配置时,先说一下配置层的架构(管理端口主要是更改配置的三层内容)
它一共由三层组成(runtime、memory、disk),如下图
-
Runtime
顾名思义:运行层,它是真正跟客户端交互层
特点:不能直接改变,它由工作线程控制的内存数据结构。
它共包含三种配置:global variables、组和后端服务列表、用户列表
-
MEMORY
这一层:是放到内存的,它是可查看并编辑的,落地到数据表中
通过更新表内容就可以实现MEMORY更新,重要表如下:
mysql_servers---proxysql连接的后端服务
mysql_users----连接proxysql使用的账号和密码(这个就是连接后端的账号密码)
mysql_query_rules----查询规则列表(路由到不同的后端服务),这些规则也能重写查询甚至缓存查询的结果。
global_variables-----全局变量,随时可以调整(只有加载到runtime才会对工作线程生效)
-
Disk and config file
磁盘:实际落地到sqlite3数据库中。目录是$(DATADIR)/proxysql.db
config file:一般第一次启动时使用,后续不使用。第一次启动前需要更改点:数据目录/gwmfc/app/proxysql/。日志目录/var/log/proxysql/proxysql.log。管理员账号密码更改为admin-sql:admin-sql;sys-sql:sys-sql ----弄俩账号后面说具体原因。版本号:根据后端进行更改,尽量保持一致。监控账号密码:monitor-sql:monitor-sql。其他统一去登录管理端进行修改。
注意:变更内存中的数据后,需要加载到runtime和disk中,详见下面的文章管理端口里有详细方法。
端口
6032:管理端端口
6033:应用连接端口
管理端口作用:用于以上6类大功能的配置
应用连接端口:用于应用程序的连接
这里重点述说一下管理端口配置
管理端口6032
登录命令
$
mysql -u admin-sql –padmin-sql -h 127.0.0.1 -P6032 --prompt='Admin> '
注意:mysql8.0.4及以上的客户端在登录时,请添加--default-auth=mysql_native_password
更改账号密码方式:它是以全局变量方式存储
set admin-admin_credentials = 'admin:admin;admin-psql:admin-psql';
#最好将admin账号去掉,以防因proxysql有漏洞导致被黑
更改之后,执行如下命令:
load admin variables to runtime;
save admin variables to disk;
NOTE:变更后的配置需要加载到不同的层,命令如下
-
[1] LOAD <item> FROM MEMORY / LOAD <item> TO RUNTIME
将内存中的配置加载到runtime层
-
[2] SAVE <item> TO MEMORY / SAVE <item> FROM RUNTIME
将runtime层的配置保存到内存中
-
[3] LOAD <item> TO MEMORY / LOAD <item> FROM DISK
将磁盘中的配置加载到内存中
-
[4] SAVE <item> FROM MEMORY / SAVE <item> TO DISK
将内存中的配置保存到磁盘中
-
[5] LOAD <item> FROM CONFIG
将配置文件中的配置加载到内存中
注意:配置命令使用的是sqlite3的sql语法,跟mysql有些不一样。例如:USE在sqlite3中没有
数据库
有main/disk/stats/monitor/myhgm共计5个库
各个库说明
main:内存配置库,执行的sql命令都是变更的它(除了save、load)。
disk:它是main的镜像。
stats:包含runtime层的metrics(proxysql内部功能收集的),比如每个规则匹配的次数统计,当前运行的查询等等。
monitor:包含监控metrics(和所连接的后端服务有关),例如连接某一个后端服务的最大、最小时间(ping方式)
myhgm:这里不说,只有开启debug才有。
关于库中表的命令使用说明
注意:无法用desc和show columns查看表结构,只能通过show create(比较操蛋),例如查看mysql_servers表结构
管理端账号
配置后端服务
load mysql servers to runtime;
save mysql servers to disk;