一、常用配置项
MongoDB的配置文件默认在Linux下为 /etc/mongod.conf
,在Windows下为 C:\Program Files\MongoDB\Server\版本\bin\mongod.cfg
。
常用配置项如下:
# 数据文件
dbpath=/path/to/data/db
# 日志文件
logpath=/path/to/mongodb.log
# 日志级别(0代表无日志,1代表错误日志,2代表警告日志,3代表调试日志)
loglevel=2
# 端口号
port=27017
# 是否开启鉴权
auth=true
# 主机名
bind_ip=127.0.0.1
1、数据文件和日志文件
MongoDB会将所有的数据存放在数据文件中,一般为/data/db
目录。同时,也需要设置日志文件的路径和相关参数,如下所示:
dbpath=/path/to/data/db # 数据文件
logpath=/path/to/mongodb.log # 日志文件
logappend=true # 日志追加
journal=true # 是否启用文件日志提供数据恢复点和性能保障
2、端口号和主机名
端口号默认为 27017
,如果有多个 MongoDB 实例运行在同一台计算机上,则需要设置不同的端口号。同时,bind_ip
配置项用于指定运行 MongoDB 实例的 IP 地址,可以是一个或多个IP地址。
port=27017 # 端口号
bind_ip=127.0.0.1 # 自动绑定到本机环回地址
3、鉴权
在MongoDB部署中,鉴权是非常重要的,可以避免未授权的用户连接到数据库。如果需要启用鉴权,则需要在配置文件中添加auth=true
配置项。
auth=true # 是否开启鉴权
二、MongoDB的安全
为了保障 MongoDB 数据库系统的健康性和安全性,我们需要对安全进行漏洞检测和防范措施,下面进行详细介绍。
1、限制IP访问
在发布生产环境前,我们需要对 MongoDB 的访问进行设置,在 mongod.conf
文件中限制 IP 访问、或其他无效访问端口。
bind_ip = your_server_ip
port = 27017
2、启用授权访问
限制访问后,我们还需要对 MongoDB 的访问进行鉴权,可以使用 username + password + database
方式。
bind_ip = 127.0.0.1
port = 27017
auth=true
# 设置客户端需要登录的账号和密码
setParameter = authenticationMechanisms=MONGODB-CR,SCRAM-SHA-1
security:
authorization: enabled # 浅拷贝默认的用户超级管理员,其他浅拷贝不存在角色和权限,需要新建用户并创建角色授权
3、使用TLS/SSL安全连接MongoDB
为了防止中间人攻击和确认交流时服务器端的身份,可以使用 SSL/TLS 方式加密通信,设置 SSL/TLS 密钥和证书。
# 设置SSL/TLS证书密钥路径和密码
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/mongodb/ssl/mongo.pem # 服务器端证书
PEMKeyPassword: your_key_password
CAFile: /etc/mongodb/ssl/mongo-ca.pem # CA证书
allowInvalidCertificates: true # 是否允许使用无效证书
allowInvalidHostnames: true # 是否允许使用无效的主机名
三、性能优化
MongoDB 在应用中随着时间的推进数据量不断增长,当写入操作时,IO次数也会不断增加,所以我们需要对其性能进行优化。
1、缓存
在 MongoDB 的启动参数中设置 cacheSizeGB
,使用 mmapv1 存储引擎可以在内存中缓存所有数据,而 WiredTiger 则可以通过设置一个大的 cacheSizeGB
参数来缓存大量数据。
# MMAPv1存储引擎中使用缓存设置
storage:
mmapv1:
smallFiles: true
engineConfig:
cacheSizeGB: 4 # 分配4GB缓存
# 使用WiredTiger存储引擎的缓存设置
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 分配4GB缓存
2、索引
索引可以提高查询效率,但是如果数据量太大或者索引太多,会增加内存的消耗,因此我们需要根据具体情况进行制定的索引策略。
// 构建索引
db.orders.ensureIndex({customer_id:1})
// 删除索引
db.orders.dropIndex({customer_id:1})
3、修改MongoDB的运行参数
常用的 MongoDB 运行参数有:writeConcern
,w
,j
,journalCommitInterval
等。这些参数不仅能够提高索引的查询效率,还可以提高写入的效率。
writeConcern: # MMAPv1存储引擎的标准写入
w: 1
j: true
journalCommitInterval: 100 # 控制数据写入频率(默认100毫秒)
四、备份和恢复
在 MongoDB 的部署过程中,很容易出现各种各样的错误,所以我们需要对其进行备份,以便快速恢复数据。
1、mongodump
mongodump
是MongoDB CLI工具,可在MongoDB的运行状态下备份指定的集合和数据库,支持redis恢复方式。执行备份操作时需要指定需要备份的数据库、集合、备份文件储存路径、备份操作在执行后立即持久化到硬盘。
mongodump --host your_database_host_address --port 27017 --username user --password password --gzip --archive=data/date.gz
2、mongorestore
mongorestore
是MongoDB CLI工具,可在MongoDB的运行状态下备份用户请求的数据库,在恢复操作时需要重新创建一个空的 Mongo 数据库,然后将备份中的数据复制到新创建的空数据库中。
mongorestore --host your_database_host_address --port 27017 --gzip --archive=data/date.gz --username user --password password
3、MongoDB的自动备份
为了保障 MongoDB 数据库系统的健康性和安全性,我们需要对数据库进行自动备份,可以使用脚本语言如 Python 或 Shell 来实现。下面是一个 Python 自动备份的示例代码。
#!/usr/bin/env python
# coding=utf-8
import os
import time
import sys
import pymongo
'''
MongoDB自动备份脚本
author:Echo
'''
# 数据库IP地址
host = 'localhost'
# 登录MongoDB的用户名
user = 'user'
# 登录MongoDB的密码
password = 'password'
# 备份的数据库,若备份所有数据库,db则为admin
db = 'admin'
# 备份的文件名前缀
name = 'mongodb-backup'
# 备份的文件存储路径
path = '/data/mongodb/backup'
if not os.path.exists(path):
os.makedirs(path)
# 当前系统时间
date = time.strftime('%Y-%m-%d-%H-%M', time.localtime(time.time()))
# 合并出备份文件的绝对路径
file_name = path + '/' + name + '.' + date + '.' + db + '.gz'
# 执行备份的命令
mongodump_command = "mongodump --host %s --port 27017 --username %s --password %s --db %s --gzip --archive=%s" % (host, user, password, db, file_name)
if os.system(mongodump_command) == 0:
print("MongoDB backup OK")
else:
print("MongoDB backup Failed")
五、总结
本文详细讲解了 MongoDB 的常用配置项、安全性设置、性能优化和备份恢复等内容。在实际应用中,根据实际情况设置适合自己的参数和方法并进行定期的备份是非常必要的。