本文章配套视频 https://www.ixigua.com/7086085500540289572?id=7087546160079962660
本专栏全部文章 https://blog.csdn.net/tonghu_note/category_11755726.html
总目录 https://blog.csdn.net/tonghu_note/article/details/124333034

来我的dou音 aa10246666, 看配套视频


一、实战环境

MGR实现了服务端高可用,ProxySQL实现了集群的客户端高可用,二者结合来用才是完美的。

Primary 节点(node1) mysql 8.0.28 10.211.55.9
Secondary1 节点(node2) mysql 8.0.28 10.211.55.4
Secondary2 节点(node3) mysql 8.0.28 10.211.55.6
ProxySQL 节点(node4) 2.2.0 10.211.55.7

监控脚本 addition_to_sys_8.0.28.sql 需要先导入Primary节点,因为ProxySQL依赖这个监控框架,下面是下载地址

点霹《童虎学习笔记》mysql8.0.28mgr监控视图gr_member_routing_ca更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/tonghu_note/85108757如果想了解如何监控MGR可参考下面这篇文档《童虎学习笔记》2分钟学会如何监控MySQL MGR集群_童虎学习笔记的博客-CSDN博客童虎学习笔记的博客_CSDN博客-领域博主https://blog.csdn.net/tonghu_note来我的西瓜视频,看免费配套视频https://www.ixigua.com/home/2058760810138187来我的dou音 aa10246666, 看配套视频一、实战环境Primary 节点(node1)mysql 8.0.2810.211.55.9Secondary1 节点(node2)mysql 8.0.2810....https://blog.csdn.net/tonghu_note/article/details/124088561


二、下载及安装ProxySQL

1、下载

我的环境是mac m1芯片,所以采用arm的包来安装

wget https://github.com/sysown/proxysql/releases/download/v2.2.0/proxysql_2.2.0-debian10_arm64.deb

具体要根据自已服务器的情况来决定下载哪个包 ,官方安装包下载地址如下:Download and Install ProxySQL - ProxySQLhttps://proxysql.com/documentation/installing-proxysql/

2、 安装

dpkg -i proxysql_2.2.0-debian10_arm64.deb

3、核心配置文件地址路径

/etc/proxysql.cnf


三、配置ProxySQL

1、在MGR Primary节点新建ProxySQL监控MGR集群状态的用户proxysql_user

create user proxysql_user@'%' identified with mysql_native_password by 'proxysql_pwd';

grant select on sys.* to proxysql_user@'%';

2、在MGR Primary节点新建ProxySQL操作MGR集群数据库的用户app_user

create user app_user@'%' identified with mysql_native_password by 'app_pwd';

grant all on d1.* to app_user@'%';

3、在ProxySQL节点上启动服务

systemctl start proxysql

4、在ProxySQL节点上新建管理员用户root,6032是管理端口

先在本地连进ProxySQL服务

mysql -uadmin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '

由于默认的admin管理员帐号只能本地连接,所以我们新建一个管理员用户root以便可以远程连接ProxySQL ,其中1234是root帐号对应的密码

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

可以通过以下命令查看参数配置情况

select * from global_variables;

5、在ProxySQL节点上配置MGR监控用户,用于监控MGR集群状态

set mysql-monitor_username='proxysql_user';
set mysql-monitor_password='proxysql_pwd';
load mysql variables to runtime;
save mysql variables to disk;

6、在ProxySQL节点上配置连接MGR的程序帐号

INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('app_user','app_pwd',1);

load mysql users to runtime;
save mysql users to disk;

select * from mysql_users;
select * from runtime_mysql_users;

7、在ProxySQL节点上配置MGR主机组信息,用于区分MGR成员状态等情况

insert into mysql_group_replication_hostgroups(writer_hostgroup, backup_writer_hostgroup, reader_hostgroup, offline_hostgroup, active, max_writers, writer_is_also_reader, max_transactions_behind) values(1, 2, 3, 4, 1, 1, 0, 100);

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

