主机房断电的传闻每季度都有一次,容灾方案写在文档里三年没跑过,真出事就是开盲盒。季度演练把切换流程当真打:备份机房拉起服务、数据核对、切流验证,全程控制在5400秒以内。
演练开始先核对备份完整性:昨日全量备在位、归档连续、备份机房版本与生产一致。
local function preCheck()
local items = {}
items[#items + 1] = setsysvar("BK_FULL_YDAY", "") ~= ""
items[#items + 1] = tonumber(getsysvar("BK_ARCHIVE_GAP") or "0") == 0
items[#items + 1] = getsysvar("BK_VER_MATCH") == "1"
for i, ok in ipairs(items) do
if not ok then
return false, "前置项未过: " .. i
end
end
return true
end
备份机房拉起后跑冒烟清单,数据核对抽三名玩家全量字段比对,结果落演练台账。
local function drillVerify()
local pass = 0
for i = 1, 5 do
if smokeItem(i) then
pass = pass + 1
end
end
local drilled = tonumber(getsysvar("DRILL_PASS_CNT") or "0") + (pass == 5 and 1 or 0)
setsysvarex("DRILL_PASS_CNT", drilled, 1)
setsysvarex("DRILL_LAST", os.date("%m%d"), 1)
return pass
end
季度演练的台账连续三期全绿才算容灾可信;演练暴露的问题按严重度排期修复,演练的意义就是把惊喜提前变成待办。监控备份同步延迟,超过600秒说明同步链路退化,先修链路再谈演练。
preCheck读的三个标记靠前序脚本写入,演练脚本单独跑会读空值误判,标记链的依赖要在脚本头部注释清楚。演练用了真备份库,误操作会污染唯一副本,演练前先做演练库的快照,套娃备份不是浪费是纪律。smokeItem的五个冒烟项要覆盖读写两侧,只读校验发现不了写入路径的版本不兼容。演练时间选在工作日上午,出问题有人接手,周五下午演练是给自己挖坑。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 悬赏捕杀把玩家之间的恩怨变成可托付的系统行为:仇家难以亲自复仇时,花费金条发布悬赏,全服玩家接单击杀目标…
实战应用:用在哪里 策划改表是日常动作,漏填字段、引用了不存在的编号、数值越界这三类问题占了配表故障的绝大多数。等玩家报错再…
实战应用:用在哪里 行会擂台给中小行会提供了固定的对抗出口:挑战方击败守擂方后接管擂台,连胜次数决定每日结算奖励档位。接口层…
实战应用:用在哪里 世界首领战里玩家最关心的是伤害前十名:榜单要求随时插入、随时能按序取出,每来一条伤害记录都重新排序一次太…
实战应用:用在哪里 百人同屏的攻城战里,把每条移动、施法消息广播给全地图是最常见的性能失误。九宫格视野的做法是把地图切成等大…
实战应用:用在哪里 留言板、行会招募语、邮件标题这类字段会被玩家自由填写,并写入角色变量或转发给持久层。拼接式的写法一旦遇到…