59. MySQL高可用之 ProxySQL 实战

AI 概述
1. ProxySQL 介绍2. ProxySQL 部署2.1 基本环境2.2 安装配置2.3 基础维护3. 小结 上一小节我们介绍了 MGR 环境的部署,接下来我们从实战角度,继续学习这套高可用架构的 ProxySQL 部分。 1. ProxySQL 介绍 ProxySQL 是基于 MySQL 的一款开源的中间件产品,是一个轻量级的 MySQL 代理层,可以实现读写分...
目录
文章目录隐藏
  1. 1. ProxySQL 介绍
  2. 2. ProxySQL 部署
  3. 3. 小结

上一小节我们介绍了 MGR 环境的部署,接下来我们从实战角度,继续学习这套高可用架构的 ProxySQL 部分。

1. ProxySQL 介绍

ProxySQL 是基于 MySQL 的一款开源的中间件产品,是一个轻量级的 MySQL 代理层,可以实现读写分离,故障切换,集群部署,监控后端节点,可缓存查询结果,支持 Query 路由功能,支持动态指定某个 SQL 进行缓存,支持动态加载。

2. ProxySQL 部署

下面从实战的角度一步步搭建 ProxySQL 环境。

2.1 基本环境

ProxySQL-1 ProxySQL-2 ProxySQL-3
MySQL 版本 proxysql-2.0.5 proxysql-2.0.5 proxysql-2.0.5
操作系统 CentOS 7.8 CentOS 7.8 CentOS 7.8
服务器 IP 192.168.0.1 192.168.0.2 192.168.0.3
端口 管理端口-6032
服务端口-6033
管理端口-6032
服务端口-6033
管理端口-6032
服务端口-6033
服务器配置 2c4g 2c4g 2c4g

2.2 安装配置

安装 proxysql:

--新安装
rpm -ivh proxysql-2.0.5-1-centos7.x86_64.rpm
--升级
rpm -Uvh proxysql-2.0.5-1-centos7.x86_64.rpm
--删除
rpm -qa | grep proxysql
rpm -e proxysql-2.0.5-1-centos7.x86_64

--启动 proxysql
service proxysql start
--检查版本
proxysql –version
--proxysql 路径
/var/lib/proxysql

配置后端 MySQL 机器:

登入 ProxySQL,把 MySQL 主从的信息添加进去。将主库 master 也就是做写入的节点放到 HG 100 中,salve 节点做读放到 HG 1000。

--配置后端 MySQL 机器(在 ProxySQL 中执行)
--登录 proxysql 管理端口
mysql -uadmin -padmin -h127.0.0.1 -P6032;
insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) 
values(100,'192.168.0.1',3306,1,500,10,'mysql-1'),
(1000,'192.168.0.1',3306,10,500,10,'mysql-1'),
(1000,'192.168.0.2',3306,45,500,10,'mysql-2'),
(1000,'192.168.0.3',3306,45,500,10,'mysql-3');
select * from mysql_servers; 

-- 持久化(在 ProxySQL 中执行)
save mysql servers to disk;

-- 加载到线上(在 ProxySQL 中执行)
load mysql servers to runtime;

配置后端 MySQL 用户:

这个用户需要先在后端 MySQL 里真实存在,一个是监控账号,一个是程序账号:

--监控账号(在 MySQL 中执行)
GRANT USAGE ON *.* TO 'monitor_user'@'192.%' IDENTIFIED BY '123456';
--程序账号(在 MySQL 中执行)
GRANT SELECT, INSERT, UPDATE, DELETE ON center.* TO 'app_user'@'192.%' identified by '123456';

在每个 ProxySQL 中执行,配置后端 MySQL 监控用户:

--登录 proxysql 管理端口
mysql -uadmin -padmin -h127.0.0.1 -P6032;
UPDATE global_variables SET variable_value='monitor_user' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='123456' WHERE variable_name='mysql-monitor_password';
--加载和持久化
save mysql variables to disk;
load mysql variables to runtime;
 
--配置后端 MySQL 程序用户(在 ProxySQL 中执行)
insert into mysql_users(username,password,active,default_hostgroup,transaction_persistent, max_connections) values('app_user','123456',1,100,1,500)
 
-- 持久化(在 ProxySQL 中执行)
save mysql users to disk;
-- 加载到线上(在 ProxySQL 中执行)
load mysql users to runtime;

加载配置和变量:

-- 持久化(在 ProxySQL 中执行)
save mysql servers to disk;
save mysql users to disk;
save mysql variables to disk;
save mysql query rules to disk;

-- 加载到线上(在 ProxySQL 中执行)
load mysql servers to runtime;
load mysql users to runtime;
load mysql variables to runtime;
load mysql query rules to runtime;

定义路由规则:

-- 发送到主库(在 ProxySQL 中执行)
INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT.*FOR UPDATE$',100,1);

-- 发送到从库(在 ProxySQL 中执行)
INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT',1000,1);

-- 加载(在 ProxySQL 中执行)
save mysql query rules to disk;
load mysql query rules to runtime;

MGR 配置:

--配置 MGR 信息(在每个 ProxySQL 中执行)
insert into mysql_group_replication_hostgroups (writer_hostgroup,reader_hostgroup,backup_writer_hostgroup, offline_hostgroup,active,max_writers,writer_is_also_reader,max_transactions_behind) 
values (100,1000,101,102,1,1,1,100);
select * from mysql_group_replication_hostgroups;

-- 加载(在每个 ProxySQL 中执行)
save mysql servers to disk;
load mysql servers to runtime;

--导入 sys 视图(在 MySQL 主库中执行)
source /software/addition_to_sys.sql

--授权 sys 库(在 MySQL 主库中执行)
GRANT SELECT on sys.* to 'monitor_user'@'192.%';

--查看 MGR 成员基本信息(在 MySQL 中执行),监测节点的健康与落后情况
select * from sys.gr_member_routing_candidate_status;

--查看 MGR 各节点状态(在 ProxySQL 中执行)
select hostgroup_id, hostname, status from runtime_mysql_servers;

--查看 MGR 各节点日志信息(在 ProxySQL 中执行)
select * from mysql_server_group_replication_log order by time_start_us desc limit 5;

addition_to_sys.sql 可以从这里下载

2.3 基础维护

启动 ProxySQL:

service proxysql start

停止 ProxySQL:

service proxysql stop

连接 ProxySQL 管理端口:

mysql -uadmin -padmin -h127.0.0.1 -P6032;

连接 ProxySQL 服务端口:

mysql -uadmin_user -padmin_user -h127.0.0.1 -P6033;

sql 执行统计:

select hostgroup,schemaname,username,digest_text,count_star from stats_mysql_query_digest;

3. 小结

本小节主要从实战角度介绍如何搭建 ProxySQL 环境。

ProxySQL 是非常轻量级的一款 MySQL 中间件,对 CPU 内存等服务器资源的消耗基本小于 5%,而且功能强大,不仅仅是纯粹的 MySQL 读写分离。掌握 ProxySQL 这门技术,也变得越来越重要,是 DBA 面试的一个加分项。

以上关于59. MySQL高可用之 ProxySQL 实战的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 59. MySQL高可用之 ProxySQL 实战

发表回复