一、双主双从架构介绍

  在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依然可读可写,所以高可用也没问题

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

  

MySQL运维16-双主双从读写分离的更多相关文章

  1. Mysql + keepalived 实现双主热备读写分离【转】

    Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论   架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...

  2. Mysql双主加Keepalived+读写分离

    一.MySQL于keepalived简介** 前言: 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要 ...

  3. mycat 1.6.6.1安装以及配置docker 安装mysql 5.7.24 双主多从读写分离主主切换

    mycat和mysql的高可用参考如下两个图 简介:应用程序仅需要连接HAproxy或者mycat,后端服务器的读写分离由mycat进行控制,后端服务器数据的同步由MySQL主从同步进行控制. 服务器 ...

  4. MySQL自动化安装(双主多从读写分离)

    shell #!/bin/bash # Create by # version 1.0 # // # # check out lockfile whether or not exist IsInput ...

  5. MySQL集群系列2:通过keepalived实现双主集群读写分离

    在上一节基础上,通过添加keepalived实现读写分离. 首先关闭防火墙 安装keepalived keepalived 2台机器都要安装 rpm .el6.x86_64/ 注意上面要替换成你的内核 ...

  6. mycat结合双主复制实现读写分离模式

    简介:应用程序仅需要连接mycat,后端服务器的读写分离由mycat进行控制,后端服务器数据的同步由MySQL主从同步进行控制. 本次实验环境架构图 服务器主机规划 主机名 IP  功能 备注 lin ...

  7. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变

    [Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...

  8. Mysql双主双从高可用集群的搭建且与MyCat进行整合

    1.概述 老话说的好:瞻前顾后.患得患失只会让我们失败,下定决心,干就完了. 言归正传,之前我们聊了Mysql的一主一从读写分离集群的搭建,虽然一主一从或一主多从集群解决了并发读的问题,但由于主节点只 ...

  9. 高可用Mysql架构_Mycat集群部署(HAProxy + 两台Mycat+Mysql双主双从)

    既然大家都知道了Mysql分布式在大型网站架构中的作用,在这里就不再阐述.本片博客文章是基于我曾经搭建过的一个Mysql集群基础上实现的,实现过双主热备.读写分离.分库分表. 博客链接:http:// ...

  10. RocketMQ学习笔记(16)----RocketMQ搭建双主双从(异步复制)集群

    1. 修改RocketMQ默认启动端口 由于只有两台机器,部署双主双从需要四个节点,所以只能修改rocketmq的默认启动端口,从官网下载rocketmq的source文件,解压后使用idea打开,全 ...

随机推荐

  1. SQL select关联表查询 统计另一个表合计

    db_order 是记录订单的,  一个订单一条记录.(oid, 运费, 实收金额, 产品KEY.......) db_soid  是记录出售商品的 (id, 商品名称, 售价, 数量, 成本, 标识 ...

  2. IOS苹果应用IPA重签名软件手机版(苹果重签名,企业签名,安卓苹果平台,时间控制)

    软件简介 IOS苹果应用IPA重签名软件手机版,可以在安卓或者苹果手机上,苹果应用IPA文件重新签名,无需MAC苹果电脑和配置XCODE开发环境,便可以直接对IPA文件进行签名,签名在本地进行,不消耗 ...

  3. PivotGridControl自定义行数据的统计公式

    我们在使用PivotGridControl进行数据统计的时候,用时候需要在不同的行使用不同的汇总公式的情况,本文就是为了说明怎么实现此功能,如下图说明 数据源: 注意:此时数据列指定的SummaryT ...

  4. MySQL实战实战系列 01 基础架构:一条SQL查询语句是如何执行的?

    这是专栏的第一篇文章,我想来跟你聊聊 MySQL 的基础架构.我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题.同样,对于 MySQL 的学习也是这样. ...

  5. 制作一个内部的 zabbix-agent 快速部署脚本

    下载官方的基础 agent 部署包 官方地址:点击到达 curl -O https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.36/zabbix_ ...

  6. Prometheus + Grafana 搭建监控系统

    前言 本文主要记录下如何使用 Prometheus + Grafana 搭建对各种服务的性能监控,涵盖对 Prometheus.Grafana 的基本介绍,以及如何使用二者进行对 Linux.MySQ ...

  7. zxy 简单 dp 大讲堂

    讲课讲得非常清楚啊,我绝赞膜拜.节奏可以,思路清晰,解法自然,为讲师点赞. 第一个题是 loj3282 / joisc2020 - Treatment Project.原问题由 \(\left(S, ...

  8. TCP连接的关键之谜:揭秘三次握手的必要性

    TCP 连接建立 当我们浏览网页.发送电子邮件或者进行在线游戏时,我们常常不会想到背后复杂的网络连接过程.然而,正是这些看似不起眼的步骤,确保了我们与服务器之间的稳定通信.其中最重要的步骤之一就是TC ...

  9. 使用mtrace追踪JVM堆外内存泄露

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明. 简介 在上篇文章中,介绍了使用tcmalloc或jemalloc定位native内存泄露的方法,但使用这个方法相 ...

  10. 2023 ICPC 网络赛 II

    开场顺着读了 AC 不会,B 是 KDT 优化建图板子,让 zsy 确认了一下并制止他现在做.把 D 转化转化成了经典问题·,当时以为是网络流,所以 zsy 签完 M 就上去写了,写一半发现假了,问了 ...