MySQL运维实战之ProxySQL(9.1)ProxySQL介绍

俊达2年前技术文章1153

mysql通过复制技术实现了数据库高层面的可用,但是对于应用来说,当后端MySQL发生高可用切换时,应该怎么处理?

我们考虑几种方案:

1、使用域名绑定。应用通过dns连接后端实例,当后端发生切换后,将dsn指向新的主库。

使用域名存在几个问题:dns缓存的问题。端口问题,如果主库备库的端口不一样,就无法直接通过dns解决。

2、在客户端解决。将组成mysql高可用集群的实例信息都配置到应用,应用检测当前主库。

这给应用开发带来额外的编码工作。

3、引入proxy,应用只访问proxy,proxy将应用请求转发给后端mysql。proxy的作用,和在web高可用架构中的负载均衡器作用类似。


本文介绍开源的proxysql。proxysql支持mysql传统主备复制架构、group replication架构。


proxysql的核心功能:


1、高可用

后端节点出现故障时,可自动屏蔽异常节点。

当后端数据库发生主备切换时,proxysql可自动识别


2、读写分离

根据用户SQL,将读的SQL分发到只读节点,降低主库压力。


3、sharding

通过灵活配置路由规则,可以实现数据库sharding。


下图是一个简单的ProxySQL架构示意图:


image.png


引入proxysql后,客户端不需要直接连接后端mysql。proxysql本身支持mysql协议,对客户端而言,proxysql本身就是一台mysql。

使用proxysql的流程大致如下:

1、客户端连接到proxysql实例。proxysql和mysql协议完全兼容。

2、客户端发起SQL语句。

3、proxysql接收和解析SQL语句。根据语句内容和发起语句的会话的上下文,选择一台后端MySQL服务器,将SQL转发到后端执行。

4、后端SQL执行完成后,ProxySQL将后端返回的数据发送给客户端。


在这个架构下,客户端并不需要知道连接的是proxysql,对客户端而言,他连接的是一台标准的mysql服务器。在proxysql后端,可以是一个使用mysql复制技术搭建的集群,或者是一个group replication集群。如果后端mysql集群发生了主备切换,proxysql可以自动感知到,客户端不用做特殊处理,就能实现数据访问高可用。


相关文章

 MySQL运维实战(1.3)安装部署:源码编译安装

MySQL运维实战(1.3)安装部署:源码编译安装

源码编译安装通常不需要自己编译mysql源码,编译的mysql和二进制包的内容基本一致。当然有些时候可能会需要采用源码编译的方式安装,安装一些非标准版本的mysql安装一些社区的patch、bugfi...

MySQL优化器特性(五)单表访问路径

数据库的访问路径(access path)是指从表中获取数据的方式,一般可以通过扫描表或通过索引获取数据。想熟练掌握SQL优化技能,首先需要熟悉单表访问路径。本文先简单介绍MySQL支持的各种单表访问...

MySQL运维实战之备份和恢复(8.3)xtrabackup增量备份

xtrabackup支持增量备份。在做增量备份之前,需要先做一个全量备份。xtrabackup会基于innodb page的lsn号来判断是否需要备份一个page。如果page lsn大于上次备份的l...

 MySQL运维实战之Clone插件(10.1)使用Clone插件

MySQL运维实战之Clone插件(10.1)使用Clone插件

clone插件介绍mysql 8.0.17版本引入了clone插件。使用clone插件可以对本地l或远程的mysql实例进行clone操作。clone插件会拷贝innodb存储引擎表,clone得到的...

MySQL运维实战之ProxySQL(9.4)proxysql和后端MySQL自动切换

MySQL运维实战之ProxySQL(9.4)proxysql和后端MySQL自动切换

如上图架构,当后端MySQL主库出现问题,发生主备切换后,如何自动将ProxySQL的读写切换到新的主库上?可以通过mysql_replication_hostgroups表配置实现:insert&n...

MySQL运维实战(4.6) SQL_MODE之NO_BACKSLASH_ESCAPES

设置NO_BACKSLASH_ESCAPES后,反斜杠(\)不作为转义符。不设置NO_BACKSLASH_ESCAPES时,反斜杠(\)用来转义后一个字符mysql> create&n...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。