读写分离原理

当用户在发送请求数据时,请求经过中间件,中间件将请求中的读和写操作分辨。将读请求发送给后端的从服务器;将写请求发送给后端的主服务器,然后主服务器通过主从复制将数据复制给其他从服务器;

实验环境

主机           ip地址
Master      192.168.14.210
Slave       192.168.14.211
Client      192.168.14.212
ProxySQL    192.168.14.213

注意事项:ProxySQL在实现读写分离之前先要实现主从复制的共功能;主从复制时从节点在配置文件中必须要设置read_only,这是ProxySQL区分是用来作为读服务器还是写服务器的依据;

一、实现主从复制

1、查看文章https://blog.csdn.net/tladagio/article/details/103137845

二、ProxySQL配置读写分离

1、添加yum源

[root@proxysql ~]# vi  /etc/yum.repos.d/proxysql.repo
[proxysql_repo]
name= ProxySQL YUM repository
baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever
gpgcheck=1
gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key 

2、安装ProxySQL和mariadb客户端

[root@proxysql ~]# yum install -y proxysql mariadb

3、启动ProxySQL服务

[root@proxysql ~]# systemctl start proxysql
[root@proxysql ~]# firewall-cmd --permanent --zone=public --add-port=6032/tcp
[root@proxysql ~]# firewall-cmd --permanent --zone=public --add-port=6033/tcp
[root@proxysql ~]# firewall-cmd --reload

ProxySQL所使用的端口为6032和6033
6032:用来配置ProxySQL,是个管理接口
6033:用来被远程用户连接端口

4、连接管理端口

[root@proxysql ~]# mysql -uadmin -padmin -P6032 -h127.0.0.1
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.30 (ProxySQL Admin Module)

5、将MySQL主从服务器信息添加入mysql_servers表中

先将主从服务器存放在同一组内,等指定好读写规则后,系统会根据配置文件中的read-only值自动将其分别添加至读组和写组。

MySQL [(none)]> INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (10,'192.168.14.210',3306);
MySQL [(none)]> INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (10,'192.168.14.211',3306);
MySQL [(none)]> select * from mysql_servers;

6、在MySQL服务器的主节点(192.168.14.210)上为ProxySQL添加账号用来查看MySQL节点是主还是从

[root@master ~]# mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'monitor'@'192.168.14.%' IDENTIFIED BY 'centos';"  

7、在Proxy上配置监控账号

MySQL [(none)]> SET mysql-monitor_username='monitor';
MySQL [(none)]> SET mysql-monitor_password='centos';

8、配置加载至内存,将配置保存至磁盘

MySQL [(none)]> LOAD MYSQL VARIABLES TO RUNTIME;
MySQL [(none)]> SAVE MYSQL VARIABLES TO DISK;

9、测试,查看连接状态

MySQL [(none)]> select * from mysql_server_connect_log;

10、设置读写分组

MySQL [(none)]> INSERT INTO mysql_replication_hostgroups VALUES(10,20,"test");
MySQL [(none)]> SELECT * FROM mysql_replication_hostgroups; 

11、让读写表生效

MySQL [(none)]> LOAD MYSQL SERVERS TO RUNTIME;

12、查看mysql_server表此时已经将服务器分组

MySQL [(none)]> SELECT * FROM mysql_servers;

13、保存配置至磁盘

MySQL [(none)]> SAVE MYSQL SERVERS TO DISK;

至此读写分离配置完毕,接下来需要定义读写分离的规则

三、定义读写分离规则

1、在主节点(192.168.14.210)上创建一个账户让客户端连接调度器去访问主从服务器(此处授予的权限较大,实际生产中可以根据需要定义指定的那张表)

[root@master ~]# mysql -e "GRANT ALL ON *.* TO 'sqluser'@'192.168.14.%' IDENTIFIED BY 'centos';"

2、在ProxySQL服务器上,将sqluser用户添加至mysql_users表中

