MySQL 8.x配置MGR高可用+ProxySQL读写分离(二):ProxySQL配置MySQL代理及读写分离

#作者:stackofumbrella

文章目录

ProxySQL简介

ProxySQL是基于MySQL的一款开源的中间件的产品,是一个灵活的MySQL代理层,可以实现读写分离,支持Query路由功能,支持动态指定某个SQL进行缓存,支持动态加载(无需重启 ProxySQL 服务),故障切换和一些 SQL 的过滤功能。

具有以下优点和特性:

  • 支持动态加载配置,可以在线修改配置。
  • 支持query cache。
  • 支持对query的路由,可以针对某个语句进行分配执行实例。
  • 监控后端节点,包括:ProxySQL和后端的心跳信息,后端节点的read-only/read-write,slave和master的数据同步延迟性 (replication lag)。
    能处理千亿级的数据。
  • 最基本的读/写分离,且方式有多种。
  • 可定制基于用户、基于schema、基于语句的规则对SQL语句进行路由。
  • 理解MySQL协议,具有高级连接处理能力。
  • 具有数据库防火墙功能,保护数据和流量免受恶意活动的侵害。

官方地址:https://www.proxysql.com/

Github仓库:https://github.com/sysown/proxysql/wiki

软件下载:https://github.com/sysown/proxysql/releases

ProxySQL架构

ProxySQL 2.0.x版本以后开始支持MGR高可用,这样结合MGR,使得MySQL主从集群具有更加完备的对外访问能力。

ProxySQL的安装与配置

环境准备

首先需要安装MySQL主从集群,即一主两从集群,过程比较简单,这里不再详述。

ProxySQL安装

复制代码
$ sudo apt-get install -y --no-install-recommends lsb-release wget apt-transport-https ca-certificates
$ wget https://github.com/sysown/proxysql/releases/download/v2.7.3/proxysql_2.7.3-ubuntu22_amd64.deb
$ sudo dpkg -i proxysql_2.7.3-ubuntu22_amd64.deb

启动ProxySQL

复制代码
$ sudo systemctl start proxysql
$ ss -tnl

6032是ProxySQL的管理端口号,6033是对外服务的端口号
连接ProxySQL

复制代码
$ sudo apt install mysql-client-core-8.0

登录proxysql,proxysql的用户名和密码都是默认的admin

复制代码
$ mysql -uadmin -padmin -h 127.0.0.1 -P 6032
mysql> show databases;

可见有五个库:main、disk、stats、monitor和stats_history

main:内存配置数据库,即MEMORY,表里存放后端db 实例、用户验证、路由规则等信息。main库中有如下信息:

mysql> use main;

mysql> show tables;

main库下的主要表

mysql_servers:后端可以连接MySQL服务器的列表

mysql_users:配置后端数据库的账号和监控的账号

mysql_query_rules:指定Query路由到后端不同服务器的规则列表

注: 表名以runtime_开头的表示ProxySQL当前运行的配置内容,不能通过DML语句修改。只能修改对应的不以 runtime开头的表,然后"LOAD"使其生效,"SAVE"使其存到硬盘以供下次重启加载。
disk库下的主要表

主要是一些持久化磁盘的配置

stats库下的主要表

主要是统计信息的汇总

stats_mysql_connection_pool表

hostgroup:后端服务器所属的主机组,单个后端服务器可以属于多个主机组

srv_host,srv_port:mysql后端服务器正在侦听连接的TCP端点的IP和Port

status:后端服务器的状态。可以有ONLINE,SHUNNED,OFFLINE_SOFT,OFFLINE_HARD

ConnUsed:ProxySQL当前使用多少个连接来向后端服务器发送查询

ConnFree:目前有多少个连接是空闲

ConnOK:成功建立了多少个连接

ConnERR:失败的连接数

Queries:路由到此特定后端服务器的查询数

Bytes_data_sent:发送到后端的数据量

Bytes_data_recv:从后端接收的数据量

Latency_ms:从Monitor报告的当前ping以毫秒为单位的延迟时间
monitor库下的主要表

主要是一些监控的收集信息,比如数据库的健康状态等

stats_history库下的主要表

这个库是ProxySQL收集有关其内部功能的历史指标

配置ProxySQL所需账户

请在MySQL的主库执行

注意:MySQL 8.0.x用户认证的方式需要修改为mysql_native_password,需要在MySQL的配置文件中加上这个用户认证方式,再来创建用户

