我们都知道,相较于传统的数据中心,Pulic cloud也有劣势,比如说数据库的HA,很多熟悉公有云平台的读者都知道,因为出于安全性性考虑以及一些技术条件的限制,很多本地数据中心的mysql HA方法在云上并不适用,笔者大致地归纳了一下,主要有如下这三个瓶颈造成:

1.不能共享存储的问题

2.不支持组播问题

3.VIP的问题

关于第一个问题,很多用过Azure的读者会不禁要问,不对啊?我记得Azure是提供Azure file service服务的啊,确实,但是玩过的人都知道file service只能解决部分问题,而且有性能的瓶颈,所以在本次方案中,没有选用该方法;

关于第二个问题,我们都知道,公有云平台都是禁止组播与广播的,然而集群软件是需要组播进行同步的,这也就是为什么Oracle在云平台做不了RAC,就是这个原因,不过据说有方式可以实现,就是组播一出来就改为单播的方式去响应,有兴趣的读者可以去百度看看;

关于第三个问题,VIP在cluster的解决方案中,可以解决前端应用连接字符串的问题,但是云上是不支持组播与广播的的,所以ARP类似的协议都不能支持,造成传统的VIP模式不再适用

基于以上因素的考量,我们选择Azure ILB+DRBD+Corosync+pacemaker来实现HA,以此来解决以上部署中遇到的问题。

好,废话不多说,先贴一张架构图。

web服务器通过mysql client访问ILB,ILB转发3306端口到后台的mysql

从上面的架构图看以看出来

接下来我们来分析各个软件与机制的功能与作用

1:Azure ILB :WEB前端可以通过MySQL客户端访问Azure ILB的固定IP地址10.1.1.200端口3306,ILB会把mysql的相应的请求转发给相应mysql服务器,但是,无论mysql的服务迁移到哪一台服务器上,前端不需要在应用层面做任何改动,也就是说不需要改动然后连接字符串,用这种方式实现on-premise环境中VIP相同的效果。

2.DRBD:DRBD相当于网络级别的RAID1,在DRBD主节点上写入任何数据,都会通过网络马上同步到副节点。通过DRBD的公牛,可以实现两边数据的同步,这样就类似于共享存储的功能。

3.Corosync:其实所谓的Corosync和Pacemaker是Heartbeat的升级版。Corosync进行底层Message的通信,Pacemaker进行集群的选举和服务的编排。传统的Corosync是采用Multicast实现多台Cluster服务器的message通讯。但在新版本中支持Full Mesh的UDP Unicast,解决Azure不支持组播的问题。

4.Pacemaker:Pacemaker是整个集群的大脑,它决定做什么,以及何时做。这个集群的服务通过一个叫CRM的软件进行对Pacemaker的编排。在本方案中,Pacemaker需要完成如下几个工作:

第一,先要选择DRBD的master节点

第二,挂载DRBD的分区到指定目录

第三,启动MySQL的服务

第四,保证DRBD,File,MySQL三个服务在同一台master服务器上,这一点非常重要

第五,保证DRBD,File,MySQL三个服务按顺序启动

一般正常情况下,Pacemaker把编排好的各种服务在master上顺序启动时,在master上mysql写入任何数据,都会通过DRBD更新到slave服务器的DRBD secondary磁盘上,由于slave服务器上的mysql服务部位启动,所以它的3306端口不对外提供服务,这样ILB就会认为slave服务器没有对外提供服务,就不会将其加入到负载均衡集中,因此ILB只会把mysql的请求全部发给master服务器,如下图所示。

但是当主库出现问题的时候,这里就是10.1.1.6出现故障或需要执行重启动作的时候,这个时候Pacemaker和Corosync会把master迁移到10.1.1.7上,Pacemaker会在10.1.1.7启动之前上编排各种服务,mysql服务会在这台服务器上启动,这时3306端口会对外提供服务,这时候ILB会把10.1.1.7加入到负载均衡集中,这样所有前端的mysql请求都会发到这台服务器上,如下图所示。

这样的话,无论10.1.16还是10.1.1.7出现故障,整个系统都不需要人为地进行干预,系统都会自动切换到那台仍然活着的服务器上,对外继续提高服务。

讲到这里,我们仔细想想,这样真的就万无一失了嘛?好像还缺点什么,对就是“脑裂”问题,在实现Cluster的时候,往往最需要回避的问题就是脑裂问题,因为脑裂的问题带来的危害比out-of-service的危害还大,在刚刚场景中,细心的读者会发现,前面的方案中防止脑裂都是通过DRBD Corosync以及Pacemaker等软件自身机制实现的,但是在最后一个场景中,当10.1.1.6出现问题时,我们会把10.1.1.7加入到ILB中,但此时10.1.1.6仍然在ILB中!!!即使它出了故障,如果说在10.1.1.7在执行前端mysql的请求的时候,10.1.1.6的突然活过来了了,那TM就尴尬了,这时候就会产生脑裂。

