# MongoDB运维事件处理

# 运维事件发生-部署MongoDB服务

# 事件描述

需要在测试环境主机上部署MongoDB服务,同时添加mongo的环境变量。

# 事件处理

# 切换到app目录
[root@TEST ~]# cd /app
# 使用wget指令下载mongodb
[root@TEST app]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.4.27.tgz
# 解压缩到/app/mongodb目录下
[root@TEST app]# tar -zxvf mongodb-linux-x86_64-ubuntu1604-4.4.27.tgz -C /app/mongodb/
# 切换到mongodb目录
[root@TEST app]# cd mongodb
# 存放mongo配置文件
[root@TEST mongodb] mkdir conf
# 存放mongo日志
[root@TEST mongodb] mkdir logs
# 存放mongo数据
[root@TEST mongodb] mkdir mongodata
# 切换到conf目录
[root@TEST mongodb]# cd conf
# 创建配置文件,同时vim该文件,将下列配置写入
[root@TEST conf]# > mongodb.cnf
# 这里仅查看,实际是要用vim指令写入
[root@TEST conf]# cat mongodb.cnf 
net:
  bindIp: 0.0.0.0
  port: 27017
processManagement:
  fork: "true"
#security:
#  authorization: enabled
storage:
  dbPath: /app/mongodb/mongodata/
  journal:
      enabled: true
  directoryPerDB: true
  engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 3 
systemLog:
  destination: file
  path: /app/mongodb/logs/mongodb.log
  logAppend: true

# 启动MongoDB
[root@TEST ~]# /app/mongodb/mongodb-4.4.27/bin/mongod -f /app/mongodb/conf/mongodb.cnf

# 添加Mongo启动脚本到环境变量中
[root@TEST ~] vim /etc/profile
export PATH=/app/mongodb/mongodb-4.4.27/bin:$JAVA_HOME/bin:$PATH

# 验证Mongo的启动
## 可以看到mongo进程正常开启
[root@TEST ~]# ps aux | grep mongo
root        8189  4.1  1.2 1478972 86252 ?       Sl   16:40   0:01 /app/mongodb/mongodb-4.4.27/bin/mongod -f /app/mongodb/conf/mongodb.cnf
root        8260  0.0  0.0 213132   884 pts/0    S+   16:41   0:00 grep mongo

## 输入mongo指令进入mongo,如可以进入,即安装完成。
[root@TEST ~]# mongo
MongoDB shell version v4.4.27
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("37680433-585d-4f86-ac73-73167668b51b") }
MongoDB server version: 4.4.27
---
The server generated these startup warnings when booting: 
        2024-01-24T14:15:34.976+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
        2024-01-24T14:15:34.976+08:00: You are running this process as the root user, which is not recommended
        2024-01-24T14:15:34.976+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
---
> 

## 创建root账号
### 这一步很重要,必须要执行,且必须要妥善保管root账号的密码
> use admin
switched to db admin
> db.createUser({user:"root",pwd:"Dn@0Gx1g",roles:[{role:"root",db:"admin"}]});

# 运维事件发生-MongoDB迁移

# 事件描述

测试环境需要在新主机上部署MongoDB,同时将旧主机上的MongoDB相关数据迁移到新主机上。

# 事件处理

将任务项拆解为部署mongodb服务,旧库信息查询,旧库数据备份,新库创建以及用户创建,还原旧库数据,验证迁移结果这几个步骤来进行。

# 部署MongoDB服务

部署MongoDB服务参照运维事件发生-部署MongoDB服务来操作即可。

# 旧库信息查询

查询旧库里的数据库信息:

# 旧库操作,查看库里有哪些数据库,可以看到我们需要创建3个数据库
> show dbs;
# admin为默认库
admin         0.000GB
# config为默认库
config        0.000GB
# 要迁移的数据库
gravitee      0.006GB
# 要迁移的数据库
gravitee-am   0.002GB
# 要迁移的数据库
gravitee-log  0.763GB
# local为默认库
local         0.000GB

查询gravitee的用户信息:

