副本集新增Delayed Secondary
前言
由于业务日志增多,mongo库日趋重要,随需要对mongo环境进行加固,为了防止误操作导致数据丢失,随将原replica set架构中的Arbiter节点转换为Delay Secondary节点。
架构图
原架构
新架构
考虑因素
- 延迟节点的priority:0,防止此节点被选举为Primary;
- 必须是hidden节点,防止应用程序连接到此节点进行读写;
- 因为是替换掉Arbiter节点,所以需要有投票权;
- 延迟时间必须小于oplog的窗口期;
部署
1、检查副本集状态
确保所有节点运行正常
PRIMARY>rs.status()
2、拷贝secondary数据文件
这样做的目的是加快创建延迟节点的数据同步时间。
2.1 新建临时目录,用于复制文件
# mkdir dfTmp
2.2 冻结secondary节点,防止数据写入
shardrs1:SECONDARY> db.fsyncLock()
{
"info" : "now locked against writes, use db.fsyncUnlock() to unlock",
"seeAlso" : "http://dochub.mongodb.org/core/fsynccommand",
"ok" : 1
}
注
意执行完此命令后窗口一定不要关闭,等待copy完成后使用db.fsyncUnlock()
锁,否则将无法连接到此节点, 只能kill掉进程,重新启动
2.3 复制数据文件:
新开一个session(窗口)执行操作
(–dbpath参数下的路径)
cp -R dbdata/shard1/ dfTmp/
2.4 解锁secondary节点
待复制完后,一定要记得解冻
shardrs1:SECONDARY> db.fsyncUnlock()
{ "info" : "unlock completed", "ok" : 1 }
2.5 拷贝数据文件
将复制出来的临时文件拷贝到目标服务器
scp -r dfTmp/shard1/* mongo@10.25.14.69:/data/johnny/dbdata/shard1/
3、启动新节点
以配置文件的方式启动新节点(可以直接拷贝原secondary节点的配置文件)
/apps/mongodb/bin/mongod -f /data/johnny/cfg/shard1.cnf
4、加入副本集
登录primary
,添加新节点为delayed secondary
PRIMARY> rs.add({
... host:"10.25.14.69:27001",
... priority:0,
... hidden:true,
... slaveDelay:3600})
{ "ok" : 1 }
5、检查新节点状态
Secondary>Rs.status()
SECONDARY> rs.printReplicationInfo()
configured oplog size: 2048MB
log length start to end: 1621220secs (450.34hrs)
oplog first event time: Sat Nov 11 2017 16:39:03 GMT+0800 (CST)
oplog last event time: Thu Nov 30 2017 10:59:23 GMT+0800 (CST)
now: Thu Nov 30 2017 14:05:56 GMT+0800 (CST)
6、移除Arbiter节点
检查新延迟节点同步数据没问题的话,方可移除Arbiter节点
PRIMARY> rs.remove("10.25.14.69:10002")
{ "ok" : 1 }
7、检查副本集状态:
PRIMARY>rs.status()