目前 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 实例完成,检查状态:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。