windos搭建mysql2主多从高可用集群架构

windos搭建mysql2主多从高可用集群架构

有了mysql主从为什么还会出现mysql多主多从架构呢?

mysql 主主复制

mysql 主从复制是经常被提起的,但是主主复制却很少提起。主从复制一般是主库用来写入,多个从库用来读取。

主主复制则是两个库互为主从关系。比如现在是1主1从,主库负责写入,从库负责读取,但是当主库出现故障该怎么办呢?如果把另外的从库变成主库,那么就需要把原来的主库按照主从复制进行配置,这都是需要时间的。而如果先配置好互为主从关系,那么切换的速度就会更快。

如果现在是1主2从架构,那么当主库故障,需要选择一个从库变成主库,不仅需要在主库上面进行配置,还要再别的从库上进行配置,因为原来的从库的master是原来的主库,而现在要把master换成新的主库。这样会导致系统有一段时间的不可用,或者说不好用,毕竟你没把从库切换好,那么就算主库切过去了,写入没问题了,可是读取从库读不到数据啊。

这时候就可以运用主主复制的技术来维持mysql的高可用

开始搭建mysql主主复制

这里,我假设你已经搭建好了一个主从架构,最少是一主一从的架构,如果你还没有搭建好,那么参考我的这篇文章进行搭建mysql主从集群

现在假设你已经有了3306主库3307从库,那么我们现在要进行的就是把3307从库变成3306的主库。其实很简单,也就是把从库那一套过程在主库上跑一遍就好了。

我们查看3307从库的master状态。

show master status;

在这里插入图片描述

请记住上面的fileposition参数,要在3306库上用到。

我们现在进入3306库,运行下面的命令。

change master to 
master_host='127.0.0.1',  --master地址
master_port=3307,         --master端口
master_user='root',       --master登录用户名
master_password='pa88word', --master登录密码
master_log_file='mysql-bin.000009',  --要开始同步的binlog文件 上面的file参数
master_log_pos=154;                  --要开始同步的具体指针位置 上面的position参数

接下来启动3306库的slave线程。

start slave;

这个命令是什么呢,主要是启动从库的更新线程,从库有两个更新线程,一个io线程负责把主库的binlog写入从库的relay log。一个sql线程负责把relay log中的信息写入从库。

接下里看看从库的状态,执行下面的命令。

show slave status;

在这里插入图片描述

这里面主要看Slave_IO_RunningSlave_SQL_Running也就是上面说的两个线程是否在运行,如果是Yes,那么就ok了。

如果不是Yes可以退出重启一下mysql服务试试。

如果已经可以了,那么你就可以测试了。

首先修改3306库的数据,看3307库是否更新。如果数据更新了,接着测试修改3307库,看3306库的数据是否和3307库一致,如果一致,那么说明这两个库已经互为主从关系了,也就是完成了主主复制

现在肯定有疑问,如果互为主从,会不会发生数据循环更新呢?这个问题是不会的,因为两个库的server id不同,mysql会摒弃server_id相同的更新。

接下里完成了主主复制,那么就要开始搭建从库了。现在所有的从库以3306库作为主库。那么实现了下面的点:

  • 当3306库写入数据的时候,所有库数据一致
  • 当3307库写入数据的时候,所有库数据一致
  • 当3307库挂掉,3306库写入数据的时候,所有库数据一致
  • 当3306库挂掉,3307库写入数据的时候,所有库数据一致

当然了,第4点现在还没有实现,实现这个需要用到其他方法,借助一些工具来达到把所有从库的主库切换为3307库。这样才能实现。

其实这么看,2主和1主没啥区别。其实并不是。

主从复制和主主复制的区别

当处于主从的时候,主库宕机:

  • 主库宕机无法写入
  • 选取从库当新的主库
  • 切换其他从库的主库为新的主库

当处于主主的时候,主库宕机:

  • 主库宕机无法写入
  • 使用另外的主库当新的主库
  • 切换所有从库的主库为新的主库

这样看是一样的,但是呢,旧主库怎么办呢?

当主从的时候,旧主库因为不同步其他库的数据,所以和其他库数据不一致了,那么现在需要把旧主库设置为新主库的从库。

当主主的时候,旧主库因为是新主库的从库,所以旧主库数据没问题。

看到了吗,如果是主从,最终的结果还是变成了主主。那为什么不一开始就设置成主主呢???

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
db服务器连接mysql+redis高可用高性能框架干货1、使用c++语言,vs2019开发垮平台[windows和linux]连接MySql和redis框架。2、使用MySql持久化玩家数据,redis做玩家数据缓存层,redis不做数据持久化。mysql搭配redis工作效率非常高效,就好比男女搭配干活不累,没有redis,mysql也能独立很好的完成用户读写请求。有了redis,用户访问数据的效率更高,时间更短,快速的完成请求。3、讲解如何保持mysql和redis数据强一致性策略,并在代码里实现。每次启动redis,使用管道技术,从mysql批量导入活跃用户数据到redis中,并设置过期时间.4、教程使用线程池技术,每个线程拥有自己独立的数据,线程绑定类。每一个实例就包含一个线程每个线程数据里包含:mysql连接器、redis连接器、内存回收池、安全的串行队列、条件变量、互斥量保证线程内的数据安全。5、工作原理:没有请求时,各个工作线程处于休眠状态。有读写请求时,从线程池获取一个线程,添加读写请求,把数据推送到线程工作队列中。然后工作线程获取队列的数据,进行串行工作任务安排,进行mysql数据库读写操作,以及redis读写数据操作,当完成工作任务时,执行下一个工作任务,同时把处理结果推送到逻辑线程,把数据给用户。6、用户读数据策略:用户获取数据首先是先从redis查找数据,redis命中,返回数据给玩家,redis命中失败,mysql中查找数据,然后写入数据到redis中,返回数据给用户。7、用户写数据策略:用户先从redis中删除数据,然后写数据到mysql中,最后再把数据写入到redis中,保持数据一致性。8、教程是一个干货教程,不是新手教程,mysql基础语法讲解的少,redis有讲解基础系列。教程讲解的是如何搭建一个支持高并发,高性能的读写数据库框架,使用mysql+redis搭配的高可用、高性能框架。该套框架在多个项目使用过,也在棋牌类项目里面使用过。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值