select * from mysql_group_replication_hostgroups;
select * from runtime_mysql_group_replication_hostgroups;

接下来对每一个字段进行介绍:

writer_hostgroup 默认情况下会将所有流量发送到这个组。具有read_only=0的节点也将分配到这个组
backup_writer_hostgroup 用于多写模式,如果集群有多个写节点(read_only=0)且超过了max_writers规定数量,则会把多出来的写节点放到备用写组里面
reader_hostgroup 读取的流量应该发送到该组,只读节点(read_only=1)会被分配到该组
offline_hostgroup 当ProxySQL监视到某个节点不正常时,会被放入该组
active 是否启用主机组,当启用时,ProxySQL将监视主机在各族之间移动
max_writers 用于多写模式, 最大写节点的数量,超过该值的节点应该被放入backup_write_hostgroup
writer_is_also_reader 一个写节点是否也做读节点。主模型的MGR时,必须设置writer_is_also_reader=1。如果该值为2,则backup_writer_hostgroup的节点做读写点,但是writer_hostgroup不会做读节点
max_transactions_behind 类似主从延迟流量停用功能。设置一个节点落后的事务数量,达到这个数量后,节点状态被设置为 shunned ,被完全处理完后,再变更为正常状态。

8、在ProxySQL节点上配置MGR成员信息

insert into mysql_servers(hostgroup_id,hostname,port) values
(1, '10.211.55.9' ,3306),
(1, '10.211.55.4' ,3306),
(1, '10.211.55.6' ,3306);

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

select * from mysql_servers;
select * from runtime_mysql_servers;

9、在ProxySQL节点上配置读写分离路由规则

写走1号组,读走3号组

insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)VALUES 
(1,1,'^SELECT.*FOR UPDATE$',1,1),
(2,1,'^SELECT',3,1);

load mysql query rules to runtime;
save mysql query rules to disk;

select * from mysql_query_rules \G
select * from runtime_mysql_query_rules \G


四、测试ProxySQL读写分离

1、在 Secondary2 节点上去连接 ProxySQL 节点进行测试,6033是程序端口

mysql -uapp_user -p'app_pwd' -h 10.211.55.7 -P6033

发起一些sql

use d1
create table t11(id int primary key);
insert into t11 select 1;
insert into t11 select 2;
select * from t11;
select * from t11;
select * from t11;
select * from t11;
select * from t11;
select * from t11;
select * from t11;
。。。

2、在ProxySQL 节点在查看读写分离情况

SELECT hostgroup hg, sum_time, count_star, digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;

结果如下,可以看到读写请求已经分散到不同步服务器组1和3了

+----+----------+------------+--------------------------------------+
| hg | sum_time | count_star | digest_text                          |
+----+----------+------------+--------------------------------------+
| 1  | 33409    | 1          | create table t11(id int)             |
| 1  | 29276    | 3          | insert into t11 select ?             |
| 1  | 26688    | 1          | create table t11(id int primary key) |
| 1  | 20873    | 1          | drop table t11                       |
| 3  | 9430     | 7          | select * from t11                    |
| 1  | 8535     | 1          | show databases                       |
| 3  | 5819     | 1          | SELECT DATABASE()                    |
| 3  | 5503     | 1          | SELECT DATABASE()                    |
| 1  | 4757     | 1          | show databases                       |
| 1  | 2622     | 1          | show tables                          |
| 3  | 1643     | 1          | SELECT * FROM `t2` WHERE ?=?         |
| 1  | 0        | 1          | select @@version_comment limit ?     |
+----+----------+------------+--------------------------------------+
12 rows in set (0.00 sec)


五、测试ProxySQL高可用HA

1、停止Primary 节点(node1)上的MySQL服务器,模拟写节点故障

root@node1:~# mysqladmin -uroot -proot shutdown

2、在Secondary2 节点(node3)查看MGR集群状态

可以看到node1已经补踢出集群,node2现在为主节点了

root@node3:~# mysql -uroot -proot

