在Windows Azure上配置VM主备切换(1)——Linux篇
对任何一个上线系统来说,高可用设计是不可或缺的一个环节,这样才可以确保应用可以持续、稳定的运行,而不是频繁的掉线、停机。高可用设计的核心思路很简单,就是消除一切单点故障,将单点链路或者节点升级为多点。比如,对于Web类型的应用,可以利用Web集群和负载均衡器实现多活,而对于数据库、文件服务这类服务,一般较难配置为多活,于是常采用主备切换的方式,即备机上的服务处于离线状态,当主机故障时,备机升级为主机,继续提供服务。
要实现主备切换,需要在几个层面做好准备:
- 数据的转移:将主节点的数据实时复制到备机,确保主节点死掉后备机拥有最新的数据。一般有三种实现机制:共享磁盘、磁盘层复制、应用层复制
- 服务的转移:主节点服务死掉后,备机上的服务能立即启动。这需要一些第三方软件的支持,进行主机状态的监控,并进行自动化切换。
- 端点的转移:主备切换发生后,服务运行的位置发生了变化。为了让客户端能够继续连接服务,需要为客户端提供透明的访问机制,常用的做法有:IP地址漂移、动态路由
以Linux上的Mysql为例,其通常的配置方式如下:
- 数据转移:磁盘级复制一般采用DRBD,应用层复制采用Replication。由于磁盘级复制性能更高,一般Mysql采用磁盘级复制进行主备复制,采用Replication进行主从复制(从数据库处理读请求)
- 服务的转移:一般采用heartbeat
- 端点的转移:一般采用VIP漂移,也是利用heartbeat实现
其中heartbeat是一个自动化软件,能够自动检测服务状态,在故障时进行服务和IP的切换。DRBD+heartbeat方案需要两台Mysql服务器,一主一备,各有一个IP地址,主机还有额外一个VIP,作为客户端连接地址,两台服务器无需共享磁盘,DRBD实时复制所有的磁盘数据到备机。MySQL服务只在主机上运行。heartbeat检测主机上Mysql服务的状态,如果Mysql死掉,则heartbeat会将主机上的所有服务停止(包括DRBD复制),释放VIP,然后将备机提升为主机,启动原备机上的MySQL,进行备机上的DRBD反向复制,最后在新的主机上启用VIP。整个切换过程都是自动化的,对用户也是透明的,而且可以支持自动的回切,无需人工干预。客户端在切换过程中会有一定时间的中断。示意图如下
在Windows Azure上,要配置这种主备集群,会有一个困难,就是无法配置VIP。Azure上所有的IP地址都是系统管理的,用户无法自行管理IP地址,而且每个VM只有一个网卡,一个IP。为了配置主备切换,我们可以采用几种方法。
第一种方法,是利用Azure提供的负载均衡功能进行主备选择。集群的配置跟传统方式类似,只是在heartbeat上不需要配置VIP,也就是说,heartbeat只管理DRBD和mysql的切换,而不去管IP的切换。由于heartbeat保证同一时刻只有一个Mysql实例存活,那么两台VM的Mysql端口也只有一个开放。Azure的负载均衡器可以自动检测端口状态,它只会将请求发给活的端口,当两个VM都作为负载均衡的转发目标时,只有当前的主节点会接收请求。示意图如下:
第二种方法,是自己采用负载均衡手段,进行主节点的路由。示意图如下。该方法需要在每个客户端上配置Mysql的路由器。其好处是少了一个网络转发的层次,所有流量都可以在内网发生,坏处是配置较为复杂,在每个客户端上都要维护MySQL节点列表。Mysql路由器的选择有多种,比如用通用的负载均衡软件LVS,HAProxy等,或者用Mysql专用的Mysql Proxy
下面,我们看下采用第一种方法进行配置的实际例子。
首先,我们在Azure上建立两台Linux虚拟机,OS为CentOS 6.3。需要注意的是,建立第一台虚拟机的时候,需要建立可用性集
建立第二台虚拟机的时候,要加入第一台虚拟机的云服务,这样才能为他们配置负载均衡;同时也要加入第一个虚拟机建立的可用性集,这样Azure才会为这两台虚拟机提供SLA(Azure目前不提供单台虚拟机的SLA),这样设置的主备切换才有意义。
虚拟机建立好以后,还需要为他们各自挂载一块磁盘,作为Mysql的数据文件存储盘
挂载后的磁盘在VM里面的位置是/dev/sdc
接下来,就可以安装正常的步骤安装配置DRBD和Heartbeat了。这里有一个详细的步骤 http://www.linuxidc.com/Linux/2012-11/73833.htm
配置时,有几个地方需要注意下:
1. 安装kmod-drdb时,需要升级内核。升级时,需要用到163的yum源。原步骤里面有一步是
mv CentOS6-Base-163.repo / /etc/yum.repos.d 应该改成mv CentOS6-Base-163.repo /etc/yum.repos.d,另外,需要将/etc/yum.repos.d里面的CentOS-Base.repo移出该目录,否则Base库会有多个源。
2. 执行yum操作时,有时会遇到找不到更新包的情况。在Azure的CentOS里面屏蔽了核心包的安装,为了安装核心包,可以在yum命令后加上--disableexcludes=main参数,或者修改/etc/yum.conf,将exclude=kernel*去掉。另外,也可以试试yum clean metadata清楚本地包缓存
3. 升级完内核后需重启
4. 不需要配置hosts文件,Azure可以直接解析主机名为内网地址
5. drbd.conf配置文件里面,disk地址改为/dev/sdc
6. drbd测试好后,分别在主备机上安装mysql,配置my.conf将datadir指向/drbd/mysql。暂时不要启动mysql服务,也不要加入自启动
7. heartbeat配置haresources时,不要管理IP地址,即去掉IPaddr::192.168.159.250/24/eth0。另外,最后面的nginx改为mysqld
DRBD+heartbeat+mysql配置完成后,可以进行测试,可以看看mysql是不是可以自动切换
最后,开始配置Azure负载均衡。进入虚拟机1的端点页,点击页面底部的添加
在对话框中选择“添加独立终结点”。在第二步中输入mysql。注意要选中页面底部的“创建负载平衡集”
在第三步中,设置端口检测的参数。
创建完成后,进入第二台虚拟机的端口配置页面,添加端口,然后在第一步中选择“将终结点添加到现有负载平衡集”,选中第一台虚拟机定义的负载平衡集
至此,配置完毕。
下面,可以进行客户端测试。客户端连接的是外网地址,也就是云服务的URL
mysql可以正常工作。此时连接的是主节点msyql1。我们在mysql1上可以看到msyql进程
接下来,我们模拟mysql1死掉的情形。模拟方法是直接重启mysql1。同时,我们在mysql2上监控heartbeat的状态
可以看到,mysql2上进行了接管,启动了mysql服务。此时仍然访问mysql的外网地址,仍然可以连上,此时连接的是Mysql2上的mysql实例
在Windows Azure上配置VM主备切换(1)——Linux篇的更多相关文章
- 在Azure云上实现postgres主备切换
以下是工作上实现postgres主备切换功能所用到的代码和步骤,中间走了不少弯路,在此记录下.所用到的操作系统为centos 7.5,安装了两台服务器,hostname为VM7的为Master,VM8 ...
- Windows Azure 上传 VM
One of the great features of Windows Azure is VHD mobility. Simply put it means you can upload and d ...
- 在 Windows Azure 上部署预配置 Oracle VM
Microsoft 和 Oracle 近期宣布建立战略合作伙伴关系,基于此,我们将通过 Windows Azure 镜像库推出多种常用的 Oracle 软件配置.即日起,客户可以在 Windows S ...
- Windows Azure 上 Linux VM 中的交换空间 – 第 2 部分
本文章由 Azure CAT 团队的 Piyush Ranjan (MSFT) 撰写. 在前一篇文章 Windows Azure 上Linux VM 中的交换空间第 1 部分中,我介绍了在默认情况下, ...
- 为在Windows Azure上的网站配置自定义域名
本篇体验给Windows Azure上的网站自定义域名,首先"CNAME"和"A记录"是必须了解的概念. 假设,在Windows Azure上的网站域名是:x. ...
- 在 Windows Azure 上设计多租户应用程序
作者:Suren Machiraju 和 Ralph Squillace 审校:Christian Martinez.James Podgorski.Valery Mizonov 和 Michael ...
- 在 Windows Azure 上部署并定制化 FreeBSD 虚拟机镜像
发布于 2014-12-11 作者 陈阳 FreeBSD 基础镜像现已登陆中国的 VM Depot! 对于青睐 BSD 而非 Linux 的开源爱好者来说,这无疑是个好消息.同时,随着该基础镜像 ...
- 如何将SQL Server运行到Windows Azure上
从2012年6月6日开始,Windows Azure上一些强大的新功能现在可用于预览,包括新的Windows Azure虚拟机(VM).其中有关Windows Azure虚拟机最强大的一件事是他们利用 ...
- Windows Azure 上的 Symfony,适用于 PHP 开发者的强大组合
发布于 2014-06-13 作者 陈 忠岳 Symfony 是针对 PHP 开发者的流行开源 Web 应用框架.现在,您可以更轻松地在 Windows Azure 上使用它,这都归功于 Ben ...
随机推荐
- 从零开始写一个Tomcat(贰)--建立动态服务器
上文书说道如何通过http协议建立一个静态的服务器来访问静态网页,但我们选择tomcat最主要的原因还是因为它能动态的执行servlet,这边文章将引导你实现一个能够运行servlet的服务器,这个简 ...
- RHEL7和RHEL6的主要变化
RHEL7和RHEL6的主要变化 RHEL7 RHEL6 文件系统 XFS EXT4 内核版本 3.10.x-x系列 2.6.x-x系列 内核名称 Maipo Santiago 发布时间 2014 ...
- vmware-tools(vmware workstation 10.0.4)安装的时候遇到的bug
有个GitHub,专门解决C++编译的时候出的问题 地址
- 第一章 初识Lucene
多看几遍,慢就是快 1.1 应对信息爆炸 1.2 Lucene 是什么 1.2.1 Lucene 能做些什么 1.2.2 Lucene 的历史 1.3 Lucene 和搜索程序组件 基本概念 索引操作 ...
- tabpagerindictor:mergeReleaseResources FAILED Error:Execution failed for task ':tabpagerindictor:mergeReleaseResources'. > D:\android\adt-bundle-windows-x86_64-20140702\android-open-project-demo-mast
解决:将项目移动到路径少的目录再运行即可 异常日志: D:\android\adt-bundle-windows-x86_64-20140702\android-open-project-demo-m ...
- 关于Adobe Flash 11.3 引起的火狐使用问题
Adobe Flash 更新到11.3之后,为火狐引入Flash沙盒安全模式,但同时,又造成了部分兼容性问题,导致 Windows vista及 Windows 7上部分火狐崩溃,并致使一些使用Fla ...
- iOS-封装静态库
最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework.在Xcode上没有找到允许编译,如同Android上的*.so和Win32上的dll这样的说法 ...
- Swift和OC混编时, 关于@objc的作用
Objective-C 和 Swift 在底层使用的是两套完全不同的机制,Cocoa 中的 Objective-C 对象是基于运行时的,它从骨子里遵循了 KVC (Key-Value Coding,通 ...
- sql-----点点滴滴
from--------where-------groud by---------having----------select---------order by------------top --时间 ...
- Mysql 查询性能优化
查询优化,索引优化,库表结构优化需要齐头并进,一个不能落. 为什么查询速度会慢 在阐释编写快速的查询之前,需要清楚一点,真正重要的是响应时间.如果把查询看做是一个任务的话,那么它由一系列子任务构成,每 ...