$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

default_authentication_plugin=mysql_native_password

mysql> select User,Host,plugin from mysql.user;

然后执行创建用户

复制代码
#proxysql的监控账户
create user 'monitor'@'192.168.1.%' identified by '123456';
grant all privileges on *.* to 'monitor'@'192.168.1.%';
#proxysql的对外访问账户
create user 'proxysql'@'192.168.1.%' identified by '123456';
grant all privileges on *.* to 'proxysql'@'192.168.1.%';
flush privileges;

mysql> select User,Host,plugin from mysql.user;

ProxySQL的多层架构

整套配置系统分为三层:顶层为RUNTIME,中间层为MEMORY,底层也就是持久层DISK和CONFIG FILE。RUNTIME :代表ProxySQL当前正在使用的配置,无法直接修改这里的配置,必须要从下一层LOAD进来。

MEMORY:MEMORY层上面连接RUNTIME层,下面连接持久层。这层可以正常操作ProxySQL配置,随便修改,不会影响生产环境。修改一个配置一般都是在MEMORY层完成的,确认正常之后在加载达到RUNTIME和持久化的磁盘上。

DISK和CONFIG FILE:持久化配置信息,重启后内存中的配置信息会丢失,所需要将配置信息保留在磁盘中。重启时,可以从磁盘快速加载回来。

在不同层次间移动配置

重新配置MySQL用户

为了将配置持久化到磁盘或者应用到runtime,在管理接口下有一系列管理命令来实现它们。 要重新配置MySQL用户,可执行下面的其中一个命令:

  1. LOAD MYSQL USERS FROM MEMORY / LOAD MYSQL USERS TO RUNTIME
    将内存数据库中的配置加载到runtime数据结构,反之亦然。
  2. SAVE MYSQL USERS TO MEMORY / SAVE MYSQL USERS FROM RUNTIME
    将MySQL用户从runtime持久化到内存数据库。
  3. LOAD MYSQL USERS TO MEMORY / LOAD MYSQL USERS FROM DISK
    从磁盘数据库中加载MySQL用户到内存数据库中。
  4. SAVE MYSQL USERS FROM MEMORY / SAVE MYSQL USERS TO DISK
    将内存数据库中的MySQL用户持久化到磁盘数据库中。
  5. LOAD MYSQL USERS FROM CONFIG
    从配置文件中加载MySQL用户到内存数据库中。

处理MySQL Server

  1. LOAD MYSQL SERVERS FROM MEMORY / LOAD MYSQL SERVERS TO RUNTIME
    将MySQL server从内存数据库中加载到runtime。
  2. SAVE MYSQL SERVERS TO MEMORY / SAVE MYSQL SERVERS FROM RUNTIME
    将MySQL server从runtime持久化到内存数据库中。
  3. LOAD MYSQL SERVERS TO MEMORY / LOAD MYSQL SERVERS FROM DISK
    从磁盘数据库中加载MySQL server到内存数据库。
  4. SAVE MYSQL SERVERS FROM MEMORY / SAVE MYSQL SERVERS TO DISK
    从内存数据库中将MySQL server持久化到磁盘数据库中。
  5. LOAD MYSQL SERVERS FROM CONFIG
    从配置文件中加载MySQL server到内存数据库中

处理MySQL的查询规则

  1. LOAD MYSQL QUERY RULES FROM MEMORY / LOAD MYSQL QUERY RULES TO RUNTIME
    将MySQL query rules从内存数据库加载到runtime数据结构。
  2. SAVE MYSQL QUERY RULES TO MEMORY / SAVE MYSQL QUERY RULES FROM RUNTIME
    将MySQL query rules从runtime数据结构中持久化到内存数据库。
  3. LOAD MYSQL QUERY RULES TO MEMORY / LOAD MYSQL QUERY RULES FROM DISK
    从磁盘数据库中加载MySQL query rules到内存数据库中。
  4. SAVE MYSQL QUERY RULES FROM MEMORY / SAVE MYSQL QUERY RULES TO DISK
    将MySQL query rules从内存数据库中持久化到磁盘数据库中。
  5. LOAD MYSQL QUERY RULES FROM CONFIG
    从配置文件中加载MySQL query rules到内存数据库中。

