运维开发网

proxysql-基础

运维开发网 https://www.qedev.com 2021-02-25 14:36 出处:51CTO 作者:老逗先生
特点数据库层代理,同时关于数据库实时统计和流量查询配置无需重启服务,可随时更新,同时落地到数据库中(sqlite)充当防火墙角色查询路由规则丰富,同时支持缓存数据数据分片—数据库、表、用户这三个维度关于后端数据库节点可随时增删它适用于:mysql和mariadb、PerconaServer同时还可以支持:AWSAurora和RDS、ClickHouse、GaleraCluster、OracleND

特点

  1. 数据库层代理,同时关于数据库实时统计和流量查询
  2. 配置无需重启服务,可随时更新,同时落地到数据库中(sqlite)
  3. 充当防火墙角色
  4. 查询路由规则丰富,同时支持缓存数据
  5. 数据分片—数据库、表、用户这三个维度
  6. 关于后端数据库节点可随时增删

它适用于: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

启动前,先将配置文件修改,修改如下

[[email protected] ~]# 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),如下图

proxysql-基础

  • 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中,详见下面的文章管理端口里有详细方法。

端口

proxysql-基础

6032:管理端端口

6033:应用连接端口

管理端口作用:用于以上6类大功能的配置

应用连接端口:用于应用程序的连接

这里重点述说一下管理端口配置

管理端口6032

登录命令

$ mysql -u admin-sql –padmin-sql -h 127.0.0.1 -P6032 --prompt='Admin&gt; '

注意: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表结构

管理端账号

登录账号:默认是两个admin:admin(read&write) 和stats:stats(only read)

stats账号用于监控(由admin-stats_credentials变量控制)

admin账号用于配置(由admin-admin_credentials变量控制)

注意:

默认show tables;获得的结果是main库的所有表

如何查看库下有哪些表,例如查看stats库下有哪些表

admin&gt;show tables from stats;

配置后端服务

后端服务一共两个库(1主1从)

主库:10.50.133.58

从库:10.50.133.107

适用范围:mysql、mariadb数据库

两张表:mysql_servers和mysql_replication_hostgroups(可选)

命令:

load mysql servers to runtime;
save mysql servers to disk;

添加服务:

#添加主库

Admin&gt;insert into mysql_servers(hostname,comment) values('10.50.133.58','master');`<br/>#添加从库<br/>Admin>insert into mysql_servers(hostgroup_id,hostname,comment) values(1,'10.50.133.107','slave');`

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号