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. php输出缓冲区

    ob_start(); echo 'aaa'; $string = ob_get_contents(); file_put_contents('a.html', $string); ob_flush( ...

  2. node.js版本升级

      node有一个模块叫n(这名字可够短的...),是专门用来管理node.js的版本的. 首先安装n模块: npm install -g n 第二步: 升级node.js到最新稳定版 n stabl ...

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

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

  4. PAT 天梯赛 L2-016. 愿天下有情人都是失散多年的兄妹 【BFS】

    题目链接 https://www.patest.cn/contests/gplt/L2-016 思路 用BFS 每层 遍历当代 并且查找当代是否有重复 有重复就跳出 然后 POP 并且将他们的下一代 ...

  5. PHP-内嵌式语言(转)(未看)

    PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写.PHP 是一种内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行 ...

  6. 使用vsftp搭建ftp服务

    第一步:安装vsftp pam db4 yum install vsftpd pam* db4*-y ================================================= ...

  7. Struts2 遇到的问题汇总

    1.报错如下信息: org.apache.jasper.JasperException: The Struts dispatcher cannot be found. This is usually ...

  8. Kafka- Spark消费Kafka

    在高版本的API中 val brokers = properties.getProperty("kafka.host.list") val topics = Set(propert ...

  9. matlat之KDTreeSearcher()函数

    Create Kd-tree nearest neighbor searcher(创建kd-树最近邻搜索器). Description KDTreeSearcher model objects sto ...

  10. HTML5坦克大战1

    在JavaScript中,不要在变量为定义之前去使用,这样很难察觉并且无法运行. 颜色不对. 当我的坦克移动时,敌人坦克消失. tankGame3.html <!DOCTYPE html> ...