【腾讯云的1001种玩法】在腾讯云创建您的 SQL Server : HA 机准备篇

目前 CLB 产品是基于应用层面的负载均衡,所以要实现业务感知并自动切换 IP 还得使用弹性网卡这一个特性来进行支持,我们需要一些特殊的手段来支持(当然后续弹性网卡特性会陆续支持)。

由于之前的文章都传递了一个错误的观念就是使用 CLB 作为高可用群集的 VIP,这里正式给大家道歉,当然这是属于我个人名义发布的博客,在做个人实验研究出错是时长的事儿,借助这个事儿也发现 VPC 弹性网卡 IP 不支持 Windows 切换这事儿,并且跟对应的 QCloud PM 好好聊了一个下午,最终使需求落地,将在近期内进行更改,Okay,我们先来看看在原有架构上增加这个 HA 机后到底实现了什么,如下图所示:

但是需要强调的是,本身 SQL AlwayOn Cluster 就属于高可用群集,其检测机制非常完善,可以实现无感知迁移:

1、由于加了 HA 机,判断阈值为1s 1次,所以低于1000ms 级别的故障还是有有所影响,那么做 AlwayOn 群集的高可用作用就会大打折扣。

2、由于加了前端 HA 机,HA 机作为逻辑判断的机器节点,理论上并不会有很大的故障几率,但是仅仅是单一的 CVM 作为支撑,这里存在单点故障风险。

所以,综上所述,若要将此文所涉及的架构用于生产环境,还需要考虑将脚本扩展及考虑容灾,其次目前该脚本只支持两个节点,所以>2节点的环境需要定制(当然对于有 Python 运维环境的朋友这个改造几乎轻而易举)。

下面让我们来看看如何实现吧:

1、 首先我们要准备好几个脚本(已上传到 Github ,地址为: https://github.com/StatLee/qcloud-windows-ip-ha-auto-migrate ),分别是:

2、 先根据官网指引给单独的HA机器(槽点1)部署好 ADK 环境(建议使用 Python 2.6):https://www.qcloud.com/document/developer-resource/494/7244

3、 使用前请记得修改公共加密(Display、Migrate 两个脚本都需要修改),公共加密方式可参考https://www.qcloud.com/document/api/213/6984:

4、 VMCloud-Display-HAIP 是用来判断当前弹性 IP 在哪个网卡上,可以传参数进行测试,方法:

5、 而 VMCloud-Migrate-HAIP 是用来执行迁移 IP ,而需要改动的就是 VMCloud-Change-HAIP :

以下为脚本内容:

def GetCVMInstance(insid):
    try:
        gvminrs=os.popen('python2.6 VMCloud-Display-HAIP.py ' + insid).read().strip()
        if gvminrs.find("这里为SQL群集IP") == -1:
            return 'SQL01'
            os.system('echo' + insid + 'SQL01 Successful >> /var/log/vmclog.log')
        else:
            return 'SQL02'
            os.system('echo' + insid + 'SQL02 Successful >> /var/log/vmclog.log')
    except:
        print 'GetError'
        os.system('echo' + insid + 'Connect Error >> /var/log/vmclog.log')
        return 'ERR'
if __name__ == '__main__':
    iprs=NetCheck('这里为SQL群集IP ')
    if iprs == 'DOWN':
        nodename=GetCVMInstance('这里为第一个节点网卡实例ID')
        if nodename == 'SQL01':
            mvto2a=os.system('python2.6 VMCloud-Migrate-HAIP.py 对应VPCID SQL群集IP 第一个节点网卡实例ID第二个节点网卡实例ID ')
            os.system('echo ?~G???°SQL02 ?~P?~_ >> /var/log/vmclog.log')
        else:
            mvto2b=os.system('python2.6 VMCloud-Migrate-HAIP.py对应VPCID SQL群集IP 第二个节点网卡实例ID第一个节点网卡实例ID ')
            os.system('echo ?~G???°SQL01 ?~P?~_ >> /var/log/vmclog.log')

#以下为AlwayONIP检测需要设置的:
    iportrs=NetPortCheck('AlwayONIP',数据库端口)
    print iportrs
    if iportrs == 'NotOk':
        nodename=GetCVMInstance('这里为第一个节点网卡实例ID ')
        if nodename == 'SQL01':
            mvto2a=os.system('python2.6 VMCloud-Migrate-HAIP.py对应VPCID SQL群集IP 第一个节点网卡实例ID第二个节点网卡实例ID ')
            os.system('echo ?H~G?M??H°SQL02 ?H~P?J~_ >> /var/log/vmclog.log')
        else:
            mvto2b=os.system('python2.6 VMCloud-Migrate-HAIP.py对应VPCID SQL群集IP 第二个节点网卡实例ID第一个节点网卡实例ID ')
            os.system('echo ?H~G?M??H°SQL01 ?H~P?J~_ >> /var/log/vmclog.log')
						

6、该脚本为第一版,也是抛砖引玉,考虑到 VPC 弹性网卡自动切换机制为公有云必然实现之路,这里的脚本只作为过渡用,目前仅支持2个节点(如需要多个节点判断可以自行修改使用冒泡排序),设置完成后,需要在 HA 服务器上运行一个常驻脚本来调用两个 PY 脚本来进行轮训,实测1S 切换一次,丢包低于2个:

自此自动巡检完成:

切换 AlwayON 群集 IP 丢包测试,切换4次,丢包三个:

切换群集 IP 丢包测试,切换1次,丢包零个:

7、 使用 SSMS 连接 AlwayOn 实例完成,检查状态:

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术栈

十面阿里,菜鸟,天猫,蚂蚁金服题目总汇

虽然天猫,蚂蚁金,菜鸟都归属阿里旗下,但每个面试官问的问题都不一样,相同点主要在流程方面。

1542
来自专栏程序员的SOD蜜

“设计应对变化”--实例讲解一个数据同步系统

 系列文章索引: [WCF邮件通信系统应用 之 数据同步程序 之 设计内幕 之 一] 同步一个数据库要发多少个数据包? [WCF邮件通信系统应用 之 数据同步...

2407
来自专栏跨界架构师

记一次通过c#运用GraphQL调用Github api

  最近在折腾使用Github api做个微信小程序练练手,本篇文章就是在这个过程中记录。

1212
来自专栏lgp20151222

Java规则引擎drools:drt动态生成规则并附上具体项目逻辑

由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面。

2042
来自专栏Golang语言社区

聊一聊goroutine stack

推送在外卖订餐中扮演着重要的角色,为商家实时接单、骑手实时派单提供基础的数据通道。早期推送是由第三方服务商提供的, 随着业务复杂度的提升、订单量和用户数的持续增...

5755
来自专栏高性能服务器开发

(六)关于网络编程的一些实用技巧和细节

这些年,接触了形形色色的项目,写了不少网络编程的代码,从windows到linux,跌进了不少坑,由于网络编程涉及很多细节和技巧,一直想写篇文章来总结下这方面的...

4235
来自专栏PHP在线

2018最新PHP学习路线整合

PHP是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。

2975
来自专栏芋道源码1024

从客户端的角度设计后端的接口

2.请求Path,http://www.online.com/api/ [path]

1483
来自专栏猛牛哥的博客

OpenProcess在某些XP系统上打开进程失败的原因

2204
来自专栏java工会

Java 11 新功能来了!

2164

扫码关注云+社区