Mysql之主从模式、读写分离概念

MySQL主从架构复制:

在主server上每次进行可能引起数据变化的操作都要先记录到二进制文件中,并将数据同步到主server的磁盘上,与此同时还要通过端口(3306)将二进制日志发送到从server上,在从server上,从server会先将接受的二进制日志保存为中继日志(relay log),在从中继日志中进行读取,重新执行一遍操作,进行数据的复制

但一般来说,如果主server有多个cpu,当数据量变化很频繁时,可能会在每个cpu上都运行一个事务,而注server只能一个个的记录入二进制日志,还要发送给从server,而从server还要先记录到中继日志在进行读取复制数据,所以主从复制是异步进行的,从server多多少少会落后主server

除了异步模式外,MySQL主从复制和Drbd一样还存在同步模式和半同步模式

同步模式:主server发一个记录,从收到后响应再发第二个

半同步:一主多从中,从server会启动多个线程向每个从server发送记录,只要有一个从server收到后响应,就发第二个

注:MySQL在5.5之前是不支持同步的,在5.5后Google为mysql打了一个补丁后开始支持

对于从server来说是不应允许进行任何写操作的,否则会导致主从数据不一致

尽管主从同步不一致,但一般来说从server也不会落后太多,当要进行数据恢复时,先停止主sever,再对数据进行恢复;最后利用主server上的二进制日志进行即时点还原便可

但有时由于主server上执行了Flush logs或者执行了重启,而在从server上没有执行;这样往往导致主从server上的二进制日志个数不一致(如主上执行了100个语句产生了10个二进制日志,而在从上很可能只有一个二进制日志,)所以进行即时点还原时不能盲目对应

>show slave status;

显示此刻事件在中继日志中的位置,和当前从主server上复制的二进制日志文件名是什么,事件是什么

从server上需要二进制日志吗?

MySQL也支持多级复制:主——从1——从2

此时从1必须复制主的二进制日志,所以有中继日志;且从1还要负责将二进制日志发送给从2,所以从1必须有二进制日志(中继日志不能直接发送),而对从2来说,它只要有中继日志便可,不需要再读取中继日志进行数据复制时记录二进制日志

主从复制的作用:

  1. 实现数据的备份
  2. 实现远程容灾(主从之间往往相隔较远)
  3. 进行高可用(如主server突然坏了,可以让从server同步完自己落后于主server的数据后,立马顶上去,变成主server,并让支持写入功能)
  4. 分担负载(主server负责写入操作,让从server负责备份和读操作;或者让主负责读和写,从负责复制和读;一般来说读要多于写)

MySQL读写分离

做MySQL的读写分离,在主从前端必须有一个MySQL代理,此代理必须要能够理解前端用户的SQL语句,代理会根据用户的请求操作将写入的请求发给主,将读的操作请求发给从;甚至还可以加多个从server,在从server前端加一个Director(调度器)将从server做成一个LVS集群等,根据一定的算法负载分担到每个从server上,加快数据读取的性能

要实现MySQL的读写分离,可以用到的代理有:

  1. mysql-proxy
  2. amoeb (阿里巴巴开发的)
  3. cobar(阿里巴巴开发的)cobar是一个拆分工具

当为一主多从模型时,主server要为每个从server启动一个线程,进行二进制日志的发送,且主server还要负责数据的读/写;这样会造成主的压力太大,此时可以采取下面的模式:

让主负责写入,从1即不负责写也不负责读,只负责将主上的二进制日志复制为本地中继日志,然后读取复制数据产生二进制日志,再开启三个个线程往从2、从3、从4发送二进制日志便可

但是对从1来说它只需产生二进制日志,每必要复制数据啊(从1即不负责读也不负责写);但不复制数据产生写操作产生不了二进制日志,那给从2、3、4发啥?

此时从2可以使用Blackhole存储引擎,Blackhole类似于/dev/null当从1进行数据复制并写入磁盘时,Blackhole会直接将数据丢弃,然后响应一个数据已经记录;这样既不会产生额外的IO,也能产生二进制日志

当一个服务器压力过大时,一般有下面两种扩展:

scale out:加多台服务器,进行分担

scale on: 换用性能更好的服务器

而对MySQL数据库来说出还可以将一个大库拆分为几个小库(垂直拆分),让每个小库在不同的server上运行;并且对于数据来说,数据是有热区的,如果一个表中的数据被频繁使用导致服务器压力过大,还可以对这张表进行拆分(水平拆分)

但是无论是垂直拆分还是水平拆分都有一定的风险,所以能不拆分就别拆分

