Mysql Group Replication 主从(单主)中间件ProxySQL安装配置

本文详细介绍如何使用ProxySQL管理MySQL Group Replication集群,包括安装配置ProxySQL、创建MGR集群用户、配置读写分离、设置监控脚本等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:第4、第5两步的操作可以在mysql group replication主节点上先行执行。

 

1、下载安装ProxySQL

wget https://github.com/sysown/proxysql/releases/download/v1.3.3/proxysql-1.3.3-1-centos67.x86_64.rpm
rpm –ivh proxysql-1.3.3-1-centos67.x86_64.rpm

 

2、启动ProxySQL

service proxysql start

 

3、登录ProxySQL

mysql -h127.0.0.1 -P6032 -uadmin -padmin

 

4、MGR集群创建相关用户并授权

#在集群的主节点执行如下脚本
#添加监控用户并授权
grant all privileges on *.* to 'proxysql'@'172.16.90.%' identified by 'proxysql';
#添加代理业务用户并授权
CREATE USER 'proxyuser'@'%' IDENTIFIED BY 'proxypass'; 
GRANT INSERT,UPDATE,DELETE,SELECT ON * . * TO 'proxyuser'@'%';
flush privileges;

 

5、创建检查MGR节点状态的函数和视图

参照前面的博客,在MGR主节点上执行下面链接中的SQL 

https://github.com/lefred/mysql_gr_routing_check/blob/master/addition_to_sys.sql

source /root/addition_to_sys.sql

 

6、配置proxysql

    添加MGR成员节点到proxysql mysql_servers表

insert into mysql_servers (hostgroup_id, hostname, port) values(1, '172.16.90.39', 3306);
insert into mysql_servers (hostgroup_id, hostname, port) values(2, '172.16.90.39', 3306);
insert into mysql_servers (hostgroup_id, hostname, port) values(2, '172.16.90.40', 3306);
insert into mysql_servers (hostgroup_id, hostname, port) values(2, '172.16.90.41', 3306);

    hostgroup_id = 1代表write group,针对我们提出的限制,这个地方只配置了一个节点;hostgroup_id = 2代表read group,包含了MGR的所有节点。

proxysql还可以配置读写分离,本文不考虑这个特性的配置。对于上面的hostgroup配置,所有的读写操作,默认会发送到hostgroup_id1hostgroup,也就是发送到写节点上。

修改proxysql监控的用户及密码

UPDATE global_variables SET variable_value='proxysql' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='proxysql' WHERE variable_name='mysql-monitor_password';

 添加应用通过proxyuser访问后端MGR节点的用户

INSERT INTO MySQL_users(username,password,default_hostgroup) VALUES ('proxyuser','proxypass',1);

 global_variablesmysql_serversmysql_users表的信息加载到RUNTIME,更进一步加载到DISK

LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;

 

 

7、配置scheduler

Github地址https://github.com/ZzzCrazyPig/proxysql_groupreplication_checker下载gr_sw_mode_checker.sh

将脚本gr_sw_mode_cheker.sh放到目录/var/lib/proxysql/下 

proxysqlscheduler表里面加载如下记录,然后加载到RUNTIME使其生效,同时还可以持久化到磁盘

 

insert into scheduler(id, active, interval_ms, filename, arg1, arg2, arg3, arg4)
  values(1, 1, 3000, '/var/lib/proxysql/gr_sw_mode_checker.sh', 1, 2, 1, '/var/lib/proxysql/checker.log');
LOAD SCHEDULER TO RUNTIME;
SAVE SCHEDULER TO DISK;

 

8、java连接proxysql配置

 

jdbc.url=jdbc:mysql://172.16.90.39:6033/ifaes_test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
jdbc.username=proxyuser
jdbc.password=proxypass

 

 

### MySQL 高可用主从架构的实现 MySQL主从复制架构为数据库系统的高可用性和扩展性提供了一种简单而有效的解决方案。通过将数据从主服务器复制到一个或多个从服务器,可以实现读写分离、负载均衡以及数据备份等功能[^1]。然而,单纯的主从复制并不能完全满足高可用性的需求,因为当主服务器发生故障时,从服务器无法自动接管任务。为了实现高可用性(HA),通常需要结合一些额外的工具和技术来实现自动化故障转移和恢复。 #### 1. **主从复制的基本原理** MySQL 主从复制是一种异步复制机制,其中主服务器将所有的写操作记录到二进制日志(Binary Log)中,从服务器通过 I/O 线程连接到主服务器并请求这些日志文件。从服务器的 SQL 线程会读取并重放这些日志,从而保持与主服务器的数据一致性[^3]。 #### 2. **主从复制的配置步骤** 要搭建一个基本的主从复制环境,需要完成以下主要步骤: - 在主服务器上启用二进制日志,并设置唯一的 `server-id`。 - 创建用于复制的专用用户,并授予相应的权限。 - 配置从服务器的 `server-id`,并确保其与主服务器不同。 - 使用 `CHANGE MASTER TO` 命令指定主服务器的信息,包括 IP 地址、端口、用户名、密码以及二进制日志的位置。 - 启动从服务器的复制线程,并验证复制状态是否正常。 例如,在从服务器上执行以下命令来启动复制: ```sql START SLAVE; ``` 可以通过以下命令检查从服务器的状态: ```sql SHOW SLAVE STATUS\G ``` #### 3. **高可用性方案的选择** 虽然主从复制提供了数据冗余和读写分离的能力,但要实现真正的高可用性,还需要引入一些高可用性管理工具来监控主服务器的状态并在主服务器故障时自动进行故障转移。常见的高可用性方案包括: ##### (1) **MHA (Master High Availability)** MHA 是一种广泛使用的 MySQL 高可用性解决方案,能够自动检测主服务器故障并在几秒钟内完成故障转移。它支持多节点集群,并且可以在不丢失数据的情况下切换到新的主服务器[^2]。MHA 由两个组件组成:MHA Manager 和 MHA Node。MHA Manager 负责监控和协调故障转移,而 MHA Node 负责在每个 MySQL 实例上执行实际的操作。 ##### (2) **ProxySQL** ProxySQL 是一个高性能的 MySQL 中间件,不仅可以作为查询路由器使用,还可以与 MHA 结合使用来实现透明的故障转移。ProxySQL 可以根据当前的主服务器状态动态调整流量方向,确保应用程序始终连接到正确的主服务器[^1]。 ##### (3) **InnoDB Cluster** InnoDB Cluster 是 MySQL 官方提供的高可用性解决方案,基于 Group Replication 技术实现。它允许多个 MySQL 实例组成一个组,所有成员都可以处理读写请求,并且在某个成员故障时自动选举新的主服务器。InnoDB Cluster 还集成了 MySQL Shell 和 MySQL Router,简化了集群的管理和客户端连接过程[^5]。 #### 4. **优化与注意事项** 在部署 MySQL 主从复制架构时,需要注意以下几个方面: - **网络延迟**:主从之间的网络延迟可能导致复制滞后,影响数据的一致性。可以通过优化网络带宽和减少大事务的提交频率来缓解这一问题。 - **硬件资源**:主服务器和从服务器的硬件配置应尽量一致,以避免性能瓶颈。 - **监控与告警**:建议使用监控工具(如 Prometheus + Grafana 或 Zabbix)实时监控主从复制的状态,并在出现异常时及时通知管理员。 - **定期备份**:即使有从服务器作为备份,也应定期对主服务器进行全量备份,以防止单点故障导致的数据丢失。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值