# 使用gravitee库
> use gravitee;
switched to db gravitee
# 查看该库下的用户,可以看到下面只有一个gravitee用户
> show users;
{ 
	"_id" : "gravitee.gravitee",
	"user" : "gravitee",
	"db" : "gravitee",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "gravitee"
		},
		{
			"role" : "dbAdmin",
			"db" : "gravitee"
		}
	],
	"mechanisms" : [
		"SCRAM-SHA-1"
	]
}

查询gravitee-am库的用户信息:

> use gravitee-am;
switched to db gravitee-am
> show users;
{
	"_id" : "gravitee-am.gravitee",
	"user" : "gravitee",
	"db" : "gravitee-am",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "gravitee-am"
		},
		{
			"role" : "dbAdmin",
			"db" : "gravitee-am"
		}
	],
	"mechanisms" : [
		"SCRAM-SHA-1"
	]
}

查询gravitee-log库的用户信息:

> show users;
{
	"_id" : "gravitee-log.gravitee",
	"user" : "gravitee",
	"db" : "gravitee-log",
	"customData" : {
		
	},
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "gravitee-log"
		},
		{
			"role" : "dbAdmin",
			"db" : "gravitee-log"
		}
	],
	"mechanisms" : [
		"SCRAM-SHA-1"
	]
}

# 旧库数据备份

备份gravitee库:

root@TEST:~# cd /app/mongodb/mongodb-4.2.21/bin
root@TEST:/app/mongodb/mongodb-4.2.21/bin# ./mongodump -h 127.0.0.1:27017 -d gravitee -o /data/gravitee-20240124.json

备份gravitee-am库:

root@TEST:~# cd /app/mongodb/mongodb-4.2.21/bin
root@TEST:/app/mongodb/mongodb-4.2.21/bin# ./mongodump -h 127.0.0.1:27017 -d gravitee-am -o /data/gravitee-am-20240124.json

备份gravitee-log库:

