贴一些比较老的内容,文章是新写的,技术可能都是大家熟悉的,给入门的兄弟们参考。高手轻拍
原文请见:http://www.muduo.net/index.php/u ... space-itemid-318728

二、
多数据中心的高可用结构【环状星型数据库架构】在介绍该结构之前,我们首先了解一下mysql复制的有关内容。在《highperformance mysql》的第一版中,作者介绍了这样的一种数据库结构:

                              
三个mysql的daemon均为上家的slave,均为下家的master,环形复制,如此,则生生不息。

每个环路上的master分别有自己的slave,解决mysql的效率和可用性的问题。

遗憾的是,Jeremy的想象力够丰富,但是当时mysql的最新版本为 4.0,并不支持如此复杂的mysql复制结构,缺少关键环节的解决方案,有哪些关键环节呢?

i.
Auto_increment 字段冲突问题

ii.
如上图,4(mysql服务器3的slave)从3(mysql服务器4的master)复制数据,只能复制应用程序在3上写入的数据(即3产生了binlog),对于3(此时作为mysql服务器2 的slave)在2(作为mysql服务器3的master)那里复制得来的数据,无法复制到服务器4上的。

iii.
环形复制本地产生数据重复写入的问题

就是上面三个当时无法解决的问题,Jeremy在《high performance mysql》中的整章内容几乎变成想像。

我相信如今的mysql 5的设计一定是吸收了Jeremy的构想的。

(一)
架构图
结合《单数据中心的mysql高可用架构》和mysql5的特性,我们设计出了如下的多数据中心mysql高可用结构,即环状星型结构。

(二)
系统结构说明
如上图所示,假设A、B、C、D 4个数据中心,每个数据中心都拥有同样的应用程序(不限于web服务),各个数据中心的应用程序按照《单数据中心的mysql高可用架构》中提到的方案直接读写本地的数据库数据。
此时,在确保单数据中心高可用的基础上,我们将结构简化,简化为如下结构:

A、B、C、D是一个十分简洁的mysql复制环,满足这个复制结构正常运行需要在如下方面进行配置:

i.
解决auto_increment字段数据冲突的问题,通过http://dev.mysql.com/doc/refman/5.1/en/replication-options-master.html#sysvar_auto_increment_increment

ii.
当同一台机器作为slave且作为master的情况下,解决复制的内容能够被传送到下一台slave

iii.
解决某一数据从A复制到B,从B复制到C,从C复制到D,但是不会从D复制到A

下面将详细的介绍如何解决上面的问题:

i.
AUTO_INCREMENT字段冲突的问题

auto_increment_increment 和 auto_increment_offset 这两个系统变量是为了满足masterßàmaster 这种mysql复制模式产生的,这两个变量能够控制AUTO_INCREMENT 列的行为,避免 AUTO_INCREMENT 列的value产生冲突。关于这部分的详细内容,建议参考:http://dev.mysql.com/doc/refman/5.1/en/replication-options-master.html#sysvar_auto_increment_increment

ii.
--log-slave-updates

一般情况下,slave服务器不需要(也不会)将它从master服务器那里接收到的“更新”记录到binlog里面,但是这个系统变量能够让mysql的slave服务器记录这些“更新”到自己的binlog。在使用这个变量的情况下,需要首先配置mysql的“--log-bin”变量。

iii.
--replicate-same-server-id

默认情况下,这个值被置成0。以避免在环形复制结构中出现的无限循环复制。

Ok,在普通复制结构的基础上,经过上面的三点额外配置,mysql环形复制即可以正常工作。如上图的A、B、C、D4台mysql环形复制结构,可以在任意一个mysqld服务中插入、更新数据,而在任一mysqld服务器中,可以查到所有的数据。当然,对于满足环状星型高可用mysql数据库架构来讲,还需要进一步解决:

i.
任一mysql集群(如A)的master服务的高可用(通过heart-beat实现虚拟IP地址的漂移,通过漂移IP实现)

ii.
数据库各组之间间数据连通性及可靠性问题【针对业务要求,指定不同的标准】

a)
通过 UDT网关进行传输层代理

b)
通过专线进行解决

iii.
解决mysql binlog传输的带宽问题,该问题考虑下面两种解决方法:

a)
通过--slave_compressed_protocol ,在mysql 主、从服务器之间使用协议压缩,降低带宽要求:

1.
slave_compressed_protocol=1

2.
SET @@global.slave_compressed_protocol=1;

b)
通过开发mysql 差异化复制协议(如互动社区的binlog项目)

Mysql的环状星型多数据中心结构能够解决如下的问题

i.
解决由于跨网操作数据反应慢的问题,数据更新在本地IDC进行,确保动态程序快速、及时。

ii.
解决数据中心的冗余问题,如果某一个IDC的数据中心宕到,可随时切换到另外的数据中心。

