0
点赞
收藏
分享

微信扫一扫

Mongodb中的PSA转换为PSS架构

PSA架构的问题

众所周知,PSA架构中如果Secondary发生故障会带来一系列的问题,包括

  • Majority写入无法完成
  • 造成主库内存压力的增加
  • 重启主库需要更多的时间
  • 特殊情况下会导致数据的丢失

所以副本集架构中最好的方式是PSS的架构


当前环境

Primary

vm003:28001

Secondary

vm002:28001

Arb

vm001:28000

需求是将副本集架构修改为:

Primary

vm003:28001

Secondary

vm002:28001

Secondary

vm001:28001

操作过程

添加Secondary节点

方法1:使用初始化的方式进行同步

  • 在vm001上面创建mongodb实例

```

[root@vm001 conf]# cat rs1.conf 

storage:

  dbPath: "/mg_data/rs1/data"

systemLog:

  destination: file

  path: "/mg_data/rs1/log/mongo1.log"

  logAppend: true

net:

  port: "28001"

  bindIp: localhost,vm001

processManagement:

  fork: true

replication:

  replSetName: rs0

security:

  keyFile: /mg_data/rs1/pki/myrp-keyfile

```

启动实例

mongd -f rs1.conf 


  • 添加实例

添加之前建议备份rs.conf()的内容

```

rs.add("vm001:28001");

```


方式2:使用同步其它节点数据目录的方式进行同步

对于一些数据量比较大的节点,初始化的时间可能会很长,同时会对主库的性能造成一定的影响,那么这个时候就可以采用同步其它节点数据目录的方式快速创建备库。但是PSA结构下要注意对majority写入的影响

  • 修改默认写关注

```

db.adminCommand({

  "setDefaultRWConcern" : 1,

  "defaultWriteConcern" : {

    "w" : "majority"

  }

})

```

在同步现有secondary数据目录的时候需要先停止这个secondary。但对于PSA架构来说停止secondary的关闭会带来一系列的影响。


  • 停止备库并且复制备库数据文件目录到新节点

```

vm002上操作

mongod -f /mg_data/rs1/conf/rs1.conf

scp -r /mg_data/rs1/data/ vm001:/mg_data/rs1/

```


  • 在vm003上面启动mongod实例


  • remove原来的仲裁节点

```

mongod -f /mg_data/rs1/conf/arb_rs1.conf --shutdown

连接到primary

rs.remove("vm001:28000")

```


  • 恢复默认的写关注

db.adminCommand({

  "setDefaultRWConcern" : 1,

  "defaultWriteConcern" : {

    "w" : "majority"

  }

})


总结

需要注意的问题:

1、注意当Secondary关闭之后对主库的影响

2、注意OPLOG的保留期限






举报

相关推荐

0 条评论