在 MongoDB 中,keyFile 是用于副本集成员间内部认证的密钥文件。它是一个包含随机字符串的文件,所有副本集成员必须使用相同的 keyFile 进行通信。以下是创建和配置 keyFile 的详细步骤。
创建 KeyFile 的步骤
1. 生成随机字符串
使用以下命令生成一个随机字符串(建议至少 6 字节长度):
openssl rand -base64 756
-base64 756:生成一个长度为 756 字节的 Base64 编码字符串。
输出示例:
c3VwZXJzZWNyZXRrZXlmaWxlCg==
2. 将字符串保存到文件
将生成的字符串保存到一个文件中(例如 /etc/mongo-keyfile):
sudo sh -c "openssl rand -base64 756 > /etc/mongo-keyfile"
3. 设置文件权限
确保 keyFile 的权限正确,只有 mongod 用户可以读取该文件:
sudo chmod 600 /etc/mongo-keyfile
sudo chown mongod:mongod /etc/mongo-keyfile
4. 验证文件内容
确认文件内容是否正确:
sudo cat /etc/mongo-keyfile
配置 KeyFile
1. 修改 MongoDB 配置文件
在每个副本集成员的 /etc/mongod.conf 文件中添加或更新以下内容:
security:
keyFile: /etc/mongo-keyfile
2. 分发 KeyFile
将生成的 keyFile 分发到所有副本集成员的相同路径(如 /etc/mongo-keyfile),并确保每个节点上的权限正确。
启用身份验证
1. 启用授权
在 /etc/mongod.conf 中启用身份验证:
security:
authorization: enabled
keyFile: /etc/mongo-keyfile
2. 重启 MongoDB
在每个副本集成员上重启 MongoDB 服务:
sudo systemctl restart mongod
创建管理员用户
1. 临时禁用身份验证
如果尚未创建管理员用户,可以暂时注释掉 security.authorization 并重启 MongoDB:

# security:
# authorization: enabled
2. 连接到 MongoDB
使用 mongo shell 连接到 MongoDB:
mongo --host <hostname> --port 27017
3. 创建管理员用户
在 admin 数据库中创建管理员用户:
use admin
db.createUser({
user: "admin",
pwd: "your_password",
roles: [ {
role: "root", db: "admin" } ]
})
4. 重新启用身份验证
重新启用 security.authorization 并重启 MongoDB。
验证 KeyFile 和身份验证
1. 检查副本集状态
连接到主节点并检查副本集状态:
rs.status()
确保所有成员的状态正常,并且能够相互通信。
2. 测试身份验证
使用管理员用户连接到 MongoDB,确保身份验证正常工作:
mongo --host <hostname> --port 27017 -u admin -p your_password --authenticationDatabase admin
注意事项
KeyFile 内容一致性:
所有副本集成员必须使用相同的 keyFile 文件内容。
如果内容不一致,成员间将无法建立信任关系。
文件权限:
确保 keyFile 的权限为 600,并且所有者为 mongod 用户。
安全性:
不要将 keyFile 文件暴露在公共网络中。
定期备份 keyFile,以防丢失。
防火墙规则:
确保副本集成员间的网络通信未被防火墙阻止。
通过以上步骤,可以成功创建和配置 keyFile,并启用 MongoDB 副本集的身份验证功能。如果有其他问题,请随时告诉我!