背景介绍
公司生产环境用的是MongoDB3.2.8版本,且是单点(一群开发随便起了个mongo就用上了,根本没考虑高可用)。目前数据1T多,现在打算将其转换为高可用部署。本系列文章记录整个过程。由于是生产环境,还是必须要谨慎验证的。
在这个过程中,主要实现以下两个目的:
- 了解MongoDB操作,整理相关的配置;
- 在测试环境操作,并记录相关操作。
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节点,肯定也是没有高可用性的。下节我们继续往复制集中添加节点。
欢迎大家指正!