当然,这种结构也不是完美的,在解决了一些问题的同时,也会带来一些其他的问题:

i.
数据同步延迟,跨IDC的数据库同步相比同网的mysql复制,网络环境更为复杂,由于binlog的传输问题,容易带来更大的数据延迟

ii.
稳定性,需要强健的监控和较为复杂的自动化报警、故障处理措施

转载于:https://www.cnblogs.com/seasonzone/p/4133558.html

多数据中心的高可用结构【环状星型数据库架构】相关推荐

  1. 数据中心网络高可用架构

    文章不错,转来了 http://www.h3c.com.cn/Solution/Operational/DataCenter/Solutions/201003/802841_30004_0.htm 相 ...

  2. 偏移出来的数据不准_独家解读!京东高可用分布式流数据存储的架构设计

    作者 | 李玥 编辑 | Vincent AI 前线导读:每天,超过千亿交易相关的数据在京东数千个系统中高速流转,确保数据的高可靠.高可用.一致性对京东的消息中间件系统是一项艰巨的技术挑战.为高性能. ...

  3. 独家解读!京东高可用分布式流数据存储的架构设计

    作者 | 李玥 编辑 | Vincent 每天,超过千亿交易相关的数据在京东数千个系统中高速流转,确保数据的高可靠.高可用.一致性对京东的消息中间件系统是一项艰巨的技术挑战.为高性能.高可用.高可靠的 ...

  4. 《构建高可用VMware vSphere 5.X虚拟化架构》——第2章 构建高可用vCenter Server 2.1vCenter Server版本以及运行环境的选择...

    本节书摘来自异步社区<构建高可用VMware vSphere 5.X虚拟化架构>一书中的第2章,第2.1节,作者:何坤源著,更多章节内容可以访问云栖社区"异步社区"公众 ...

  5. springboot+Nacos注册中心+sentinel高可用流量框架

    1.下载阿里巴巴Nacos注册中心,下载地址https://github.com/alibaba/nacos/releases,我这里下载的是windows版本 2.下载sentinel高可用流量框架 ...

  6. 运维企业专题(11)RHCS高可用集群下MySql数据库与共享磁盘(单点写入、多点写入)的设置

    实验环境 主机名 IP 服务 server1 172.25.6.1 ricci,luci, iscsi,mysql-server server2 172.25.6.2 ricci,iscsi,mysq ...

  7. 金仓数据库KingbaseES高可用概述(高可用性需求分析与架构确定)

    本节将提供一个可以有效评估高可用性需求进而选择合适架构的步骤,步骤包括: 3.1. 调研高可用性需求 ¶ 3.2. 确定高可用性需求的方法 ¶ 3.2.1. 业务影响分析 ¶ 3.2.2. 停机代价  ...

  8. mysql性能调优 高可用_MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案...

    第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...

  9. MySQL 高可用:mysql+mycat实现数据库分片(分库分表)

    什么是MYCAT: 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个 ...

最新文章

  1. npm ERR! missing script: dev 解决方案
  2. 高斯混合模型(Gaussian Mixture Model)
  3. pandas nan inf
  4. Redis系统性介绍
  5. 【渝粤教育】国家开放大学2018年秋季 0054-22T合同法 参考试题
  6. springboot mybatis 热加载mapper.xml文件(最简单)
  7. android中拖动文字实现功能,Android:图片中叠加文字,支持拖动改变位置
  8. POJ-Prime Gap 素数筛选+二分查找
  9. Teamcenter - Index search 找不到相关物件的解决方法
  10. Linux Mint,Ubuntu 18 ,Deepin15.7 安装mysql 没有提示输入密码,修改root用户密码过程...
  11. 用JPEXS软件实现swf反编译-逆向调试方法
  12. Java设计模式之模板方法模式
  13. 开源项目推荐:基于Qt开发的远程桌面监控和文件传输软件Aspia
  14. ectouch微信登录提示此次操作失败请返回重试原因
  15. 数据分析 一文搞懂什么是RFM模型
  16. MCU固件升级的几种Flash划分方式
  17. python图片压缩算法_Python实现奇异值分解(SVD)压缩图片
  18. 总结 : 安卓开发大作业废话集合
  19. 1146 mysql_MySQL错误处理--1146错误
  20. Redmi K20 Pro如何编译内核

热门文章

  1. 变更AD计算机名称和IP地址
  2. Linux系列-Red Hat5平台下的LAMP网站服务搭建(四)
  3. 在Red Hat Linux中自动运行程序
  4. 如何根据字典中值的大小,对字典中的项排序
  5. python:爬虫初体验
  6. redis学习之redis基本数据类型以及Jedis
  7. MIDlet 移动开发
  8. Object_Type列表
  9. [Ubuntu] 如何在Ubuntu11.04将PHP5.3降级到PHP5.2
  10. CCNA课堂练习一:路由器链路备份功能