文档章节

Mysql高可用架构

o
 osc_2axit9df
发布于 07/05 08:25
字数 1828
阅读 21
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

低读低写并发、低数据量方案

方案一:双机高可用方案

1.数据库架构图

 

2.特点

    一台机器A作为读写库,另一台B作为备份库;A库故障后B库作为读写库;A库恢复后A作为备库。

3.开发说明

此种情况下,数据源配置中的数据库IP地址,可采用虚拟的IP地址。虚拟IP地址由两台数据库机器上的keepalive配置,并互相检测心跳。当其中一台故障后,虚拟IP地址会自动漂移到另外一台正常的库上。

数据库的主备配置、故障排除和数据补全,需要DBA和运维人员来维护。而程序代码或配置并不需要修改。

具体配置可参考资料:

http://lizhenliang.blog.51cto.com/7876557/1362313

http://database.51cto.com/art/201012/237204.htm

http://gaoke.iteye.com/blog/2283890

4.适应场景

读和写都不高的场景(单表数据低于500万),双机高可用。

5.优缺点

优点是一个机器故障了可以自动切换;缺点是只有一个库在工作,读写并未分离,并发有限制。

方案二:主从结构方案

1.数据库架构图

 

2.特点

    一台机器A作为写库,另一台B作为读库;A库故障后B库充当读写,A修复后,B库为写库,A库为读库。

 

3.开发说明

    这种方案的实现,要借助数据库中间件Mycat来实现,Mycat的datahost配置如下(注意balance和writetype的设置)

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<!--主,用于写-->

<writeHost host="hostM1" url="192.168.1.135:3306" user="root" password="123" />

<!--主2,用于读,hostM1 down了,自动切换为主,读写都可以-->

<writeHost host="hostM2" url="192.168.1.136:3306" user="root" password="123" />

</dataHost>

项目开发中,要配置Mycat数据源,并实现对Mycat数据源的数据操作。数据库A和数据库B应该互为主从。数据库的主主配置、故障排除和数据补全,依然需要DBA和运维人员来维护。

4.适应场景

读和写都不是非常高的场景(单表数据低于1000万),高可用。比方案一并发要高很多。

5.优缺点

优点是一个机器故障了可以自动切换;读写分离,并发有了很大的提升。缺点是引入了一个Mycat节点,若要高可用需要引入至少两个Mycat。常规的解决方案是引入haproxy和keepalive对mycat做集群。

 

高读低写并发、低数据量方案

方案三:一主多从+读写分离

1.数据库架构图

 

 

2.特点

一个主写库A多个从库,当主库A故障时,提升从库B为主写库,同时修改C、D库为B的从库。A故障修复后,作为B的从库。

3.开发说明

项目开发中需要使用Mycat作为中间件,来配置主库和从库,核心配置如下:

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<!--主A,用于写-->

<writeHost host="hostM1" url="192.168.1.135:3306" user="root" password="123" />

<!—从B,用于读,hostM1 down了,自动切换为主-->

<writeHost host="hostM2" url="192.168.1.136:3306" user="root" password="123456" />

<!—从C,用于读-->

<writeHost host="hostM3" url="192.168.1.137:3306" user="root" password="123" />

<!—从D,用于读-->

<writeHost host="hostM4" url="192.168.1.138:3306" user="root" password="123" />

</dataHost>

 

主库A故障后,Mycat会自动把从B提升为写库。而C、D从库,则可以通过MHA等工具,自动修改其主库为B。进而实现自动切换的目地。

MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

MHA相关知识请参考:

http://www.cnblogs.com/gomysql/p/3675429.html

 

4.适应场景

    该架构适合写并发不大、但是读并发大的很的场景

5.优缺点

由于配置了多个读节点,读并发的能力有了质的提高。理论上来说,读节点可以多个,可以负载很高级别的读并发。当然,Mycat依然需要设计高可用方案。

 

高读写并发、低数据量方案

方案四:MariaDB Galera Cluster方案

1.数据库架构图

 

2.特点

    多个数据库,在负载均衡作用下,可同时进行写入和读取操作;各个库之间以Galera Replication的方法进行数据同步,即每个库理论上来说,数据是完全一致的。

3.开发说明

   数据库读写时,只需要修改数据库读写IP为keepalive的虚拟节点即可;数据库配置方面相对比较复杂,需要引入haproxy、keepalive、Galaera等各种插件和配置。

4.适用场景

    该方案适合读写并发较大、数据量不是非常大的场景。

