一、mongodb安装
1.推荐方法:使用 YUM 源(兼容性最好)
echo "[mongodb-org-8.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/8/mongodb-org/8.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://pgp.mongodb.com/server-8.0.asc" > /etc/yum.repos.d/mongodb-org-8.0.repo
2、安装
sudo yum install -y mongodb-org
3、启动服务:
# 启动 MongoDB 服务
sudo systemctl start mongod
# 设置开机自动启动
sudo systemctl enable mongod
# 检查服务运行状态
sudo systemctl status mongod
# 重启服务
sudo systemctl restart mongod
检测版本
|--------------------------------|-----------------|----------------------|
| mongod --version | 服务端版本 | db version v8.0.26 |
| mongosh --version | 客户端 Shell版本 | 2.8.3 |
| mongosh 进入后执行 db.version() | 当前连接到的数据库版本 | 8.0.26 |
快速检测是否可用
mongosh --eval "db.runCommand({ping: 1})"
检测错误:
systemctl status 显示的信息不完整,最关键的报错原因在 MongoDB 的日志文件里。请执行以下命令,把最后几十行日志发给我:
sudo tail -50 /var/log/mongodb/mongod.log
尝试直接启动以获取更详细报错
sudo mongod --config /etc/mongod.conf
5、选项:修改默认存放位置
默认位置
使用 YUM 安装时,MongoDB 会默认创建以下目录
| 目录类型 | 默认路径 |
|---|---|
| 数据目录 | /var/lib/mongo |
| 日志目录 | /var/log/mongodb |
修改目录位置
sudo mkdir -p /data/mongo
sudo mkdir -p /data/log/mongodb/mongod.log
/data/log/mongodb/mongod.log 这个是文件
修改目录所有者
MongoDB 服务默认以 mongod 用户运行,必须让这个用户拥有新目录的读写权限
sudo chown -R mongod:mongod /data/mongo
sudo chown -R mongod:mongod /data/log/mongodb
编辑配置文件
MongoDB 的主配置文件位于 /etc/mongod.conf。使用 vim 或 nano 等编辑器打开它
sudo vim /etc/mongod.conf
修改配置项
在配置文件中找到并修改 storage.dbPath 和 systemLog.path 这两项-1-3-7。修改后的内容示例如下
systemLog:
destination: file
logAppend: true
path: /data/log/mongodb/mongod.log # 修改为你的新日志路径
storage:
dbPath: /data/mongo # 修改为你的新数据路径
journal:
enabled: true
重启服务生效
sudo systemctl restart mongod
二、创建副本集群
第一步:修改配置文件(三台机器都要做)
在每台机器上编辑 /etc/mongod.conf,确保以下配置正确
# 网络配置
net:
port: 27017
bindIp: 192.168.1.10 # 或改为具体的内网IP,如 192.168.1.10
# 副本集配置(关键!三台机器必须完全一致)
replication:
replSetName: "rs0"
特别注意:
-
三台机器的
replSetName必须完全相同 (都是rs0)。 -
bindIp要确保其他机器能访问。生产环境建议填写具体的内网 IP,而不是0.0.0.0。 -
YAML 格式对缩进 敏感,确保每层缩进是两个空格。
第二步:重启 MongoDB 服务(每台机器)
修改完配置文件后,在每台机器上执行
sudo systemctl restart mongod
sudo systemctl status mongod # 确认状态是 active (running)
第三步:初始化副本集(只在一台机器上执行)
选择任意一台机器(通常是网络最好的那台),连接到 MongoDB
mongosh --host 192.168.1.10 --port 27017
然后执行初始化命令(注意替换成你的三个节点的实际 IP):
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "192.168.1.10:27017", priority: 2 }, // 优先级更高,更可能成为 Primary
{ _id: 1, host: "192.168.1.11:27017", priority: 1 },
{ _id: 2, host: "192.168.1.12:27017", priority: 1 }
]
})
// 优先级更高,更可能成为 Primary
第四步:验证集群状态
在同一个 mongosh 会话中执行
rs.status()
查看输出中的 members 数组,应该能看到:
-
一个节点
stateStr: "PRIMARY"(主节点) -
两个节点
stateStr: "SECONDARY"(从节点)
第五步:测试数据同步
在主节点上写入一条测试数据:
use testDB
db.testCollection.insertOne({ test: "hello replica set" })
然后连接到任意一个从节点,执行:
rs.secondaryOk() // 允许从节点读取
use testDB
db.testCollection.find()
三、mongodb设置密码
第一步:连接 MongoDB 并创建管理员用户(连接主的mongodb)
首先,像之前一样连接到 MongoDB Shell(此时还不需要密码)
mongosh --host 192.168.1.10 --port 27017
在 Shell 中,切换到 admin 数据库,然后创建一个拥有 root 角色的超级管理员用户
// 切换到 admin 数据库
use admin
// 创建管理员用户(请将 'yourSecurePassword' 替换为你自己的强密码)
db.createUser({
user: "admin",
pwd: "yourSecurePassword", // 这里设置你的密码
roles: [ { role: "root", db: "admin" } ]
})
第二步:修改配置文件,开启认证
| 配置项 | 作用范围 | 是否必须一致 | 说明 |
|---|---|---|---|
| 管理员账户密码 | 客户端连接验证 | 不必一致 | 这是你的应用或运维人员连接时使用的密码。你只需要在任意一台 机器的 admin 数据库中创建一个高权限用户,这个用户信息会通过副本集的数据同步自动复制到其他节点。因此,你只需设置一次,三台机器会共享同一个用户认证体系。 |
| KeyFile(内部认证密钥) | 副本集节点间通信 | 必须完全一致 | 这是集群内部节点互相验证身份的"暗号"。所有三台机器的 KeyFile 内容必须一模一样,否则节点之间无法建立信任关系,副本集会直接挂掉。 |
创建好用户后,需要修改 MongoDB 的配置文件 /etc/mongod.conf,让它要求客户端提供身份验证
KeyFile 是 MongoDB 副本集内部节点之间进行身份验证的共享密钥文件。它的作用是
-
节点间认证:集群中的每个节点在与其他节点通信时,都需要使用这个 KeyFile 来证明自己的身份。
-
安全通信基础:它是开启副本集内部安全通信的前提。
-
集群一致性 :所有节点必须使用内容完全相同的 KeyFile,否则它们无法加入同一个副本集。
如何配置 KeyFile
第一步:在每台机器上创建相同的 KeyFile
在其中一台机器上生成 KeyFile:
# 生成一个包含随机内容的 KeyFile
openssl rand -base64 756 > /etc/mongodb-keyfile
# 设置严格权限,只有 mongod 用户可读
chmod 400 /etc/mongodb-keyfile
chown mongod:mongod /etc/mongodb-keyfile
将该文件复制到其他两台机器的相同路径 (例如 /etc/mongodb-keyfile),并确保权限和所有者都一致:
# 在其他机器上执行
chmod 400 /etc/mongodb-keyfile
chown mongod:mongod /etc/mongodb-keyfile
第二步:修改所有节点的配置文件
在每台机器 的 /etc/mongod.conf 中,添加或修改 security 部分:
sudo vim /etc/mongod.conf
security:
authorization: enabled # 如果你暂时不想开启密码认证,可以先写 disabled
keyFile: /etc/mongodb-keyfile
-
keyFile路径必须与第一步中存放的位置一致。 -
如果你现在不想启用密码认证(
authorization),可以先设置为disabled,但keyFile必须配置。这样节点间会使用 KeyFile 认证,但客户端连接无需密码。
第三步:重启各个节点(按顺序)
为了不影响服务可用性,建议按以下顺序重启(这很重要):
先重启所有从节点(Secondary):
# 在每台从节点上
systemctl restart mongod
- 最后重启主节点(Primary):主节点重启后,集群会自动重新选举。
验证 KeyFile 是否生效
重启完成后,连接到任意节点,执行
mongosh --host 192.168.1.10 --port 27017 -u admin -p 123456 --authenticationDatabase admin
rs.status()
security 这个验证和用户名登录是一会事吗
|---------------------------------|-----------------------------------------------------------------------------------------------------------|-------------------------------------------------|
| security.authorization 配置 | 服务器的全局安全策略 。设置为 enabled 时,服务器会要求 所有连接都必须通过认证;设置为 disabled 时,服务器不要求认证,任何连接都可以访问(但可能受其他限制)。 | 大楼的门禁总闸。打开时,所有人必须刷卡才能进入;关闭时,大门敞开,任何人都能自由进出。 |
| 用户名/密码认证 | 客户端证明身份的具体方式之一。当门禁开启后,你需要通过"刷卡"(提供用户名和密码)来验证身份。 | 门禁卡。你必须有正确的卡才能通过门禁。 |