MySQL [(none)]> INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('sqluser','centos',10);

3、查看mysql_user表信息

MySQL [(none)]> SELECT * FROM mysql_users;

4、生效存盘

MySQL [(none)]> load mysql users to runtime;
MySQL [(none)]> SAVE MYSQL USERS TO DISK;

5、Client测试

[root@client ~]# mysql -usqluser -pcentos -h192.168.14.213 -P6033 -e "SELECT @@server_id;"

6、在ProxySQL上定义调度规则

MySQL [(none)]> INSERT INTO mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply) VALUES (1,1,'^SELECT.*FOR UPDATE$',10,1),(2,1,'^SELECT',20,1);  

7、查看定义规则

MySQL [(none)]> select * from mysql_query_rules \G
*************************** 1. row ***************************rule_id: 1active: 1username: NULLschemaname: NULLflagIN: 0client_addr: NULLproxy_addr: NULLproxy_port: NULLdigest: NULLmatch_digest: ^SELECT.*FOR UPDATE$match_pattern: NULLnegate_match_pattern: 0re_modifiers: CASELESSflagOUT: NULLreplace_pattern: NULL
destination_hostgroup: 10cache_ttl: NULLreconnect: NULLtimeout: NULLretries: NULLdelay: NULLnext_query_flagIN: NULLmirror_flagOUT: NULLmirror_hostgroup: NULLerror_msg: NULLOK_msg: NULLsticky_conn: NULLmultiplex: NULLlog: NULLapply: 1comment: NULL
*************************** 2. row ***************************rule_id: 2active: 1username: NULLschemaname: NULLflagIN: 0client_addr: NULLproxy_addr: NULLproxy_port: NULLdigest: NULLmatch_digest: ^SELECTmatch_pattern: NULLnegate_match_pattern: 0re_modifiers: CASELESSflagOUT: NULLreplace_pattern: NULL
destination_hostgroup: 20cache_ttl: NULLreconnect: NULLtimeout: NULLretries: NULLdelay: NULLnext_query_flagIN: NULLmirror_flagOUT: NULLmirror_hostgroup: NULLerror_msg: NULLOK_msg: NULLsticky_conn: NULLmultiplex: NULLlog: NULLapply: 1comment: NULL
2 rows in set (0.00 sec)

8、生效存盘

MySQL [(none)]> LOAD MYSQL QUERY RULES TO RUNTIME;
MySQL [(none)]> SAVE MYSQL QUERY RULES TO DISK;

四、Client端测试

1、客户端连接proxysql,写入数据;主从节点实现复制

mysql -usqluser -h 192.168.14.213 -P 6033 -p

2、客户端查询(客户端是proxysql读取slave的数据,单独在slave创建新的数据,然后对比master和client节点)

到此,读写分离成功完成

