MySQL高可用主从集群(二)——ProxySQL中间件部署

本文详细介绍了如何部署ProxySQL中间件,实现MySQL主从集群的代理和读写分离。内容涵盖ProxySQL的中间件介绍、安装过程、配置MySQL主从集群以及设置读写分离规则。

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

上一篇MySQL高可用主从集群(一)文中介绍了MySQL主从集群的部署,在这篇文章里将主要介绍ProxySQL中间件部署并实现MySQL主从集群代理和读写分离。

读写分离原理

读写分离就是用户在发送请求时,请求经过中间件,中间件将请求中的读和写操作分辨出来将读请求发送给后端的从服务器,将写请求发送给后端的主服务器,主服务器通过主从复制将数据复制给其他从服务器.

1 ProxySQL中间件作用

参考官方站点:https://proxysql.com/ 

ProxySQL是一个开源的具有高性能、高可用性、协议感知的MySQL和其分支(如Percona Server和MariaDB)的代理工具。轻量级且支持数十万并发连接。

ProxySQL部署网络拓扑

2 安装ProxySQL

2.1下载ProxySQL

官网下载地址:Download ProxySQL - Percona

本文将ProxySQL部署在centos7虚拟机上

使用wget直接在虚拟机上下载ProxySQL安装包

wget https://downloads.percona.com/downloads/proxysql2/proxysql2-2.0.18/binary/redhat/7/x86_64/proxysql2-2.0.18-1.1.el7.x86_64.rpm

2.2调整系统参数

sed -i 's/#DefaultLimitCORE=/DefaultLimitCORE=infinity/g' /etc/systemd/system.conf
sed -i 's/#DefaultLimitCORE=/DefaultLimitCORE=infinity/g' /etc/systemd/user.conf
sed -i 's/#DefaultLimitNOFILE=/DefaultLimitNOFILE=1000000/g' /etc/systemd/system.conf
sed -i 's/#DefaultLimitNOFILE=/DefaultLimitNOFILE=1000000/g' /etc/systemd/user.conf
sed -i 's/#DefaultLimitNPROC=/DefaultLimitNPROC=1000000/g'  /etc/systemd/system.conf
sed -i 's/#DefaultLimitNPROC=/DefaultLimitNPROC=1000000/g'  /etc/systemd/user.conf
sed -i 's/#DefaultLimitMEMLOCK=/DefaultLimitMEMLOCK=infinity/g'  /etc/systemd/system.conf
sed -i 's/#DefaultLimitMEMLOCK=/DefaultLimitMEMLOCK=infinity/g'  /etc/systemd/user.conf

2.3开放防火墙端口

firewall-cmd --zone=public --add-port=6033/tcp --permanent
firewall-cmd --zone=public --add-port=6032/tcp --permanent
#重启防火墙后生效
firewall-cmd --reload
#查看开放端口
sudo firewall-cmd --list-ports

ProxySQL主要使用两个端口

6032为ProxySQL管理用户登录端口

6033为ProxySQL客户端连接端口,相当于MySQL的3306端口

2.4yum安装ProxySQL

进入ProxySQL安装包存放目录

yum localinstall proxysql2-2.0.18-1.1.el7.x86_64.rpm

2.5启动ProxySQL

sudo systemctl start proxysql
sudo systemctl stop proxysql
sudo systemctl status proxysql
sudo systemctl restart proxysql
#########查看日志
tail -f -n 200 /var/lib/proxysql/proxysql.log

2.6安装MySQL客户端工具

ProxySQL 的 admin 管理接口是一个使用 MySQL 协议的接口,所以,可以直接使用 mysql 客户端、navicat 等工具去连接这个管理接口,其默认的用户名和密码均为 admin。

本文使用mariadb作为mysql客户端

sudo yum -y install mariadb

登陆ProxySQL管理端口

mysql -uadmin -h 127.0.0.1 -P6032 -padmin

3 ProxySQL内设置数据库介绍

[root@localhost ~]# mysql -uadmin -padmin -P6032 -h127.0.0.1
 
MySQL [(none)]> show databases;
+-----+---------------+-------------------------------------+
| seq | name          | file                                |
+-----+---------------+-------------------------------------+
| 0   | main          |                                     |
| 2   | disk          | /var/lib/proxysql/proxysql.db       |
| 3   | stats         |                                     |
| 4   | monitor       |                                     |
| 5   | stats_history | /var/lib/proxysql/proxysql_stats.db |
+-----+---------------+-------------------------------------+
  • main库是ProxySQL最主要的库,是需要修改配置时使用的库,它其实是一个内存数据库系统。所以,修改main库中的配置后,必须将其持久化到disk上才能永久保存
  • disk库是磁盘数据库,该数据库结构和内存数据库完全一致。当持久化内存数据库中的配置时,其实就是写入到disk库中。磁盘数据库的默认路径为 $DATADIR/proxysql.db
  • stats库是统计信息库。这个库中的数据一般是在检索其内数据时临时填充的,它保存在内存中。因为没有相关的配置项,所以无需持久化
  • monitor库是监控后端MySQL节点相关的库,该库中只有几个log类的表,监控模块收集到的监控信息全都存放到对应的log表中
  • stats_history库是1.4.4版新增的库,用于存放历史统计数据。默认路径为 $DATADIR/proxysql_stats.db

