本文详细记录了 MongoDB 在 Linux 环境下的单机安装与副本集(Replica Set)集群部署全流程。

09-38-08-J2VxkM_扫码_搜索联合传播样式-标准色版

1. 下载与安装

请根据需求下载对应的 MongoDB 版本。

以下以 MongoDB 5.0 为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cd /usr/local/
# 下载安装包
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.23.tgz

# 解压并重命名
tar -zxvf mongodb-linux-x86_64-rhel70-5.0.23.tgz
mv mongodb-linux-x86_64-rhel70-5.0.23 mongodb
rm mongodb-linux-x86_64-rhel70-5.0.23.tgz

# 创建数据和日志目录
cd /data/
mkdir mongodb
cd mongodb/
mkdir logs data conf

2. 环境变量配置

编辑 /etc/profile 文件,添加 MongoDB 路径到 PATH。

1
vi /etc/profile

添加如下内容:

1
2
export MONGO_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGO_HOME/bin;

使配置生效:

1
source /etc/profile

3. 配置文件

新建并编辑配置文件 /data/mongodb/conf/mongodb.conf

1
2
3
4
5
6
port=27017 # 端口
bind_ip=0.0.0.0 # 允许任意IP连接
dbpath=/data/mongodb/data # 数据库存放路径
logpath=/data/mongodb/logs/mongodb.log # 日志文件路径
fork=true # 后台运行
auth=true # 开启认证

4. 解决依赖问题 (可选)

如果在启动时报错缺少 ssl.so.10 等文件,说明缺少 compat-openssl10 库。

下载 compat-openssl10 并安装:

1
rpm -ivh compat-openssl10-1.0.2o-3.el8.x86_64.rpm

5. 服务管理

启动与停止

1
2
3
4
5
# 启动
mongod --config /data/mongodb/conf/mongodb.conf

# 停止
killall mongod

配置开机自启 (init.d 方式)

创建启动脚本 /etc/init.d/mongodb.sh

1
vi /etc/init.d/mongodb.sh

写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/sh
#chkconfig: 2345 80 90
#description: mongodb

start() {
/usr/local/mongodb/bin/mongod --config /data/mongodb/conf/mongodb.conf
}

stop() {
/usr/local/mongodb/bin/mongod --config /data/mongodb/conf/mongodb.conf --shutdown
}

case "$1" in
start)
start
echo "mongodb start"
;;
stop)
stop
echo "mongodb stop"
;;
restart)
stop
start
echo "mongodb restart"
;;
esac

赋予权限并添加到服务:

1
2
3
chmod +x /etc/init.d/mongodb.sh
chkconfig --add mongodb.sh
chkconfig mongodb.sh on

6. 创建管理员用户

启动 MongoDB 后,进入控制台创建管理员账号。

1
2
3
4
5
6
7
8
9
10
# 进入 mongo shell
mongo

use admin
db.createUser({
user: 'admin',
pwd: '123456',
roles: [{ role: 'root', db: 'admin' }]
})
exit

连接格式示例:
mongodb://root:****@xx.xx.xx.xx:27017

7. 备份与恢复

全库导出 (mongodump)

1
mongodump -h localhost --port 27017 -u admin -p 123456 --out /data/mongo_backup/directory

全库导入 (mongorestore)

1
mongorestore -h localhost --port 27017  -u admin -p 123456 --drop /data/mongo_backup/directory

8. 副本集(Cluster)搭建

副本集(Replica Set)提供了更高的数据可用性。三台机器配置类似,区别在于配置文件及后续的初始化。

8.1 修改配置文件

在每台机器的 mongodb.conf 中添加 replSet 配置,并确保 keyFile 一致。

1
2
3
4
5
6
7
8
9
port = 27017
bind_ip = 0.0.0.0
replSet = rs0 # 集群名字
dbpath = /usr/local/mongodb/data/db
logpath = /usr/local/mongodb/data/logs/mongodb.log
fork = true
logappend = true
auth = true # 开启认证
keyFile = /usr/local/mongodb/data/mongodb.key # 安全认证文件

8.2 生成并分发 KeyFile

KeyFile 用于节点间的内部认证,必须一致且权限正确(600)。

1
2
3
4
5
# 生成密钥
openssl rand -base64 756 > mongodb.key

# 修改权限 (必须是 600,否则启动会报错)
chmod 600 mongodb.key

将生成的 mongodb.key 复制到所有节点的对应目录下。

8.3 初始化副本集

启动所有节点的 MongoDB 服务。登录任意一台(作为主节点),执行初始化:

1
2
3
4
5
6
7
8
rs.initiate({
_id: "rs0",
members: [
{ _id : 0, host : "192.168.56.101:27018" },
{ _id : 1, host : "192.168.56.102:27018" },
{ _id : 2, host : "192.168.56.103:27018" }
]
});

查看状态:

1
rs.status()

8.4 创建集群用户

PRIMARY 节点上创建用户:

1
2
use admin
db.createUser({user: 'handle', pwd: '123456', roles: ['root']})

8.5 修改集群 IP (Reconfig)

如果服务器 IP 发生变更,需要重新配置集群。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
use admin;
db.auth("admin", "admin12#$");

// 获取当前配置
cfg = rs.conf();

// 修改 Host
cfg.members[0].host = "192.168.1.10:27017";
cfg.members[1].host = "192.168.1.110:27017";
cfg.members[2].host = "192.168.1.12:27017";

// 应用新配置
// 注意:如果当前节点不是 Primary,可能需要强制执行
rs.reconfig(cfg, {force: true});