Linux之MySQL(组复制 单主多主切换,读写分离)

一、组复制

单主模式:

1. server1配置:

恢复环境,确保没有mysql相关进程

随机生成一个uuid(组复制需要使用所有组成员保证一致)

uuidgen

更改配置文件,添加组复制

启动数据库,获取临时密码

systemctl start mysqld
cat /var/log/mysqld.log | grep password

更改密码(登陆需要输入日志中查到的临时密码)

关闭二进制文件,避免接下来的操作被其他组成员复制,再创建复制用户并授权,刷新授权表,最后打开二进制文件

配置组用户

CHANGE MASTER TO MASTER_USER='group_rpl', MASTER_PASSWORD='Huayu+123' FOR CHANNEL 'group_replication_recovery';

安装组复制插件

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

我这里提示已经安装过了,因为我在配置文件中设置过加载这个插件

 

开启组引导 注:只在第一次执行这个操作,后面其他组成员配置时不需要

SET GLOBAL group_replication_bootstrap_group=ON;

 

START GROUP_REPLICATION;

SET GLOBAL group_replication_bootstrap_group=OFF;

查看组成员

SELECT * FROM performance_schema.replication_group_members;

ONLINE代表配置成功

 

2. server2配置:

恢复环境

 修改配置文件,和server1一致,只需要改变server-id 以及 绑定的本地ip

启动服务,获取临时密码

systemctl start mysqld
cat /var/log/mysqld.log | grep password

登陆,更改密码

关闭二进制文件,创建复制用户并授权

打开二进制文件

添加组复制

如果没有加载组复制插件则需要安装

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

我在配置文件中设置加载组复制插件,所以不需要这一步骤

开启组复制报错

停止组复制,reset master后再打开

问题分析:在配置组复制之前,启动mysql时,配置文件中已经设置了binlog_format=on,初始化mysql更改密码时,有事物已经被记录,所以或报错,将master reset后,删除之前的事物,再启动组复制则没有问题,其实这就类似于主从复制中的数据不同步。

 

测试:

在server1创建数据库

server2可以看到

在server2中新建表

提示为只读模式,因为是单主复制,所以只有一个可读,其他为只读

 

多主模式:

在刚才单主模式基础上,所有组复制节点执行以下命令:

停止组复制,单主模式关闭,检查更新开启

选择一个节点(我是在server1)开启组引导,开启组复制,关闭引导

其他节点直接打开组复制

查看组复制状态

在server2创建表

server1查看:

在server1插入数据

报错,因为刚创建的表没有主键,所以无法插入数据 

组复制只支持innodb存储引擎,能够创建非innodb引擎的表,但是无法写入数据,向非innodb表写数据直接报错。

在server1重新创建表,插入数据

在server2查看

可以看到server1插入的数据

 

 

二、读写分离 -- mysql-proxy

1. Mysql-proxy简介:

  •     mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等
  •     MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。

搭建mysql主从复制,通过mysql-proxy将写请求转发给主库,读请求转发给从库,从而实现读写分离,负载均衡,减轻主库压力

2. 安装mysql-proxy

配置好server1和server而主从复制可参考上一篇文章

https://blog.csdn.net/qq_36023219/article/details/106087210

server3作为代理端:

没有el7的安装包,这里使用的el6的

创建conf目录

编辑配置文件

vim mysql-proxy.conf

创建日志目录(刚在配置文件中指定的)

修改下我们刚指定的读写分离脚本

主要修改最大连接数,即超过两个时启用读写分离(一般读写分离启用都是又限制的,不会一个连接就读写分离)

更改配置文件权限0660 ,对配置文件权限又要求,否则会报错

chmod 0660 /usr/local/mysql-proxy/conf/mysql-proxy.conf

报错原因是因为配置文件中有字符不识别,删除注释,将true改为1

 启动成功

 

真是主机安装mariadb测试

yum install -y mariadb-server.x86_64

 发现失败

查找原因,发现虽然mysql-proxy没报错,但启动失败,原因是3306端口被占用,因为我server3安装了mysql且运行中

停止server3的mysqld服务后再启动mysql-proxy

server1授权,方便测试 

访问

代理端安装lsof工具,查看3306端口进程

可以看到转发到server1

再开一个连接

第三个连接显然不再交给server1而交给server2

三个连接分别写入

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值