前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【MySQL拾遗】mysql主从复制以及扩展

【MySQL拾遗】mysql主从复制以及扩展

作者头像
小小科
发布2018-05-04 16:23:37
7320
发布2018-05-04 16:23:37
举报
文章被收录于专栏:北京马哥教育北京马哥教育

一、MySQL简单复制相关概念:

    1. mysql复制的意义:Mysql复制是使得mysql完成高性能应用的前提
    1. mysql复制的机制:

SLAVE端线程:

  • IO thread: 向主服务请求二进制日志中的事件 当读取完毕后,IO线程将进行睡眠,当主服务器有新数据时,则主服务器唤醒从服务器的IO线程
  • SQL thread:从中继日志读取事件并在本地执行, 如果二进制日志开启式,同样会记录二进制日志,但为了节约空间和提高性能,需要关闭从服务器不能执行写操作,如果执行写操作则和主服务器不同步。

MASTER端:

  • binlog dump: 将IO thread请求的事件发送给对方; 默认为异步工作模式:主要主服务器自己写完,不管从服务器是否写完,就将返回

二、MySQL复制的常见构架

  1. 主从构架
  • 1)对于一从多主,只有新版本Mysql可以实现。 通常来说,一个从只能有一个主服务器,但是可以轮换。在某一时刻只能有一台主服务器。

MariaDB-10:支持多主模型,多源复制(multi-source replication)

  • 2)一主多从:执行写操作只能对主服务器进行。多从会增大主服务器压力。

此时需要一个调度器,来分离读写请求到主从服务器上。所谓读写分离

  • 3)读写分离:主从模型下,让前端分发器能识别读/写,并且按需调度至目标主机;

amoeba,mysql-proxy可以实现读写分离调度 读服务器进行负载均衡,使用一致性哈希算法,虚拟节点来分配访问。

2.双主构架

  • 1) 使用server_id来避免循环赋值
  • 2) 必须设定双方的自动增长属性,以避免冲突, 一个使用偶数一个实用技术 auto_increment_increment=1 定义自动增长字段起始值 auto_increment_offset=2 步长 auto_increment_increment=2 定义自动增长字段起始值 auto_increment_offset=2 步长 通过以上设定来解决冲突问题。
    • 第二台服务器
    • 第一台服务器
  • 3) 数据不一致; 在双主模型下某些时刻会导致数据不同步。
    • 第一个服务器锁定第一个字段改第二个字段
    • 第二台服务器锁定第二个字段改第一个字段

例如一个表包含: Age, Salary

代码语言:javascript
复制
如果一个人的年龄为31而工资2900,执行以下操作

A: update t1 set Salary=salary+1000 WHERE Age>=30;

B: update t1 set Age=Age-3 WHERE Salary < 3000;

会导致:

服务器A Salary 变为3900,年龄31

服务器B Salary 变为年龄28, 工资290
  • 4) 功能: 不能分摊写请求,两个服务器写压力一致。

三、复制构架扩展

  1. 主从服务器之间的差距
代码语言:javascript
复制
长时间运行后,主从可能不同步。 因为主服务器可以写并发,但是从服务器的同步只能是但进程。 

从服务器落后,有时候需要认为设计,来做备份。 

  1. 一主多从的环境:
  • 1) 一主多从的环境中,为了利用各从服务器的缓存能力。需要一些负载均衡算法,来绑定特定查询到特定服务器上,来使得缓存命中。这是这样做使得均衡效果被打破,使得有的服务器过于繁忙。
  • 2) 为了解决此问题,可以引入中心缓存服务器。
  • 3) 由于换从服务器工作在旁路模式下,所以是否缓存取决于客户端程序。 memcached:可以提供缓存能力+API 公共缓存服务器,性能比Mysql自身差

  1. 多级复制: 主指向一个从,从同时也作为其他从服务器的主
代码语言:javascript
复制
master –> slave/master —> slave

中间服务器需要开启二进制日志和中继日志 

多级复制可以降低主服务器产生mysqldump的压力,把压力分摊给下一集。 但是可能使得数据不能更好跟新。 

可以把中间服务器的读写引擎改为black hole,来降低本地压力,只生成二进制日志作为中继服务器(relay server),然后把二进制日志发送给下游服务器

  1. 模拟一从多主模型:
代码语言:javascript
复制
根据时间,来却换不同的主。 

通常用于在不同服务器之间做数据收集。 

  1. 环状模型:
代码语言:javascript
复制
每台服务器都是下一台服务器的主服务器同时也是上一台服务器的从服务器,使得每台服务器都是主从,形成传递环。

每台服务器的修改都会同步到环上任何一台服务器中。 

server_id 不能相同。 

  1. 常见mysql构架
  • 1)一主一从,并且读取分离
  • 2)一主多从,主负责读,从负责写
  • 3)一主多从外加一个冷备服务器, 只用于备份。 每一段时间关掉进行备份。
  • 4)多主模型: 通过心跳信息探测主服务器的健康状态,如果一个主挂掉,马上切换另一个主

潜在问题: 第一台服务器上未提交的事务,切换时将被回滚。

GTID(GLOBAL TRANSACTION id): 保证在特定服务器上的事务是完整的,如果执行不成功就回滚。

7.高级应用架构:

代码语言:javascript
复制
读写分离+负载均衡: 读直到从服务器上面读,写只在主服务器上面写。 需要在读写分离器之前加memocached

amoeba, mysql proxy

  1. 异地同步: 主要避免自然灾害
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 马哥Linux运维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、MySQL复制的常见构架
  • 三、复制构架扩展
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档