5.优缺点点

   优点:1)可以在任意节点上进行读2)自动剔除故障节点3)自动加入新节点4)真正并行的复制,基于行级5)客户端连接跟操作单数据库的体验一致。6) 同步复制,因此具有较高的性能和可靠性。

    缺点:1) DELETE操作不支持没有主键的表,没有主键的表在不同的节点顺序将不同2)处理事务时,会运行一个协调认证程序来保证事务的全局一致性,若该事务长时间运行,就会锁死节点中所有的相关表,导致插入卡住(这种情况和单表插入是一样的)。2)整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。3)如果DDL语句有问题将破坏集群,建议禁用。4) Mysql数据库5.7.6及之后的版本才支持此种方案。

 

高读写并发、高数据量方案

方案五 数据库中间件

1. 数据库架构图

 

 

2.特点

采用Mycat进行分片存储,可以解决写负载均衡和数据量过大问题;每个分片配置多个读从库,可以减少单个库的读压力。

3.开发说明

   此种情况,需要配置Haproxy、keepalive和mycat集群,每个分片上又需要配置一主多从的集群。每个分片上的完整配置,具体请参考方案三,可以简单地把方案三理解为一个分片结构。因此,配置和维护量都比较大。

 

4.适用场景

  读写并发都很大并且数据量非常大的场景。

5.优缺点

   优点:终极的解决高并发高数据量的方法。

   缺点:配置和维护都比较麻烦,需要的软硬件设备资源大。

o
粉丝 0
博文 76
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
数据库代码辅助工具--MaoCaiJun.Database

MaoCaiJun.DataBase 是一个用于 Microsoft Visual Studio 的数据库代码生成组件。它是基于 xml 文件的代码创建工具,支持sql2000,sql2005,sql2008,access, SQLite MaoCaiJun.Database 数据库...

mccj
2013/02/06
2.2K
1
MySQL全文搜索引擎--mysqlcft

MySQL在高并发连接、数据库记录数较多的情况下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式不仅效率差,而且以通配符%开头作查询时,使用不到索引,需要全表扫描,对数据库的压力也很...

张宴
2012/11/29
1.6W
2
统一数据库访问接口--edbc

edbc 是 Emacs-Lisp Database Connectivity 的缩 写 ,是从 Emacs-CGI 项目中独立出来的一个子项目,为 Emacs Lisp 访问数据库提供简洁、统一的接口! 在其他语言(比如Java)中访问数据库,...

redraiment
2012/12/26
1.5K
0
博客引擎--JellyJolly

JellyJolly是一个以Java和MySQL为平台的自由开源的博客引擎,可以部署在Redhat的Openshift云平台。 目前处于1.0.BETA1版本,有许多地方需要完善:)。 1、演示地址: http://jellyjolly-predat...

zetaplusae
2012/12/29
1.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

Java中使用OpenSSL生成的RSA公私钥进行数据加解密

当前使用的是Linux系统,已经按装使用OpenSSL软件包, 一、使用OpenSSL来生成私钥和公钥 1、执行命令openssl version -a 验证机器上已经安装openssl openssl version -a 运行结果: 2、生成...

osc_1psr53ow
7分钟前
0
0
计算机毕业设计之springboot+vue.js点餐小程序 点餐系统

功能 后台: 1. 超级管理员(具有该系统所有权限)登录 查看系统所有管理员 操作:可新添加管理员并分配系统已有角色; 可对已有管理员进行信息编辑; 可对除超管外的其他管理员账号禁用/启用...

osc_x4ot1joy
8分钟前
0
0
MATLAB数学建模

链接:https://pan.baidu.com/s/1WA2ltwyMZuKeo7OC9XAIvw 提取码:tmy2 记录matlab参加建模比赛时所用的书籍,避免忘记 链接:https://pan.baidu.com/s/1WA2ltwyMZuKeo7OC9XAIvw 提取码:tmy...

osc_oa6qrgun
9分钟前
0
0
Python中可以使用静态类变量吗? - Are static class variables possible in Python?

问题: Is it possible to have static class variables or methods in Python? Python中是否可以有静态类变量或方法? What syntax is required to do this? 为此需要什么语法? 解决方案:...

技术盛宴
40分钟前
17
0
如何在Android中以像素为单位获取屏幕尺寸 - How to get screen dimensions as pixels in Android

问题: I created some custom elements, and I want to programmatically place them to the upper right corner ( n pixels from the top edge and m pixels from the right edge). 我创建......

javail
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部