有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

背景

MongoDB 数据库实例为用户提供多数据存储节点和 HA 机制保障数据的安全性和服务的高可用性,为验证用户业务对腾讯云MongoDB容灾能力的利用情况,混沌演练平台提供多种故障场景实现存储节点故障模拟。

演练实施

演练准备

购买云上跨可用区MongoDB实例,部署本地或者云上服务端测试环境,连接 MongoDB 实例。
模拟常规客户端请求的脚本。
#!/usr/bin/python
"""
通过简单的数据读写方式,模拟十万级数据量的操作。在数据插入中途,通过混沌演练平台操作进行故障注入,观察前后变化。
本脚本只作为参考示例,真实演练时建议使用贴近生产环境的业务场景进行故障模拟。
"""
import pymongo
import random
?
# 演练时以实际注入故障的MongoDB实例Uri进行替换,具体可参考MongoDB [实例详情-网络配置-连接地址]
mongodbUri = 'mongodb://mongouser:thepasswordA1@ip:port/admin'
client = pymongo.MongoClient(mongodbUri)
# 数据库指定
db = client.somedb
# 数据集删除
db.user.drop()
# 自定义插入数据量。建议采用较大数据量,方便演练过程观察
element_num = 3 * 10 ** 6
for id in range(element_num):
# 插入随机文档
name = random.choice(['R9', 'ca?t', 'owen', 'lee', 'J'])
sex = random.choice(['male', 'female'])
try:
db.user.insert_one({'id': id, 'name': name, 'sex': sex})
except Exception as e:
print('error id', id)
# 查询全量文档
content = db.user.find()
for i in content:
print(i)

演练步骤

步骤1:创建演练

登录混沌演练控制台,进入演练管理页面,单击新建演练。
?
?
?

步骤2:添加 MongoDB 实例和动作

1. 在演练对象配置环节中,可通过批量实例 ID 输入或选择 VPC 过滤并添加期望参加演练的 MongoDB 实例。
?
?
?
2. 添加演练动作。
MongoDB 主节点重启。
模拟 MongoDB 主节点故障重启的过程对业务的影响以及MongoDB的 HA 机制。
MongoDB 主从切换。
模拟 MongoDB 节点主从切换过程和切换后产生节点IP发生变更的场景,动作支持优先同可用区切换和优先跨可用区切换两种执行模式。
?
?
?

步骤3:根据需求添加监控指标

?
?
?

步骤4:执行演练

?
?
?

结果观测

通过脚本模拟生产环境用户行为,观察故障前,故障中,故障后三个时态下的业务响应。

主节点重启
?
?

故障前
业务表现:大批量数据持续插入数据库,MongoDB以稳定的速率处理。
实例状态:以广州七区节点为主节点,广州四区节点为从节点,广州六区为 Hidden 节点。
?
故障中
业务表现:脚本中插入失败,可通过配置驱动的重试机制进行重试,同时检测到Mongo节点异常,出现短时间的数据积压。
实例状态:从节点中选择一个节点提主,由于 Hidden 节点不参与选举,则选择广州四区节点作为主节点,原主节点将作为从节点被重新拉起。
?
故障后
业务表现:将积压的数据和当前未插入的数据同时插入,MongoDB以近两倍的速率进行处理。
实例状态:MongoDB自动恢复节点主从关系,将权重较高的节点重新选举为主节点,若权重一致,则保持不变。
?
?
?
结论
完成后检查数据库数据正常,故障过程业务无感知,整体情况符合预期

主从切换
?
?

故障前
业务表现:大批量数据持续插入数据库,MongoDB以稳定的速率处理。
实例状态:以广州四区节点为主节点,广州七区节点为从节点,广州六区为 Hidden 节点。
?
故障中
业务表现:节点可用区发生切换,业务发生与节点重启类似的现象,存在短时间内的数据积压。
实例状态:根据动作模式优先从实例从节点中选择同可用区或跨可用区节点,将其提升为主节点,原主节点作为从节点被重新拉起。
?
故障后
业务表现:发生可用区切换,业务正常运行,数据插入动作和数据查询动作不受影响。
手动故障恢复
实例状态:执行故障恢复动作,恢复至故障开始前状态。
?
结论
故障过程业务无感知,数据库数据完整,整体表现正常,符合预期。
?


http://www.vxiaotou.com