zoukankan      html  css  js  c++  java
  • Windows Azure Cloud Service (4) Windows Azure 平台高可用性的实现

      《Windows Azure Platform 系列文章目录

      这里有两个非常重要的概念:故障域(Fault Domain)和更新域(Update Domain)。

      http://blogs.technet.com/b/yungchou/archive/2011/05/16/window-azure-fault-domain-and-update-domain-explained-for-it-pros.aspx

     

      我们先说说故障域。先举个例子,笔者的书房有一个插线板,插线板上接了我的笔记本电脑,手机充电器,电视机等电器。如果这个插线板断电了,那这个插线板上的所有电器都会断电。这个插线板和上面的电器组成了一个故障域。

      Microsoft Azure数据中心基础设施由很多的RACK组成,每一个RACK都被称为故障域。当RACK出现硬件故障时候,在RACK上的服务,不管是 Azure的计算服务、存储服务等等都会宕机。

      当客户部署了2台 Azure Virtual Machine,但是没有设置可用性集的时候,Microsoft Azure可能会把这2个Azure Virtual Machine部署在同一个RACK上,这样就可能会出现单点故障。因为这1个RACK宕机了,上面运行的2个Azure Virtual Machine都会宕机。两个Azure Virtual Machine宕机的概率和一个Azure Virtual Machine的概率是一样。

      而设置了可用性集的情况下,Microsoft Azure就会把这2台Azure Virtual Machine部署在2个不同的RACK上。微软从数据中心底层设计上,可以保证这2个不同的RACK不会同时宕机。

      

      ===================================我是分隔符===========================================

      我这里模拟一下场景:

      Contoso公司已经采购了Azure服务,计划把现有托管在IDC的企业官网迁移到Azure云平台。该企业官网面向的用户群主要是华东地区的用户。

      该企业官网部署需要服务器列表如下:
      1. 1台AD服务器
      2. 1台Web服务器
      3. 1台SQL Server服务器

      在Microsoft Azure虚拟机中,用户也可以选择使用一台Azure Virtual Machine部署AD Server,一台Azure Virtual Machine部署Web Application,使用另一台Virtual Machine部署SQL Server。但是这样的场景是没有SLA保障的

      Microsoft Azure Virtual Machine承诺的99.95%的SLA是需要2台或者2台以上的Azure Virtual Machine同时运行,且所有的Virtual Machine都需要在同一个可用性集中。对于上面实例,用户如果想在Azure中实现99.95%的SLA,需要同时部署:
      1. 两台AD Server虚拟机,放在同一个可用性集A中。
      2. 两台Web Server虚拟机,放在另外一个可用性集B中。
      3. 两台SQL Server 虚拟机,采用SQL Server 2012 Enterprise提供的Always-On功能,实现High Availability。且SQL Server所在的Virtual Machine需要在另外一个可用性集C中。
      4. 将具有相同功能的多台VM放置在同一个可用性集下。

      这边还需要强调一下:
      1. 可用性集A中的两台AD Server中的内容配置必须完全一致,并且需要进行AD的同步。
      2. 可用性集B中的两台Web Server中的网站在部署的时候,内容必须完全一致。
      3. 可用性集C中的两台SQL Server必须配置SQL Server Always-On或者SQL Mirroring,保证数据库之间的日志同步

      

      对于DB Server,比如SQL Server或者MySQL,需要在两台DB Server进行日志同步:
      1. SQL Server需要在两台VM配置Always-On或者SQL Mirroring,使用日志同步
      2. My SQL可以配置Master-Slave,使用Replication进行复制。
      3. 这样的目的是保证在其中一台Server宕机的情况下,另外一台Server可以正常运行,因为配置了日志同步,可以保证日志不会丢。
      4. 另外还要强调一下,客户端如果调用SQL Server服务的时候,需要正确配置AG Listener,这样保证在一台SQL Server宕机的情况下,AG Listener可以将请求自动发送到另外一台SQL Server上。

      

      然后我们谈谈更新域。比如我有2台Azure Virtual Machine做了负载均衡,名称为VM1和VM2,都部署了我的Web Application,版本为1.0,他们部署在不同的更新域Update Domain中。将来我的软件版本做了更新,升级到了2.0版本,有两种选择:

    -      用户同时更新这2台Azure Virtual Machine的软件版本。但是这样如果有客户端发起请求,会造成服务器端的无法响应。

    -      Azure Fabric Controller监控这2台Azure Virtual Machine。首先更新Update Domain 0中的虚拟机软件。更新完毕后再更新Update Domain 1中的虚拟机软件,一直到所有的Azure Virtual Machine中的Web Application更新完毕,这样保证在同一时刻至少有1台Azure Virtual Machine能够响应客户端的请求。

      以下是故障域(Fault Domain)和更新域(Update Domain)的截图:

     

      以下是虚拟机可用性集的截图:

      

  • 相关阅读:
    剑指offer——最小的K个数和数组中第K大的元素
    Leetcode刷题指南链接整理
    160. Intersection of Two Linked Lists
    100. Same Tree
    92. Reverse Linked List II
    94. Binary Tree Inorder Traversal
    79. Word Search
    78,90,Subsets,46,47,Permutations,39,40 DFS 大合集
    0x16 Tire之最大的异或对
    0x16 Tire
  • 原文地址:https://www.cnblogs.com/threestone/p/2553272.html
Copyright © 2011-2022 走看看