基于这种情况的考虑,我们需要对ILB的做一些策略,来防止脑裂的发生,最好的情况就是任何时候Pacemaker选择某一台服务器作为master的时候,在Pacemaker服务的编排中,加入对ILB的控制,把另一台服务器从ILB中,且不考虑它是否活着,这样可以最大程度地阻止脑裂,最极端的情况就是两台服务器都认为自己是master,后一台启动Pacemaker的服务器会把另外一台服务器从ILB中移除,永远保证ILB中只有一台服务器,保证前端通过ILB只能访问到一台mysql服务器。

如何基于Azure平台实现MySQL HA(方法论篇)的更多相关文章

  1. 通过openswan基于Azure平台搭建VPN server

    用过Azure的读者都知道,Vnet一直是Azure比较自豪的地方,尤其是VPN,Azure提供了两种VPN以及专线来保证客户数据的安全性,S2S vpn(站点到站点的,基于IPsec的),P2S v ...

  2. 基于开源软件在Azure平台建立大规模系统的最佳实践

    作者 王枫 发布于2014年5月28日 前言 Microsoft Azure 是微软公有云的唯一解决方案.借助这一平台,用户可以以多种方式部署和发布自己的应用. 这是一个开放的平台,除了对于Windo ...

  3. 【Microsoft Azure 的1024种玩法】三.基于Azure云平台构建Discuz论坛

    [简介] Discuz!是一套通用社区论坛软件系统,用户在不需要任何编程的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能.很强负载能力和可高度定制的论坛服务. [前期文章] [操作步骤] ...

  4. 【Microsoft Azure 的1024种玩法】二.基于Azure云平台的安全攻防靶场系统构建

    简介 本篇文章将基于在Microsoft Azure云平台上使用Pikachu去构建安全攻防靶场,Pikachu使用世界上最好的语言PHP进行开发,数据库使用的是mysql,因此运行Pikachu需要 ...

  5. 理解 OpenStack 高可用(HA) (6): MySQL HA

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  6. 基于Azure构建PredictionIO和Spark的推荐引擎服务

    基于Azure构建PredictionIO和Spark的推荐引擎服务 1. 在Azure构建Ubuntu 16.04虚拟机 假设前提条件您已有 Azure 帐号,登陆 Azure https://po ...

  7. 基于android平台的斗地主AI

    本软件是基于android平台的斗地主AI,我们在源代码的基础之上,旨在改进AI的算法,使玩家具有更丰富的体验感,让NPC可以更为智能. (一)玩法解析: (1)发牌和叫牌:一副扑克54张,先为每个人 ...

  8. MySQL高可用解决方案(MySQL HA Solution)

    http://blog.sina.com.cn/s/blog_7e89c3f501012vtr.html 什么是高可用性?很多公司的服务都是24小时*365天不间断的.比如Call Center.这就 ...

  9. MapReduce编程模型详解(基于Windows平台Eclipse)

    本文基于Windows平台Eclipse,以使用MapReduce编程模型统计文本文件中相同单词的个数来详述了整个编程流程及需要注意的地方.不当之处还请留言指出. 前期准备 hadoop集群的搭建 编 ...

随机推荐

  1. [转]教你实践ASP.NET Core Authorization

    本文转自:http://www.cnblogs.com/rohelm/p/Authorization.html 本文目录 Asp.net Core 对于授权的改动很友好,非常的灵活,本文以MVC为主, ...

  2. Spark机器学习· 实时机器学习

    Spark机器学习 1 在线学习 模型随着接收的新消息,不断更新自己:而不是像离线训练一次次重新训练. 2 Spark Streaming 离散化流(DStream) 输入源:Akka actors. ...

  3. BZOJ 2588: Spoj 10628. Count on a tree [树上主席树]

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 5217  Solved: 1233 ...

  4. poj 2352 Stars 数星星 详解

    题目: poj 2352 Stars 数星星 题意:已知n个星星的坐标.每个星星都有一个等级,数值等于坐标系内纵坐标和横坐标皆不大于它的星星的个数.星星的坐标按照纵坐标从小到大的顺序给出,纵坐标相同时 ...

  5. 使用NuGet发布自己的类库包(Library Package)

    STEP 1:注册并获取API Key 首先,你需要到NuGet上注册一个新的账号,然后在My Account页面,获取一个API Key,这个过程很简单,我就不作说明了. STEP 2:下载NuGe ...

  6. [LeetCode] Binary Search Tree Iterator 二叉搜索树迭代器

    Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...

  7. 理解OAuth 2.0

    转自:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛 ...

  8. 通过一个实例重新认识引用类型,值类型,数组,堆栈,ref

    昨天在写代码时候遇到了一个问题,百思不得其解,感觉颠覆了自己对C#基础知识的认知,因为具体的情境涉及公司代码不便放出,我在这里举个例子,先上整个测试所有的代码,然后一一讲解我的思考过程: using ...

  9. Socket编程(4)TCP粘包问题及解决方案

    ① TCP是个流协议,它存在粘包问题 TCP是一个基于字节流的传输服务,"流"意味着TCP所传输的数据是没有边界的.这不同于UDP提供基于消息的传输服务,其传输的数据是有边界的.T ...

  10. BZOJ1257 [CQOI2007]余数之和sum

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...