MongoDB单点转复制集(一)

背景介绍

公司生产环境用的是MongoDB3.2.8版本,且是单点(一群开发随便起了个mongo就用上了,根本没考虑高可用)。目前数据1T多,现在打算将其转换为高可用部署。本系列文章记录整个过程。由于是生产环境,还是必须要谨慎验证的。

在这个过程中,主要实现以下两个目的:

  1. 了解MongoDB操作,整理相关的配置;
  2. 在测试环境操作,并记录相关操作。

1,还原MongoDB单点测试环境

步骤如下:

1.1 启动(单点配置文件)

bin/mongod -f conf/mongodb.conf

启动配置文件为:

systemLog:
  destination: file
  path: "/mongodb-3.2.8/logs/mongodb.log"
  logAppend: true

storage:
  dbPath: "/mongodb-3.2.8/data"
  journal:
    enabled: true
  directoryPerDB: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 20

processManagement:
  fork: true

net:
  bindIp: 0.0.0.0
  port: 27017

setParameter:
  enableLocalhostAuthBypass: true

#replication:
#  replSetName: "sprintrs1"

security:
  clusterAuthMode: keyFile
  keyFile: "/mongodb-3.2.8/conf/.keyFile"

注意关于replication的配置是注释掉的。

1.2 初始化操作

执行以下命令:

use admin;

db.createUser({ user: "username", pwd: "password", roles: [{ role: "root", db: "admin" }] })

db.auth("username","password");

show dbs;

exit;

操作截图:

1.3 还原生产数据

执行以下命令:

nohup bin/mongorestore --host 127.0.0.1 --port 27017 --authenticationDatabase admin -u username -p password -d db1  /mongodb_backup/db1/20220507/db1 1>/temp/nohup.out 2>&1 &

开始恢复:

1.4 恢复完成

登录之后查看show dbs;

2 单机转复制集

2.1停止服务

将MongoDB停止服务,执行以下命令:

bin/mongod --shutdown -f conf/mongodb.conf

2.2 修改配置文件

在配置文件中增加replication的配置,如下:

systemLog:
  destination: file
  path: "/mongodb-3.2.8/logs/mongodb.log"
  logAppend: true

storage:
  dbPath: "/mongodb-3.2.8/data"
  journal:
    enabled: true
  directoryPerDB: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 20

processManagement:
  fork: true

net:
  bindIp: 0.0.0.0
  port: 27017

setParameter:
  enableLocalhostAuthBypass: true

replication:
  replSetName: "sprintrs1"

security:
  clusterAuthMode: keyFile
  keyFile: "/mongodb-3.2.8/conf/.keyFile"

2.3 启动MongoDB

执行以下命令:

bin/mongod -f conf/mongodb.conf

2.4 执行复制集初始化

登录mongo,进行初始化:

rs.initiate({
  _id: "sprintrs1",
  members: [{
    _id: 0,
    host: "192.168.1.27:27017"
  }]
})

如下图:

 2.5 查看replication相关信息

执行下面的命令查看相关oplog信息

rs.printReplicationInfo()

查看 Oplog 的状态,输出信息包括 oplog 日志大小,操作日志记录的起始时间。

 db.getReplicationInfo()  

可以用来查看oplog的状态、已使用的oplog的大小、存储的时间范围。

 知识点:

oplog是local库下的一个capped collection;

local.oplog.rs集合用来记录Primary节点的操作;

每个复制集节点都有oplog,每个成员都可以作为同步的源;

在64位的Linux, Solaris, FreeBSD, and Windows 系统中,Mongodb默认将其大小设置为可用disk空间的5%(默认最小为1G,最大为50G);

3 单机转复制集完成

单节点的MongoDB是直接可以转换为复制集集群的一个节点的。在只有一个节点时,该节点就是primary节点。当然只有一个primary节点,肯定也是没有高可用性的。下节我们继续往复制集中添加节点。

欢迎大家指正!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值