MySQL运维16-双主双从读写分离

2023-12-26 20:44

本文主要是介绍MySQL运维16-双主双从读写分离,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、双主双从架构介绍

在MySQL多主多从的架构配置中和双主双从是一样的,学会了双主双从的架构部署,多主多从的配置也同样就回了。下面以双主双从作为示例演示。其中一个主机maste1用于处理所有写请求,它的从机slave1和另外一台主机master2还有它的从机salve2负责所有读数据请求,当master1主机宕机后,master2主机会立刻切换到负责写请求,master1和master2互为备机,架构如下:

  

二、双主双从主机配置

四台MySQL主机,分别如下

192.168.3.91:角色 master1, 启动服务Mycat,MySQL, 关闭防火墙

192.168.3.92:角色 slave1, 启动服务MySQL,关闭防火墙

192.168.3.93:角色 master2, 启动服务MySQL,关闭防火墙

192.168.3.94:角色 slave2,  启动服务MySQL,关闭防火墙

  

说明1:其中192,168.3.91即当MySQL服务器,又充当Mycat的服务器 

三、master1节点配置

3.1 修改mysql配置文件

192.168.3.91这个台服务器当做双主中的一个,修改其配置文件如下:vim /etc/my.cnf

    

说明1: server-id=1 是mysql集群服务中的唯一标识

说明2:binlog-do-db是指定要主从复制的数据库,不指定默认是全部数据库都做主从复制

说明3:在主服务器上要配置log-slave-updates因为当存在多个主服务器的时候,有可能会存在备用主机,备用主机也是需要通过binlog文件向自己的从机同步数据的,所以要开始log-slave-updates

3.2 重启mysql

    

3.3 创建用于主从复制的账号

要进入mysql交互界面,注意不是进入Mycat 

# 创建一个mysql用户为houlei,并设置密码为:Se7eN521,该用户可以在任意主机连接该MySQL服务
mysql> create user 'houlei'@'%' identified with mysql_native_password by 'Se7eN521';
Query OK, 0 rows affected (0.03 sec)
# 为'houlei'@'%' 用户分配主从复制权限
mysql> grant replication slave on *.* to 'houlei'@'%';
Query OK, 0 rows affected (0.01 sec)

3.4 查看二进制日志坐标    

    

四、master2节点配置

4.1 修改mysql配置文件

192.168.3.93这个台服务器当做双主中的另外一个,修改其配置文件如下:vim /etc/my.cnf

    

说明1:这里的server-id=3

4.2 重启mysql  

    

4.3 创建用于主从复制的账号

要进入mysql交互界面,注意不是进入Mycat 

# 创建一个mysql用户为houlei,并设置密码为:Se7eN521,该用户可以在任意主机连接该MySQL服务
mysql> create user 'houlei'@'%' identified with mysql_native_password by 'Se7eN521';
Query OK, 0 rows affected (0.03 sec)
# 为'houlei'@'%' 用户分配主从复制权限
mysql> grant replication slave on *.* to 'houlei'@'%';
Query OK, 0 rows affected (0.01 sec)
  
4.4 查看二进制日志坐标

  

五、slave1节点配置

5.1 修改配置文件

slave1节点是192.168.3.92, 修改其配置文件如下 vim /etc/my.cnf

    

5.2 重启mysql

    

5.3 slave1关联master1

change master to master_host='192.168.3.91',master_user='houlei',master_password='Se7eN521',master_log_file='binlog.000010',master_log_pos=156;

    

说明1:master_host是该从库关联的主库,slave1关联的事192.168.3.91这台master1

    

说明2:master_user是关联账号,houlei这个账号是在master1中刚创建的账号,就是用来做主从复制使用的

    

说明3:master_password是关联账号的密码

    

说明4:master_log_file是开始主从复制的binlog文件名

    

说明5:master_log_poss是binlog日志文件位置,这个参数是不用加引号或单引号的。

5.4 启动slave1的主从复制

    

说明6:start slave 开始主从复制

六、slave2节点配置

6.1 修改配置文件

slave2节点是192.168.3.94,修改其配置文件如下 vim /etc/my.cnf

    

6.2 重启mysql

    

6.3 slave2关联master2

change master to master_host='192.168.3.93',master_user='houlei',master_password='Se7eN521',master_log_file='binlog.000018',master_log_pos=156;

    

说明1:master_host是该从库关联的主库,slave2关联的事192.168.3.93这台master2

    

说明2:master_user是关联账号,houlei这个账号是在master1中刚创建的账号,就是用来做主从复制使用的

    

说明3:master_password是关联账号的密码

    

说明4:master_log_file是开始主从复制的binlog文件名

    

说明5:master_log_poss是binlog日志文件位置,这个参数是不用加引号或单引号的。

    

说明6:该语句是在slave2的mysql交互界面执行的

6.4 启动slave2的主从复制 

    

七、两台主库相互复制

  