上面描述main库的时候,只是说了内存数据库需要持久化到disk库才能永久保存配置。但实际上,修改了main库中的配置后,并不会立即生效,它还需要load到runtime的数据结构中才生效,只有在runtime数据结构中的配置才是对ProxySQL当前有效的配置。

main库中的表分为runtime开头和非runtime开头, runtime开头为运行时的设置 ,非runtime开头为需要设置的配置 ,所有的配置修改后需要执行命令才能加载到runtime生效。

LOAD ...  TO RUNTIME;  #使修改立即生效
SAVE  ...  TO DISK;    #使修改永久保存到磁盘

4 配置MySQL主从集群

登陆ProxySQL管理端口

mysql -uadmin -h 127.0.0.1 -P6032 -padmin

将mysql节点加入到proxysql中

insert into  mysql_servers (hostgroup_id,hostname,port) values (10,'10.0.0.1',3306),(10,'10.0.0.2',3306),(10,'10.0.0.3',3306);

配置读写组

insert into  mysql_replication_hostgroups(writer_hostgroup ,reader_hostgroup,comment) values(10,20,'读写分离高可用');

将提交同步到执行状态和磁盘

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

添加用户

通过proxysql连接mysql的用户必须加入到MySQL_users表

INSERT INTO MySQL_users(username,password,default_hostgroup,comment) VALUES ('root','123456',10,'root');
load mysql users to runtime; save mysql users to disk;

添加读写分离规则

可自由定制,根据实际定制不设置读写分离可略过此步骤

insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(1,1,'^SELECT.*FOR UPDATE$',10,1);
insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(2,1,'^SELECT',20,1);
load mysql query rules to runtime;  save mysql query rules to disk;

MySQL的master节点设置proxysql监控用户

通过ProxySQL代理MySQL要设置ProxySQL监控用户,用来检测和管理MySQL集群状态

create user 'monitor'@'%' identified by '1234563';
grant all privileges on *.* to 'monitor'@'%' with grant option;
flush privileges;
ALTER USER 'monitor'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

proxysql管理接口修改变量设置健康检测的账号

set mysql-monitor_username='monitor';
set mysql-monitor_password='123456';
load mysql variables to runtime;save mysql variables to disk;

修改proxysql中mysql版本

ProxySQL中默认的MySQL版本为5,需要根据实际使用的MySQL版本修改

update global_variables set variable_value="8.0.21" where variable_name='mysql-server_version';
load mysql variables to runtime;save mysql variables to disk;

设置proxysql远程连接用户

set admin-admin_credentials='admin:admin;myadmin:myadmin';
load admin variables to runtime;save admin variables to disk;

登录proxysql客户端连接mysql主从集群

mysql -uroot -h 127.0.0.1 -P6033 -p123456

通过ProxySQL连接MySQL主从集群,ProxySQL会根据上面配置的MySQL读写节点,自动将读写请求路由到相应的MySQL节点,从而实现读写分离。

下一篇:MySQL高可用主从集群(三)——Orchestrator集群部署

世界地图矢量数据可以通过多种网站进行下载。以下是一些提供免费下载世界地图矢量数据的网站: 1. Open Street Map (https://www.openstreetmap.org/): 这个网站可以根据输入的经纬度或手动选定范围来导出目标区域的矢量图。导出的数据格式为osm格式,但只支持矩形范围的地图下载。 2. Geofabrik (http://download.geofabrik.de/): Geofabrik提供按洲际和国家快速下载全国范围的地图数据。数据格式支持shape文件格式,包含多个独立图层,如道路、建筑、水域、交通、土地利用分类、自然景观等。数据每天更新一次。 3. bbbike (https://download.bbbike.org/osm/): bbbike提供全球主要的200多个城市的地图数据下载,也可以按照bbox进行下载。该网站还提供全球的数据,数据格式种类齐全,包括geojson、shp等。 4. GADM (https://gadm.org/index.html): GADM提供按国家或全球下载地图数据的服务。该网站提供多种格式的数据下载。 5. L7 AntV (https://l7.antv.antgroup.com/custom/tools/worldmap): L7 AntV是一个提供标准世界地图矢量数据免费下载的网站。支持多种数据格式下载,包括GeoJSON、KML、JSON、TopJSON、CSV和高清SVG格式等。可以下载中国省、市、县的矢量边界和世界各个国家的矢量边界数据。 以上这些网站都提供了世界地图矢量数据的免费下载服务,你可以根据自己的需求选择合适的网站进行下载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值