处理MySQL变量

  1. LOAD MYSQL VARIABLES FROM MEMORY / LOAD MYSQL VARIABLES TO RUNTIME
    将MySQL variables从内存数据库加载到runtime数据结构。
  2. SAVE MYSQL VARIABLES TO MEMORY / SAVE MYSQL VARIABLES FROM RUNTIME
    将MySQL variables从runtime数据结构中持久化到内存中。
  3. LOAD MYSQL VARIABLES TO MEMORY / LOAD MYSQL VARIABLES FROM DISK
    从磁盘数据库中加载MySQL variables到内存数据库中。
  4. SAVE MYSQL VARIABLES FROM MEMORY / SAVE MYSQL VARIABLES TO DISK
    将MySQL variables从内存数据库中持久化到磁盘数据库中。
  5. LOAD MYSQL VARIABLES FROM CONFIG
    从配置文件中加载MySQL variables到内存数据库中。

处理管理变量

  1. LOAD ADMIN VARIABLES FROM MEMORY / LOAD ADMIN VARIABLES TO RUNTIME
    将admin variables从内存数据库加载到runtime数据结构。
  2. SAVE ADMIN VARIABLES TO MEMORY / SAVE ADMIN VARIABLES FROM RUNTIME
    将admin variables从runtime持久化到内存数据库中。
  3. LOAD ADMIN VARIABLES TO MEMORY / LOAD ADMIN VARIABLES FROM DISK
    从磁盘数据库中加载admin variables到内存数据库中。
  4. SAVE ADMIN VARIABLES FROM MEMORY / SAVE ADMIN VARIABLES TO DISK
    将admin variables从内存数据库中持久化到磁盘数据库。
  5. LOAD ADMIN VARIABLES FROM CONFIG
    从配置文件中加载admin variables到内存数据库中。

说明

修改配置的步骤一般是在MEMORY层进行修改,然后保存到RUNTIME和DISK

管理配置

disk是sqlite3数据库,默认位置是$DATADIR/proxysql.db( /var/lib/proxysql/proxysql.db),config file是一个传统配置文件一般不需要更改,在内存中动态更改配置,如果重启,没进行持久化(save) 则会丢失。

三者之间的关系

proxysql启动时,首先去找/etc/proxysql.cnf找到它的datadir,如果datadir下有proxysql.db就加载proxysql.db的配置,如果启动proxysql时带有--init标志,会用/etc/proxsql.cnf的配置,把Runtime,disk全部初始化一下,在调用是调用--reload 会把/etc/proxysql.cnf 和disk 中配置进行合并。如果冲突需要用户干预。disk会覆盖config file。

传统配置文件默认路径为/etc/proxysql.cnf,也可以在二进制程序proxysql上使用-c或--config来手动指定配置文件。默认情况下,几乎不需要手动去配置proxysql.cnf。记住,只要不是加载到runtime,修改的配置就不会生效。

只有加载到runtime状态时才会去做最后的有效性验证。在保存到内存数据库或持久化到磁盘上时,都不会发生任何警告或错误。当加载到runtime时,如果出现错误,将恢复为之前保存得状态,这时可以去检查错误日志。

相关推荐
格调UI成品2 小时前
预警系统安全体系构建:数据加密、权限分级与误报过滤方案
大数据·运维·网络·数据库·安全·预警
心平愈三千疾6 小时前
通俗理解JVM细节-面试篇
java·jvm·数据库·面试
Lx3527 小时前
排序缓冲区调优:sort_buffer_size的合理配置
sql·mysql·性能优化
我科绝伦(Huanhuan Zhou)9 天前
Oracle|Oracle SQL*Plus 配置上下翻页功能
数据库·sql·oracle
Cachel wood9 天前
Spark教程6:Spark 底层执行原理详解
大数据·数据库·分布式·计算机网络·spark
feifeigo1239 天前
Java 正则表达式高级用法
java·mysql·正则表达式
敏叔V5879 天前
大模型Text2SQL之在CentOS上使用yum安装与使用MySQL
linux·mysql·centos
java—大象9 天前
基于java SSM的房屋租赁系统设计和实现
java·开发语言·数据库·spring boot·layui·mybatis
Mutig_s9 天前
Spring Boot动态数据源切换:优雅实现多数据源管理
java·数据库·spring boot·后端·mybatis
Python小老六9 天前
单片机测ntc热敏电阻的几种方法(软件)
数据库·单片机·嵌入式硬件