以上6章节我们等于部署了master1-slave1和master2-slave2两套一主一从,但是目前位置这两个一主一从还没有任何关系,所以接下来我们就要配置两台主机上的关联了。即master1复制master2的同时master2也复制master2.

  

在master1上执行:

change master to master_host='192.168.3.93',master_user='houlei',master_password='Se7eN521',master_log_file='binlog.000018',master_log_pos=156;

 start slave;

show slave status\G;

  

说明1:以上代码其实就是将master1配置为master2的从库  

  

然后在master2上执行:

change master to master_host='192.168.3.91',master_user='houlei',master_password='Se7eN521',master_log_file='binlog.000010',master_log_pos=156;

start slave;

show slave status\G;

  

说明2:以上代码其实就是将master2配置为master1的从库 

 

八、双主双从测试

分别在两台主库master1,master2上执行DDL和DML语句,查看涉及到的数据库服务器的数据同步情况

  

在master1上操作:

8.1、创建数据库test_db1

mysql> create database test_db1;
Query OK, 1 row affected (0.01 sec)

    

说明1:我们在192.168.3.91的master1主库上创建了数据库test_db1,然后再slave1,和master2,slave2上立刻就复制创建了test_db1出来

2、我们在master2上的test_db1的数据库中创建一个tb_test表

    

    

create table tb_test(id int auto_increment primary key, name varchar(20));

    

说明2:在master2上进行创建表同样会自动复制到master1和其他从表中

    

说明3:至此双主双从算是配置好了

九、双主双从的读写分离

Mycat控制后台数据库的读写分离和负载均衡有schema.xml文件中的dataHost标签的balance属性控制,通过writeType及switchType来完成失败自动切换的。

9.1 配置schema.xml 

    

说明1:在配置schema逻辑库的时候就要指定数据节点dataNode的值,因为如果逻辑库下的所有表都要实现读写分离,则不需要配置table标签

    

说明2:dn1数据节点下对应的mysql的database为test_db1

    

说明3:在dataHost标签的配置中要注意,balance值为"1",writeType值为"0",switchType的值为"1",解释如下:

  • balance="1": 关于balance所有值的解释在上一遍文章中有解释,需要的请通过合集找到上一篇文章查看,这里直接是balance="1"的情况:代表全部的readHost和备用主机的writeHost参与select语句的负载均衡,简单的说,当双主双从模式(master1->slave1,master2->slave2,并且master1和master2互为主备),正常情况下master2,slave1,slave2都要参与select语句的负载均衡

  • writeType:0:代表写操作都转发到第一台writerHost,writeHost1挂了,会切换到writeHost2上。1:代表所有写操作都随机的发送到配置的witerHost上

  • switchType:-1:代表不自动切换,1:代表自动切换

    

说明4:双主双从即配置两个writeHost和readHost组合,如果是多主多从即配置多个writeHost和readHost组合即可。

9.2 配置server.xml

    

说明5:给root用户增加test_db1数据库的操作权限

9.3 双主双从读写分离测试

首先重启Mycat

    

登录Mycat

    

查看逻辑库和逻辑表

    

插入测试数据

insert into tb_test(name) values ("张三");
insert into tb_test(name) values ("李四");
insert into tb_test(name) values ("王五");

    

    

说明6:在Mycat中插入数据master1,slave1,master2,slave2中都添加了数据.

    

查询数据测试:同样的直接查询我们是没办法确定查询的数据到底是来自哪里,所以我们还是修改从库中的数据,将slave1中的“张三”改了“张三s1”,将slave2中的“张三”改为“张三s2”

    

   

    

说明7:查询结果是张三的说明数据来源master2

    

说明8:查询结果是张三s1的说明数据来源是slave1

    

说明9:查询结果是张三s2的说明数据来源是slave2

    

说明10:以上测试说明了双主双从实现了读写分离

十、双主双从的高可用测试

  

测试一台主机宕机下,双主双从是否可以继续运行。

10.1、现将master1(192.168.3.91)的服务关闭

    

10.2 进入Mycat进行增删改查测试

    

说明1:仍然可以查询,说明可以进行读数据

    

说明2:master1挂了的情况下,我们的双主双从架构的MySQL依然可读可写,所以高可用也没问题

    

总结:在双主双从的基础上,多主多从同样的实现思路。

文章转载自:Se7eN_HOU

原文链接:https://www.cnblogs.com/Se7eN-HOU/p/17926983.html

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

这篇关于MySQL运维16-双主双从读写分离的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/540718

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

10. 文件的读写

10.1 文本文件 操作文件三大类: ofstream:写操作ifstream:读操作fstream:读写操作 打开方式解释ios::in为了读文件而打开文件ios::out为了写文件而打开文件,如果当前文件存在则清空当前文件在写入ios::app追加方式写文件ios::trunc如果文件存在先删除,在创建ios::ate打开文件之后令读写位置移至文件尾端ios::binary二进制方式

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能