启用灾难恢复通知
本文档包含有关 MQ on Cloud 服务的灾难恢复 (DR) 过程的信息。
如果托管设施发生灾难性故障,IBM 操作团队会负责使用最近的配置备份将部署的队列管理器恢复到备用位置。 以下各部分描述了可以如何配置回调,以在 IBM 操作团队完成该恢复过程时收到通知。 这样您就可以执行使复原的队列管理器恢复正常运行所需的任何后续操作。
下面将指导您完成设置 DR 通知并配置端点处理程序以接收通知的过程。 您可以使用自己的端点处理程序;但是,在本文档的最后一部分中有一个有效的示例。
通过配置备份对队列管理器进行冷复原不会保留运行时状态,例如消息数据和通道序号。 因此,收到来自 IBM 的通知事件时,可能需要执行进一步的操作。 例如,重置通道序号以重新建立与其他队列管理器的通信,或者验证应用程序行为(鉴于持久消息可能已丢失)。
本文档将涵盖以下各部分:
如何配置通知调用
-
在部署了队列管理器的服务实例的 IBM Cloud 控制台中,导航至服务实例,然后选择要为其配置 DR 通知调用的队列管理器。
-
单击标题为“通知设置”的选项卡。
-
单击“创建”以开始设置通知。
-
选择通知的显示名称,然后插入希望接收通知调用的端点 URL。
此 必须 是安全 URL (HTTPS)。
-
为了防止恶意用户触发 DR 端点(即,调用您选择用于接收通知的 URL),建议在 URL 中使用查询参数,以便在调用 URL 时可以由处理程序对其进行检查。
-
例如:
https://example.com/disaster-recovery?token=R4nd0m5tr1ng0fCh4r4ct3r5
-
在连接(使用 HTTPS)期间实现 TLS 时,整个 URL(包括查询参数)在网络上流动时会进行加密,因此观察网络流量的恶意用户时不会看到查询参数
-
-
单击“创建”以完成 DR 通知的配置。
-
要启用这些通知,请确保“活动”切换开关处于开启状态。
-
要测试通知配置,请在“操作”下,选择省略符 (...),然后单击“测试”。
-
要向端点发送测试,请单击“发送测试通知”。
-
如果在测试工具中收到响应状态 200,说明通知已成功传递到端点。 您可以查看主体和头来检查端点的响应。
-
如果收到失败响应,说明测试不成功。 应该检查“响应主体”和“响应头”选项卡来确定问题。
-
如果选择了使用查询参数,请确保将其包含在端点 URL 中。
现在,您已配置 MQ on Cloud 以向端点发送灾难恢复通知。
有效内容
以下 JSON 是发送 DR 通知时将收到的有效内容的示例:
{
"datestamp": "1970-01-01T00:00:01.979587374Z",
"description": "Queue managers in the location shown below have been recreated from a configuration backup.",
"moreInformation": "https://example.com",
"queueManagerLocation": "qm.us-south.mq.appdomain.cloud",
"queueManagers": [{
"hostname": "qm1-abcd.qm.us-south.mq.appdomain.cloud",
"name": "QM1"
}, {
"hostname": "qm2-abcd.qm.us-south.mq.appdomain.cloud",
"name": "QM2"
}],
"region": "us-south",
"serviceInstance": "crn:v1:staging:public:mqcloud:region:a/ab90cde12f345:ab5c678d-e90a-b5678c9::"
}
通知将包含以下键:
- **datestamp:**发送通知的日期和时间
- **description:**问题说明以及已执行的操作
- **moreInformation:**这可能包含外部链接,用于进一步说明 DR 背后的原因
- **queueManagerLocation:**部署了队列管理器的集群的位置
- **queueManagers:**所有受影响队列管理器的名称和主机名的列表
- **region:**服务实例的物理位置
- **serviceInstance:**包含服务实例的唯一 CRN
如何实现端点处理程序
以下指示信息演示了一些样本代码,用于实施端点处理程序以通过 IBM Cloud Functions 中的 PagerDuty 发送通知,但您也可以调整此代码以在您选择的位置运行
**注:**以下函数是用 Node.js 编写的
const https = require('https');
function main(params) {
return new Promise((resolve, reject) => {
// Replace the string "R4nd0m5tr1ng0fCh4r4ct3r5" with your own value to secure access to your own specific endpoint
// An example to implement the query parameter '?token=R4nd0m5tr1ng0fCh4r4ct3r5'
if (params.token !== "R4nd0m5tr1ng0fCh4r4ct3r5") {
process.exit();
}
const pdparams = {
"service_key": "<PagerDuty service key>",
"description": params.description,
"event_type": "trigger"
}
const options = {
hostname: 'events.pagerduty.com',
port: 443,
path: '/generic/2010-04-15/create_event.json',
method: 'POST'
}
const req = https.request(options, (resp) => {
let data = '';
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', () => {
const info = JSON.parse(data);
console.log(info);
params.info = info;
resolve(params);
});
}).on("error", (err) => {
console.log(err);
reject({
statusCode: 500,
headers: {'Content-type': 'application/json'},
body: {message: 'Problem calling pagerduty', error: err}
});
});
req.write(JSON.stringify(pdparams));
req.end();
});
}
-
单击此处 以在 IBM Cloud Functions中创建操作。
-
为操作提供名称并选择您选用的语言。 对于上面的示例,选择的是 Node.js 10。
-
单击“创建”并插入示例代码,确保相应的字段已更改。
-
在“端点”下,选中“作为 Web 操作启用”旁边的框。
-
使用以 .json 结尾的给定 URL 作为 DR 通知的端点 URL,确保在末尾插入查询参数。