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快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/578660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpEL 的使用

SpEL 的使用 SpEL的全称为 Spring Expression Language,具有再运行时构建复杂表达式、存取对象图属性、对象方法调用等功能 下面是一个简单样例 public class SpelTest { Test public void test1() { ExpressionParser parser new SpelExpressionParser(); …

【性能测试】真实企业,性能测试流程总结分析(二)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 4、性能测试用例设…

odbc连接mysql数据库

安装odbc相关组件 apt install unixodbc unixodbc-dev libmyodbc 修改odbc配置 执行odbcinst -j查询odbc所读取的配置默认路径,根据查询结果修改,odbc.ini和odbcinst.ini两个文件 odbcinst.ini配置如下 [MySQL] Description MySQL Driver /usr/l…

手把手带你死磕ORBSLAM3源代码(十)System.cc System类代码分析

目录 一.前言 二.代码分析 2.1 引用头文件 2.2 静态成员变量 2.3 System函数 一.前言 这部分代码介绍引用头文件以及System类的函数定义文件。 二.代码分析 2.1 引用头文件 #include "System.h" #include "Converter.h" #include <thread> #…

Azure Machine Learning - Azure OpenAI GPT 3.5 Turbo 微调教程

本教程将引导你在Azure平台完成对 gpt-35-turbo-0613 模型的微调。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认证的资深架构师&…

Javacv-利用Netty实现推流直播复用(flv)

前言 上一篇文章《JavaCV之rtmp推流&#xff08;FLV和M3U8&#xff09;》介绍了javacv的基本使用&#xff0c;今天来讲讲如何实现推流复用。 以监控摄像头的直播为例&#xff0c;通常分为三步&#xff1a; 从设备获取音视频流利用javacv进行解码&#xff08;例如flv或m3u8&am…

随笔记录.1

1.find高级用法 find . -name *.te | xargs grep -i "zygote_tmpfs" find . -name *.te | xargs grep -i "_app_tmpfs" 2.audit2allow -p policy < avc_log.txt 3.fastboot oem set_selinux na 4.adb disable-verity 5.adb shell am broadcast -a …

初级游戏客户端社招面试问题总结

目录 c c# lua Unity NGUI AssetBundles资源管理 Unity性能优化 图形学 网络 场景题 计组&操作系统 其他知识 算法题 c 虚函数的原理 智能指针的原理 如何解决循环引用 智能指针的源码 c&#xff0c;使用char实现自定义的一个string 可以通过new去申请一…

如何实现准时的setTimeout

背景 setTimeout 是不准的。因为 setTimeout 是一个宏任务&#xff0c;它的指定时间指的是&#xff1a;进入主线程的时间。 setTimeout(callback, 进入主线程的时间)所以什么时候可以执行 callback&#xff0c;需要看 主线程前面还有多少任务待执行。 由此&#xff0c;才有了…

MySQL8安装教程

MySQL安装教程 安装环境 Windows 10 软件下载 1、官网下载 官网可以下载最新版本的MySQL 8.0 下载地址&#xff1a; https://dev.mysql.com/downloads/windows/installer/8.0.html 开始安装 1、下载完成后&#xff0c;我们就开始安装&#xff0c;双击安装包&#xff0c…

李宏毅机器学习2023|图像生成模型

文章目录 图像生成Autoregressive&#xff08;各个击破&#xff09;Non-Autoregressive&#xff08;一次到位&#xff09;一次到位法额外的输入——从一个高维的Normal Distribution作simple得到一个向量常用的图片生成模型VAEFlow-based Generative ModelDiffusion ModelGAN D…

计量校准方案分享No.11——定碳定硫分析仪校准方案

[测量单元:红外碳硫分析仪,是否使用220V交流电源:是,碳测量范围:0.005%-4.3%,硫测量范 围:0.0005%-0.33%] 一 依据文件 CNAS CL01-G002-2021 《测量结果的计量溯源性要求》现行有效 RB/T 034-2020 《测量设备校准周期的确定和调整方法指南》现行有效 CNAS TRL-004-2017 《 …

跨境电商独立站的6大模式,任你选择!

在几年前搭建跨境电商独立站和第三方平台基本上是同步发展起来的&#xff0c;但在后期的发展过程中&#xff0c;独立站经过不同时期的革新&#xff0c;形成了自己的模式。 当你准备好创建独立站的时候&#xff0c;首先你需要了解的就是独立站运营的模式类型&#xff0c;并找到最…

【Qt-Edit】

Qt编程指南 ■ QTextEdit■ QLineEdit■ QLineEdit 设置正则表达式 ■ QPlainTextEdit■ QKeySequenceEdit■ QList<QLineEdit *> edits■■ ■ QTextEdit /* 实例和对象&#xff0c;设置位置和显示大小 */ textEdit new QTextEdit(this); textEdit->setGeometry(0…

每日一题(LeetCode)----栈和队列-- 简化路径

每日一题(LeetCode)----栈和队列-- 简化路径 1.题目&#xff08;71. 简化路径&#xff09; 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 / 开头&#xff09;&#xff0c;请你将其转化为更加简洁的规范路径。 在 Unix 风格的…

ISO27001认证主要的审核方向

ISO27001审核主要针对组织的信息安全管理体系&#xff08;ISMS&#xff09;进行全面的审查&#xff0c;以确保其符合ISO/IEC 27001标准的要求。审核过程通常包括以下几个方面&#xff1a; 1. 组织环境&#xff1a;审核组织的信息安全管理体系是否能够在组织内部环境以及与外部供…

熟悉DHCP面临的安全威胁与防护机制

一个网络如果要正常地运行&#xff0c;则网络中的主机&#xff08;Host&#xff09;必需要知道某些重要的网络参数&#xff0c;如IP地址、网络掩码、网关地址、DNS服务器地址、网络打印机地址等等。显然&#xff0c;在每台主机上都采用手工方式来配置这些参数是非常困难的、或是…

Springboot学习

Springboot扩展点之InitializingBean-CSDN博客

C/S医院检验LIS系统源码

一、检验科LIS系统概述&#xff1a; LIS系统即实验室信息管理系统。LIS系统能实现临床检验信息化&#xff0c;检验科信息管理自动化。其主要功能是将检验科的实验仪器传出的检验数据经数据分析后&#xff0c;自动生成打印报告&#xff0c;通过网络存储在数据库中&#xff…