mysql> select member_host, member_state, member_role from performance_schema.replication_group_members;
+------------------------+------------------------+------------------------+
| MEMBER_HOST | MEMBER_STATE | MEMBER_ROLE |
+------------------------+------------------------+------------------------+
| node2                   | ONLINE                | PRIMARY             |
| node3                   | ONLINE                | SECONDARY      |
+------------------------+--------------+-------------+
2 rows in set (0.00 sec)

3、在node3上连接ProxySQL看是否可以自动识别新的主节点并继续正常使用读写分离

通过程序端口6033确认读写是正常的

root@node3:~# mysql -uapp_user -p'app_pwd' -h 10.211.55.7 -P6033

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| d1                 |
| information_schema |
+--------------------+
2 rows in set (0.02 sec)

mysql> use d1
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+--------------+
| Tables_in_d1 |
+--------------+
| t11          |
| t2           |
+--------------+
2 rows in set (0.01 sec)

mysql> select * from t11;
+----+
| id |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0.00 sec)

mysql> insert into t11 select 3;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into t11 select 4;
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0

通过管理端口6032确认成员节点状态,可以看到node1节点状态是下线状态,同时他也被移到了4号组(即故障组)里面

root@node3:~# mysql -uroot -p1234 -h 10.211.55.7 -P6032

mysql> select hostgroup_id, hostname, status from runtime_mysql_servers;
+------------------+----------------+---------+
| hostgroup_id | hostname    | status  |
+-----------------+-----------------+---------+
| 1                   | 10.211.55.4 | ONLINE  |
| 4                   | 10.211.55.9 | SHUNNED |
| 3                   | 10.211.55.6 | ONLINE  |
+-----------------+-----------------+---------+
3 rows in set (0.01 sec)

mysql>

4、我们把故障节点node1启动后再加回MGR集群,确认ProxySQL是否正常工作

将故障节点加回MGR集群

root@node1:~# mysqld_safe --user=mysql &
[1] 103812

root@node1:~# mysql -uroot -proot

mysql> start group_replication;
Query OK, 0 rows affected (1.95 sec)

mysql> select member_host, member_state, member_role from performance_schema.replication_group_members;
+-----------------------+-------------------------+------------------------+
| MEMBER_HOST | MEMBER_STATE | MEMBER_ROLE |
+-----------------------+-------------------------+------------------------+
| node1                  | ONLINE                 | SECONDARY      |
| node2                  | ONLINE                 | PRIMARY             |
| node3                  | ONLINE                 | SECONDARY       |
+-----------------------+-------------------------+-------------------------+
3 rows in set (0.00 sec)

在node1上通过管理端口6032确认成员节点状态,可以看到node1节点状态是在线状态,同时他也被移到了3号组(即读组)里面

root@node1:~# mysql -uroot -p1234 -h 10.211.55.7 -P6032

mysql> select hostgroup_id, hostname, status from runtime_mysql_servers;
+------------------+----------------+---------+
| hostgroup_id | hostname    | status  |
+-----------------+-----------------+---------+
| 1                   | 10.211.55.4 | ONLINE  |
| 3                   | 10.211.55.9 | ONLINE  |
| 3                   | 10.211.55.6 | ONLINE  |
+-----------------+-----------------+---------+
3 rows in set (0.01 sec)

mysql>


六、清空ProxySQL的配置

root@node4:/var/lib/proxysql# systemctl stop proxysql.service
root@node4:/var/lib/proxysql# cd /var/lib/proxysql
root@node4:/var/lib/proxysql# rm -rf *
root@node4:/var/lib/proxysql# systemctl start proxysql.service

