前言
MongoDb的云服务有点贵,所以自建一个来用,简单记录一下,参考MongoDb官网链接
一、系统优化
内核参数优化
vim /etc/sysctl.conf
vm.max_map_count = 262144
vm.swappiness = 1
vm.dirty_background_ratio = 3
vm.dirty_ratio = 5
vm.zone_reclaim_mode = 0
vm.min_free_kbytes = 2097152
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 3
执行以下命令生效
sudo sysctl -p
二、安装
从终端安装 gnupg 和 curl(如果尚未安装):
sudo apt-get install gnupg curl
要导入 MongoDB 公共 GPG 密钥,请运行以下命令:
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg \
--dearmor
创建列表文件
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
重新加载包数据库
sudo apt-get update
安装MongoDB Community Server
sudo apt-get install -y mongodb-org
新建数据目录并赋权
mkdir /data/mongodb/data
sudo chown -R mongodb:mongodb /data/mongodb/data
修改mongodb的数据目录,dbPath改为对应的数据目录,security.authorization默认没有,可以先不开启,等新增管理员账号后再开启
vim /etc/mongod.conf
storage:
dbPath: /data/mongodb/data
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
port: 27017
bindIp: 192.168.1.2
processManagement:
timeZoneInfo: /usr/share/zoneinfo
fork: true
pidFilePath: /var/run/mongodb/mongod.pid
security:
authorization: enabled
三、新增管理员
连接mongo
mongosh "mongodb://192.168.1.2:27017"
新增管理员账号
use admin
db.createUser({
user: "admin",
pwd: "自定义密码",
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" },
{ role: "clusterAdmin", db: "admin" }
]
})
启用认证
vim /etc/mongod.conf
添加以下配置
security:
authorization: enabled
四、服务管理
systemctl enable mongod
systemctl status mongod
systemctl start mongod
systemctl stop mongod
五、优化日志
MongoDb的日志是一个大文件,时间长了占用空间会越来越大,改为一天一个,最多存储7天,配置里一定要添加pid文件的存储位置, pidFilePath: /var/run/mongodb/mongod.pid
创建lograte配置文件
/etc/logrotate.d/mongodb
/var/log/mongodb/mongod.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 mongodb mongodb
postrotate
/bin/kill -SIGUSR1 `cat /var/run/mongodb/mongod.pid 2>/dev/null` 2>/dev/null || true
endscript
}
参数 | 说明 |
---|---|
daily |
每天轮转一次 |
rotate 7 |
保留最近 7 天的日志 |
compress |
压缩旧日志 |
delaycompress |
延迟压缩,保留一天未压缩的日志 |
notifempty |
如果日志为空则不轮转 |
create 640 mongodb mongodb |
创建新日志文件,权限为 640,属主为 mongodb 用户 |
postrotate ... endscript |
通知 MongoDB 切换日志文件 |
测试 logrotate
配置(可选)
sudo logrotate -vf /etc/logrotate.d/mongodb
写在最后的话
资源限制不用修改,如果是通过软件包管理器(例如 yum 或 apt)安装的 MongoDB,则自动安装的服务文件中已包含这些 ulimit 值。