MySQL迁移到Azure上后,由于云的特性,在自建数据中心的MySQL的HA的方法在云上很多都不能部署。

这主要是因为,目前Public Cloud不支持:1. 共享存储;2. Multicast;3. VIP。

  1. 共享存储,Azure File Service可以部分解决这个问题,但考虑到性能的问题,本方案没有采用File Service;
  2. 需要组播的主要原因是集群软件需要组播进行同步;
  3. VIP在Cluster的解决方案中,可以解决前段应用连接字符串的问题。Cloud不支持组播和广播,所以ARP类似的协议都不支持,使得传统的VIP模式都不能采用。

本方案中通过DRBD、Corosync、Pacemaker、Azure ILB几个软件解决了上面3个HA部署中的问题,实现MySQL在Azure上的HA部署。

  1. 具体设计方案

整体架构如上图,

  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需要做:
    1. 选择DRBD的Master节点,
    2. 挂载DRBD的分区到指定目录,
    3. 启动MySQL的服务
    4. 保证DRBD、File、MySQL三个服务在同一台Master服务器上
    5. 保证DRBD、File、MySQL三个服务按顺序启动

正常情况下,Pacemaker把编排好的各种服务在Master上启动后,在Master上MySQL进行任何的数据插入,都会通过DRBD更新到Slave服务器的DRBD Secondary磁盘上。由于在Slave服务器上的MySQL服务不启动,其3306端口不对外提供服务。Azure ILB认为这台服务器是没有提供服务的,负载均衡集中不包含这台服务器。因此Aure ILB只把MySQL的请求发送到Master上。其结构如下:

当10.1.1.6服务器出现故障或重启的动作时,Corosync和Pacemaker会把Master迁移到10.1.1.7上。Pacemaker在10.1.1.7上启动之前编排的各种服务。MySQL在10.1.1.7上启动。由于10.1.1.7提供了3306端口的服务,Azure ILB会把10.1.1.7加入到负载均衡集中,前端MySQL的请求都会发到这台服务器上。具体如下:

10.1.1.6和10.1.1.7两台机器任意一台机器出现故障,整个系统都不需要人工参与,系统会自动迁移到available的服务器上,对外提供服务。

二、防止脑裂问题

由于Cluster中最需要避免的问题是脑裂问题,脑裂甚至比Out-of-service带来的危害更大。因此,需要最大程度的防止脑裂的发生。

在前面提到的方案中,防止脑裂的方式只通过DRBD、Corosync和Pacemaker软件自身实现的。

由于采用了Azure的ILB,可以采用对ILB进行配置的方式实现防止脑裂的方案。

当Pacemaker选择一台服务器作为Master时,在Pacemaker服务的编排中,加入对Azure ILB的控制,把另外一台服务器从ILB中移除,把自己加入到ILB中。结构如下:

极端情况,两台服务器都自认为是Master的情况,后一台启动Pacemaker的服务器会把另外一台服务器从ILB中移除。从而在ILB中只有一台VM,保证前端服务器通过ILB只能访问到一台MySQL服务器。