Mariadb读写分离(ProxySQL)相关推荐

  1. mysql 数据库集群搭建:(四)pacemaker管理三台maxscale集群,搭建mariadb读写分离中间层集群...

    为什么80%的码农都做不了架构师?>>>    <mysql 数据库集群搭建:(一)VirtualBox中多台CentOS虚拟机间和windows主机间互通以及访问互联网设置& ...

  2. MySQL高可用实现:主从结构下ProxySQL中的读写分离

    墨墨导读:ProxySQL是一个高性能的MySQL中间件,拥有强大的规则引擎. ProxySQL提供强大的路由规则.当应用程序自身不支持读写分离时,DBA可以通过配置路由规则为应用程序提供透明的读写分 ...

  3. mysql5.7+proxy_mysql5.7使用ProxySQL实现读写分离

    ProxySql是MySQL的一款中间件产品,是灵活强大的mysql代理层,可以实现读写分离,支持query路由功能,支持动态指定某个sql进行缓存,支持动态加载配置.故障切换和一些sql过滤功能. ...

  4. ProxySQL+MGR实现读写分离和主节点故障无感知切换

    ProxySQL+MGR实现读写分离和主节点故障无感知切换 一.环境准备 192.168.153.149 mgr-node1 192.168.153.150 mgr-node2 192.168.153 ...

  5. ProxySQL 配置详解及读写分离(+GTID)等功能说明 (完整篇)1

    ProxySQL是灵活强大的MySQL代理层, 是一个能实实在在用在生产环境的MySQL中间件,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行 cache,支持动态加载配 ...

  6. ProxySQL+MGR实现读写分离和主节点故障无感知切换 - 完整操作记录

    ProxySQL+MGR实现读写分离和主节点故障无感知切换 - 完整操作记录 前面的文章介绍了ProxySQL用法,这里说下ProxySQL中间件针对Mysql组复制模式实现读写分离以及主节点故障时能 ...

  7. 【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡

    文章目录 一.MHA+ProxySQL架构 二.快速搭建MHA环境 2.1 下载MHA镜像 2.2 编辑yml文件,创建MHA相关容器 2.3 安装docker-compose软件(若已安装,可忽略) ...

  8. ProxySQL 配置详解及读写分离(+GTID)等功能说明 (完整篇)

    ProxySQL是灵活强大的MySQL代理层, 是一个能实实在在用在生产环境的MySQL中间件,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行 cache,支持动态加载配 ...

  9. ProxySQL实现双主双从读写分离部署

    文章目录 1.环境说明 2.安装proxysql和安装mysql和配置主从 2.1给四台mysql安装mariadb 2.2安装proxysql 2.2.1配置mysql-master和mysql-m ...

  10. MySQL用中间件ProxySQL实现读写分离和主节点故障应用无感应

    昨天做的用proxysql实现的读写分离,但是在实际的应用中这样的结构还很不完整,如果主节点出现故障那么整个拓扑的数据库也无法通过proxysql来调用了,所以还需要增加主节点故障后proxysql能 ...

最新文章

  1. leetcode-C语言代码练习
  2. 确诊新冠小米员工的活动轨迹,这就是人间真实吗?
  3. Error opening/initializing the selected video_out (-vo) device.
  4. scala 方法、函数定义小结
  5. quartz 时间配置规则
  6. XE Styles不见了
  7. 【linux笔记】secureCRT使用
  8. java 读文件 优化_Java读取文件性能优化程序代码
  9. 802.1x客户端 linux,Gentoo Linux--校园网(802.1x)拨号认证客户端解决方案
  10. office2016图标显示异常,但是文档可以正常打开解决办法
  11. 在1分钟K线图中显示分时图均价线的公式
  12. SRAM and DRAM
  13. smart bi 学习
  14. 蓝色理想的flex教材不能在flex Development做不能使用,我整理一下供初学者参考
  15. 《口算大作战 概念版》功能规格说明书
  16. SpringMVC - 入门
  17. 国内外IP线路测试网址收藏
  18. Android 端“被挤下线”功能的实现 2017-11-15 sun_____xin code小生 作者 | sun_____xin 地址 | http://www.jianshu.com/p/
  19. 大话西游2接收服务器信息失败,大话西游手游服务器连接失败 无法连接服务器解决步骤_网络-游戏圈...
  20. Java 封装类型和基本类型区别

热门文章

  1. 微软LUIS助力抗疫魔镜
  2. 【兆芯】秋招 笔试编程题
  3. turtle() 海龟绘图
  4. 【周总结】——收拾行囊
  5. 护眼贴厂家讲述近视是怎样形成的
  6. 小批量梯度下降算法的Python实现
  7. 网友以真金白银力挺,华为夺下电商平台热销手机第一名
  8. 2009年02月《安全天下事》、2009年02月《安全天下事之12月,辩证法之月》、《2008信息安全技术与产业大盘点》
  9. GLUE: 自然语言理解的标杆
  10. 股票开户哪个券商进行炒股佣金最低手续费最低?万1融5!