root@TEST:/data# cd /app/mongodb/mongodb-4.2.21/bin
root@TEST:/app/mongodb/mongodb-4.2.21/bin# ./mongodump -h 127.0.0.1:27017 -d gravitee-log -o /data/gravitee-log-20240124.json
2024-01-25T10:12:36.197+0800	writing gravitee-log.log to /data/gravitee-log-20240124.json/gravitee-log/log.bson
2024-01-25T10:12:39.184+0800	[........................]  gravitee-log.log  14554/1196687  (1.2%)
2024-01-25T10:12:42.184+0800	[........................]  gravitee-log.log  26194/1196687  (2.2%)
2024-01-25T10:12:45.184+0800	[#.......................]  gravitee-log.log  51046/1196687  (4.3%)
2024-01-25T10:12:48.184+0800	[#.......................]  gravitee-log.log  66203/1196687  (5.5%)
2024-01-25T10:12:51.184+0800	[#.......................]  gravitee-log.log  88460/1196687  (7.4%)
2024-01-25T10:12:54.184+0800	[##......................]  gravitee-log.log  99962/1196687  (8.4%)
2024-01-25T10:12:57.184+0800	[##......................]  gravitee-log.log  108756/1196687  (9.1%)
2024-01-25T10:13:00.184+0800	[##......................]  gravitee-log.log  127491/1196687  (10.7%)
2024-01-25T10:13:03.184+0800	[###.....................]  gravitee-log.log  167715/1196687  (14.0%)
2024-01-25T10:13:06.184+0800	[####....................]  gravitee-log.log  199795/1196687  (16.7%)
2024-01-25T10:13:09.184+0800	[####....................]  gravitee-log.log  228360/1196687  (19.1%)
2024-01-25T10:13:12.184+0800	[#####...................]  gravitee-log.log  258670/1196687  (21.6%)
2024-01-25T10:13:15.184+0800	[######..................]  gravitee-log.log  330684/1196687  (27.6%)
2024-01-25T10:13:18.184+0800	[#######.................]  gravitee-log.log  374414/1196687  (31.3%)
2024-01-25T10:13:21.184+0800	[########................]  gravitee-log.log  419996/1196687  (35.1%)
2024-01-25T10:13:24.184+0800	[#########...............]  gravitee-log.log  476410/1196687  (39.8%)
2024-01-25T10:13:27.184+0800	[##########..............]  gravitee-log.log  519393/1196687  (43.4%)
2024-01-25T10:13:30.184+0800	[###########.............]  gravitee-log.log  584076/1196687  (48.8%)
2024-01-25T10:13:33.184+0800	[##############..........]  gravitee-log.log  709507/1196687  (59.3%)
2024-01-25T10:13:36.191+0800	[################........]  gravitee-log.log  844027/1196687  (70.5%)
2024-01-25T10:13:39.184+0800	[###################.....]  gravitee-log.log  956539/1196687  (79.9%)
2024-01-25T10:13:42.184+0800	[####################....]  gravitee-log.log  1006823/1196687  (84.1%)
2024-01-25T10:13:45.184+0800	[######################..]  gravitee-log.log  1137580/1196687  (95.1%)
2024-01-25T10:13:48.043+0800	[########################]  gravitee-log.log  1196687/1196687  (100.0%)
2024-01-25T10:13:48.045+0800	done dumping gravitee-log.log (1196687 documents)

# 新库创建以及用户创建

创建gravitee库以及gravitee用户:

# 如果gravitee库不存在,会自动创建该库
> use gravitee;
switched to db gravitee
# 为gravitee库添加用户,同时给用户设置密码,添加权限
> db.createUser({user:"gravitee",pwd:"vnk@1X0J",roles:["readWrite","dbAdmin"]});
# 测试鉴权
> db.auth('gravitee','vnk@1X0J');
# 返回1,代表鉴权成功,返回0代表鉴权失败
1

创建gravitee-am库以及gravitee用户:

# 如果gravitee-am库不存在,会自动创建该库
> use gravitee-am;
switched to db gravitee-am
# 为gravitee库添加用户,同时给用户设置密码,添加权限
> db.createUser({user:"gravitee",pwd:"vnk@1X0J",roles:["readWrite","dbAdmin"]});
# 测试鉴权
> db.auth('gravitee','vnk@1X0J');
# 返回1,代表鉴权成功,返回0代表鉴权失败
1

创建gravitee-log库以及gravitee用户:

> use gravitee-log;
switched to db gravitee-log
> db.createUser({user:"gravitee",pwd:"vnk@1X0J",roles:["readWrite","dbAdmin"]});
Successfully added user: { "user" : "gravitee", "roles" : [ "readWrite", "dbAdmin" ] }
> show users;
{
	"_id" : "gravitee-log.gravitee",
	"userId" : UUID("097f5303-d3b2-4cac-b73f-fe09cd3f4139"),
	"user" : "gravitee",
	"db" : "gravitee-log",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "gravitee-log"
		},
		{
			"role" : "dbAdmin",
			"db" : "gravitee-log"
		}
	],
	"mechanisms" : [
		"SCRAM-SHA-1",
		"SCRAM-SHA-256"
	]
}
# 测试鉴权
> db.auth('gravitee','vnk@1X0J');
# 返回1,代表鉴权成功,返回0代表鉴权失败
1

# 还原旧库数据

还原gravitee库的数据:

[root@TEST ~]# cd /apptools/mongodb-tools/bin
[root@TEST bin]# ./mongorestore -h 127.0.0.1 --port 27017 -u root -p 'Dn@0Gx1g' /data/gravitee-20240124.json

还原gravitee-am库的数据:

[root@TEST ~]# cd /apptools/mongodb-tools/bin
[root@TEST bin]# ./mongorestore -h 127.0.0.1 --port 27017 -u root -p 'Dn@0Gx1g' /data/gravitee-am-20240124.json

还原gravitee-log库的数据:

[root@TEST ~]# cd /apptools/mongodb-tools/bin
# 这里还原的是库里某一个集合,这个库里就一个集合
# 这里恢复的是log这一个集合。
[root@TEST bin]# ./mongorestore -h 127.0.0.1:27017 --nsInclude=gravitee-log.log /data/gravitee-log-20240124.json
2024-01-25T10:54:25.439+0800	preparing collections to restore from
2024-01-25T10:54:25.440+0800	reading metadata for gravitee-log.log from /data/gravitee-log-20240124.json/gravitee-log/log.metadata.json
2024-01-25T10:54:25.477+0800	restoring gravitee-log.log from /data/gravitee-log-20240124.json/gravitee-log/log.bson
2024-01-25T10:54:28.614+0800	[##......................]  gravitee-log.log  145MB/1.57GB  (9.0%)
2024-01-25T10:54:31.440+0800	[###.....................]  gravitee-log.log  225MB/1.57GB  (14.0%)
2024-01-25T10:54:34.440+0800	[######..................]  gravitee-log.log  424MB/1.57GB  (26.4%)
2024-01-25T10:54:37.443+0800	[########................]  gravitee-log.log  537MB/1.57GB  (33.5%)
2024-01-25T10:54:40.439+0800	[##########..............]  gravitee-log.log  673MB/1.57GB  (41.9%)
2024-01-25T10:54:43.439+0800	[############............]  gravitee-log.log  826MB/1.57GB  (51.4%)
2024-01-25T10:54:46.440+0800	[##############..........]  gravitee-log.log  943MB/1.57GB  (58.8%)
2024-01-25T10:54:49.505+0800	[###############.........]  gravitee-log.log  1.01GB/1.57GB  (64.7%)
2024-01-25T10:54:53.362+0800	[################........]  gravitee-log.log  1.05GB/1.57GB  (67.2%)
2024-01-25T10:54:56.604+0800	[#################.......]  gravitee-log.log  1.14GB/1.57GB  (72.5%)
2024-01-25T10:54:58.440+0800	[##################......]  gravitee-log.log  1.21GB/1.57GB  (77.4%)
2024-01-25T10:55:01.439+0800	[####################....]  gravitee-log.log  1.32GB/1.57GB  (84.2%)
2024-01-25T10:55:04.439+0800	[#####################...]  gravitee-log.log  1.42GB/1.57GB  (90.7%)
2024-01-25T10:55:07.439+0800	[######################..]  gravitee-log.log  1.50GB/1.57GB  (95.8%)
2024-01-25T10:55:09.087+0800	[########################]  gravitee-log.log  1.57GB/1.57GB  (100.0%)
2024-01-25T10:55:09.087+0800	finished restoring gravitee-log.log (1196687 documents, 0 failures)
2024-01-25T10:55:09.087+0800	no indexes to restore for collection gravitee-log.log
2024-01-25T10:55:09.087+0800	1196687 document(s) restored successfully. 0 document(s) failed to restore.

# 验证迁移结果

这里以gravitee库为例,验证迁移结果:

# 使用gravitee库
> use gravitee
switched to db gravitee
# 查看库中的所有集合
> show collections
apiheaders
audits
events
metadata
roles
views
# 查看某一个具体的集合,这里查看的是roles这个集合的数据
> db.roles.find();
{ "_id" : { "scope" : 1, "name" : "API_PUBLISHER" }, "description" : "Management Role. Created by Gravitee.io.", "defaultRole" : false, "system" : false, "permissions" : [ 1604, 1804, 1204, 1715, 1515, 1304, 1404 ], "createdAt" : ISODate("2024-01-23T08:52:12.078Z"), "updatedAt" : ISODate("2024-01-23T08:52:12.078Z"), "_class" : "io.gravitee.repository.mongodb.management.internal.model.RoleMongo" }
{ "_id" : { "scope" : 1, "name" : "USER" }, "description" : "Default Management Role. Created by Gravitee.io.", "defaultRole" : true, "system" : false, "permissions" : [ 1604, 1204, 1715, 1504 ], "createdAt" : ISODate("2024-01-23T08:52:12.158Z"), "updatedAt" : ISODate("2024-01-23T08:52:12.158Z"), "_class" : "io.gravitee.repository.mongodb.management.internal.model.RoleMongo" }