MySQL on Azure高可用性设计 DRBD - Corosync - Pacemaker - CRM (一)的更多相关文章

  1. MySQL on Azure高可用性设计 DRBD - Corosync - Pacemaker - CRM (二)

    在上一篇文章中描述了MySQL HA on Azured 设计思路,本篇文章中将描述具体的部署,每个组件的安装和配置. 整体的设计架构如下: 下面将是所有组件的安装配置过程,所有的虚拟机是CentOS ...

  2. Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群

    大纲一.前言二.环境准备三.Corosync 安装与配置四.Pacemaker 安装与配置五.DRBD 安装与配置六.MySQL 安装与配置七.crmsh 资源管理 推荐阅读: Linux 高可用(H ...

  3. 【原】ubuntu下Mysql的HA(corosync+pacemaker+drbd)

    一.前提准备: 1.OS:ubuntu 12.04 2.cat /etc/hosts: 127.0.0.1 localhost 192.168.153.154 ha1 192.168.153.155 ...

  4. Centos 7 下 Corosync + Pacemaker + DRBD + psc + crmsh 实现 mysql 服务高可用

    一.介绍 高可用,大家可能会想到比较简单的Keepalived,或者更早一点的 heartbeat,也可能会用到 Corosync+Pacemaker,那么他们之间有什么区别. Heartbeat到了 ...

  5. 基于corosync+pacemaker+drbd+LNMP做web服务器的高可用集群

    实验系统:CentOS 6.6_x86_64 实验前提: 1)提前准备好编译环境,防火墙和selinux都关闭: 2)本配置共有两个测试节点,分别coro1和coro2,对应的IP地址分别为192.1 ...

  6. CentOS 6.5环境实现corosync+pacemaker实现DRBD高可用

    DRBD (Distributed Replicated Block Device)分布式复制块设备,它是 Linux 平台上的分散式储存系统,通常用于高可用性(high availability, ...

  7. 使用 Load Balancer,Corosync,Pacemaker 搭建 Linux 高可用集群

    由于网络架构的原因,在一般虚拟机或物理环境中常见的用 VIP 来实现双机高可用方案,无法照搬到 Azure 平台.但利用 Azure 平台提供的负载均衡或者内部负载均衡功能,可以达到类似的效果. 本文 ...

  8. Corosync+Pacemaker+crmsh构建Web高可用集群

    一.概述: 1.1 AIS和OpenAIS简介 AIS应用接口规范,是用来定义应用程序接口(API)的开放性规范的集合,这些应用程序作为中间件为应用服务提供一种开放.高移植性的程序接口.是在实现高可用 ...

  9. corosync+pacemaker实现高可用(HA)集群

    corosync+pacemaker实现高可用(HA)集群(一)     重要概念 在准备部署HA集群前,需要对其涉及的大量的概念有一个初步的了解,这样在实际部署配置时,才不至于不知所云 资源.服务与 ...

随机推荐

  1. 核函数 深度学习 统计学习 强化学习 神经网络 xx

  2. unity里standard pbr(一)

    关注forwardbase下的 standard.shader #pragma vertex vertBase #pragma fragment fragBase #include "Uni ...

  3. mysql(root用户密码设置)

    root密码重置 修改root用户的密码: /*登录mysql*/ mysql -uroot -p123 /*切换数据库*/ use mysql /*修改root用户的密码*/ update user ...

  4. HTTP 304 详解

    把Last-Modified 和ETags请求的http报头一起使用,这样可利用客户端(例如浏览器)的缓存.因为服务器首先产生 Last-Modified/Etag标记,服务器可在稍后使用它来判断页面 ...

  5. PHP的依赖管理工具----composer

    安装Composer 参考:https://getcomposer.org/doc/01-basic-usage.md composer 是PHP依赖管理工具 PHP最低版本要求5.3.2,需要允许o ...

  6. 错误解决Error configuring application listener of class org.springframework.web.util.Log4jConfigListener(转发)

    Spring MVC-----maven项目导入后启动tomcat出现如下错误 参考:http://blog.csdn.net/itlionwoo/article/details/17523371 解 ...

  7. python基础18 ---多态与绑定方法

    一.抽象类 1.抽象类的定义:从一堆类中抽象出相同的内容,重新组成一个新的类,这样的类属于抽象类. 2.香蕉类是一类水果,苹果类是一类水果,葡萄类是一类水果,但是他们都属于水果,从他们这些类中可以抽象 ...

  8. STM32 ~ 串口DMA通道查找

    STM32F4XX: /**************************************************************************************** ...

  9. CKeditor插件开发流程(二)SyntaxHighlighter

    CKEditor整合SyntaxHighlighter实现代码高亮显示 1,版本说明 CKEditor:ckeditor_4.0.1_standard.zipSyntaxHighlighter:syn ...

  10. [原创]Scala学习:流程控制,异常处理

    1.流程控制 1)do..while def doWhile(){ var line="" do{ line = readLine() println("readline ...