副本集新增Delayed Secondary

副本集新增Delayed Secondary

前言

由于业务日志增多,mongo库日趋重要,随需要对mongo环境进行加固,为了防止误操作导致数据丢失,随将原replica set架构中的Arbiter节点转换为Delay Secondary节点。

架构图

原架构
副本集新增Delayed Secondary_第1张图片
新架构
副本集新增Delayed Secondary_第2张图片

考虑因素

  • 延迟节点的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()

你可能感兴趣的:(MongoDB,mongodb,数据)