时间: 2024-10-05 23:30:13

Mysql之主从模式、读写分离概念的相关文章

48.MYSQL的主从与读写分离

linux企业级知识点总结 Mysql主从复制与读写分离原理图 Mysql的主从复制:从服务器在主服务器上自动同步数据. Mysql的读写分离:通过amoeba服务器控制用户读数据在从服务器上进行,写数据从主服务器上进行,这样可以做到负载均衡. 搭建mysql主从复制: v 建立时间同步环境 #yum -y install ntp #vim /etc/ntp.conf 修改相关内容: Server  127.127.1.0 Fudge   127.127.1.0  stratum  8 #ser

mysql集群:主从服务器读写分离

mysql集群架构方式很多,根据不同的需求做不一样的架构,简单一点的就是mysql的replication,也就是Mysql的复制功能,模式有:master-slaves,master-slaves-slaves,master-master-slaves等可以有多个分层,那么现在我所要说的是master-slaves的模式(其他的模式原理基本都一样),然后再通过mysql官方提供的Mysql-proxy实现读写分离,达到的效果. 环境: 主机::192.168.1.109,slave1:192.

Mysql主从配置+读写分离(转)

   MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 注:安装前须查看是否已经安装了如下依赖包,如果没有请安装. apt-get -y install gcc g++ libncurses5-dev ncurses-devel openssl 一.主库安装及配置 1.源码安装cmake # tar xf cmake-3.0.0.tar.gz # cd cmake-3.0.0 # .

Mysql主从配置+读写分离

Mysql主从配置+读写分离     MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 注:安装前须查看是否已经安装了如下依赖包,如果没有请安装. apt-get -y install gcc g++ libncurses5-dev ncurses-devel openssl   一.主库安装及配置 1.源码安装cmake # tar xf cmake-3.0.0.tar.gz #

MySQL5.6基于GTID同步复制,与如何实现MySQL负载均衡、读写分离。

MySQL想必大家都不陌生,之前文章也有介绍同步复制与半同步复制,今天先来了解下什么是GTID. GTID(global transaction ID)全局事务ID,是由服务器的UUID+一段随机数事务ID. 特性:从服务器从主服务器复制过来的事务,GTID不变,也就是说一个事务在全局复制架构中的ID不变. 有什么用: 在MySQL集群中,当Master故障时,需要从Slave中挑选一个提升为Master可以基于GTID对比其他Slave来保证数据的一致性. MySQL主从同步如何配置数据过滤

mycat基础实验之主从配置读写分离和分表

mycat实验之主从配置读写分离和分表 架构图: 1.实验环境: vmware虚机3个   (虚机太少了,电脑有点吃力,3个虚机只能达到基本的测试) 系统centos7     (实验是关闭防火墙和selinux做的) mysql版本5.7 mycat版本1.6 虚机名字和ip: mysql1 192.168.211.138 mysql2 192.168.211.139 mysql3 192.168.211.142 mycat安装在mysql1(192.168.211.138) 这台主机须能够解

Mysql高级集群-读写分离Amoeba

一.环境介绍Master-IP:10.0.0.201Slave- IP:10.0.0.202Amobea-IP:10.0.0.203 二.安装JDK# mkdir /Amoeba# tar -xvf jdk-7u40-linux-x64.tar.gz -C /Amoeba/# vim /etc/profileJAVA_HOME=/Amoeba/jdk1.7.0_40export JAVA_HOME PATH=$JAVA_HOME/bin:$PATHexport PATH CLASSPATH=.:

MySQL Proxy 实现MySQLDB 读写分离

一.简述 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载平衡,故障.查询分析,查询过滤和修改等等. MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负 载平衡.对于应用来说,MySQL Proxy是完全透明的,应用

mysql基于amoeba配置读写分离

                     Mysql高级集群-读写分离Amoeba                          mysql在配置好主从复制之后,已经达到双机热备和容灾的效果.此博客是建立在主从复制的前提上 ,mysql基于amoeba的配置读写分离在我看来:就是为了达到数据库高可用性,安全性以及高并发,达到 负载均衡的效果.说简单点,我个人觉得意思就是让主服务器轻松点,不易挂掉.还有就是充分利用从服务器.  本人水平有限,望各位大神多多指点指点.我非常乐意听取意见. 此版本

搭建mysql的主从复制和读写分离

搭建mysql的主从复制和读写分离   +--------+                          (write)        +--------+                    | client |                 +---------------------+| master |     +--------+|                   |                        +--------+|           |