《童虎学习笔记》20分钟实战ProxySQL MGR高可用及读写分离架构相关推荐

  1. 《童虎学习笔记》5分钟Citus之SQL命令参考

    本专栏全部文章 ​​​​​​​https://blog.csdn.net/tonghu_note/category_11713514.html 总目录 https://blog.csdn.net/to ...

  2. 《童虎学习笔记》PostgreSQL超简单新手入门教程

    总目录:https://blog.csdn.net/tonghu_note/article/details/124333034 第1节 3分钟学会在linux下安装PostgreSQL 第2节 2分钟 ...

  3. 《童虎学习笔记》14分钟结合ProxySQL处理超半数MGR节点故障

    本文章配套视频 https://www.ixigua.com/7086085500540289572?id=7088719800846778910 本专栏全部文章 https://blog.csdn. ...

  4. 《童虎学习笔记》3分钟学会PostgreSQL实时监控利器pgCenter

       本文章配套视频 https://www.ixigua.com/7077056019024904717?id=7078684048586965512 本专栏全部文章 https://blog.cs ...

  5. 《童虎学习笔记》15分钟ShardingSphere搭建PostgreSQL分库分表

    本文章配套视频 https://www.ixigua.com/7077056019024904717?id=7082741456641163790 本专栏全部文章 https://blog.csdn. ...

  6. 《童虎学习笔记》5分钟了解Citus核心系统表

    本专栏全部文章 https://blog.csdn.net/tonghu_note/category_11713514.html 总目录 https://blog.csdn.net/tonghu_no ...

  7. 《童虎学习笔记》11分钟学会MySQL基于时间点的恢复(gtid方式)

       本文章配套视频 https://www.ixigua.com/7092706197576516110 本专栏全部文章 https://blog.csdn.net/tonghu_note/cate ...

  8. 《童虎学习笔记》3分钟学会如何优雅的重启MySQL MGR集群

     本文章配套视频 https://www.ixigua.com/7086085500540289572?id=7083884629215674911 本专栏全部文章 https://blog.csdn ...

  9. 《童虎学习笔记》5分钟入门PG分布式集群Citus

    本专栏全部文章 https://blog.csdn.net/tonghu_note/category_11713514.html 总目录 https://blog.csdn.net/tonghu_no ...

最新文章

  1. TP-link 841N 刷DD-WRT固件
  2. CSS入门之【背景图像和渐变】
  3. 网络编程 数据报是什么?TCP、UDP数据报结构
  4. python(matplotlib8)——图中图(在figure中画多个坐标图),次坐标(两个y轴)
  5. 紧跟月影大佬的步伐,一起来学习如何写好JS(下)
  6. 设计模式笔记七:桥接模式
  7. [Remoting]dotNet Framework升级后Remoting信道使用的安全问题
  8. 网路游侠:计算机保密检查工具大全 2009版
  9. python queue get 方法_Python语言中的Queue(队列)
  10. 【Golang 快速入门】高级语法:反射 + 并发
  11. abb外部轴零位校准_【ABB】ABB机器人外部轴参数(KpKvTi)调试
  12. c语言节点的作用,C语言试题
  13. 项目管理:名词解释、区别联系、案例分析
  14. Android app后台服务在锁屏情况下一直运行的方法
  15. 基于ARMv8的固件系统架构
  16. MACbook Air 装win7 步骤
  17. 论文阅读《Direct Sparse Odometry》2
  18. 26.空寂无求,禅意悠远
  19. IMU的数学模型与误差标定问题
  20. USSD(Unstructured Supplementary Service Data)即非结构化补充数据业务,是一种新型基于GSM网络的交互式数据业务

热门文章

  1. 算法实践——数独的基本解法
  2. 骑着单车追随你——西西里的美丽传说
  3. 计算机表格公开课,Word表格制作教案公开课
  4. Windows7 UAC 实验
  5. android 蓝牙打印兼容,在Android中使用蓝牙打印机打印不起作用
  6. 给定一个数组,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择某一天买入这只股票,并选择在未来的一个不同的日子卖出该股票。【LeetCode Hot 100】
  7. java isreachable_java-奇数InetAddress.isReachable()问题
  8. 中国智能互动纺织品市场趋势报告、技术动态创新及市场预测
  9. 纺织品外贸ERP管理,“双循环”下的发展新格局
  10. 怎么成为一个优秀的面试官