必须在所有节点首次启动前完成keyFile配置,否则无法补加;keyFile是启动硬性依赖而非开关,需用openssl rand -base64 756生成、chmod 600设权、手动分发至各节点相同路径,且security块须置于mongod.conf顶层并显式配置keyFile与clusterAuthMode: keyFile。

必须在所有节点首次启动前完成配置,否则无法补加;keyFile不是“开关”,而是启动时的硬性依赖。
keyFile生成与分发必须严格一致
所有副本集节点(包括 arbiter)必须使用完全相同的二进制密钥文件,且内容不能有换行、不能是明文、不能用 echo 生成。
- 正确生成方式:
openssl rand -base64 756 > /etc/mongod-keyfile(长度在 6–1024 字节之间即可) - 权限必须设为
600:chmod 600 /etc/mongod-keyfile,否则 mongod 启动直接失败,报错Permissions on /path/to/keyfile are too open - 文件需手动拷贝到每个节点相同路径(或各自配置中指定的路径),不能只在一台机器上生成后不复制
- 不要用
chmod 400—— MongoDB 3.6+ 明确要求600,400在某些系统下也会被拒绝
mongod.conf 中 security 配置位置和字段不能错
security 块必须位于配置文件顶层,且只能出现在 mongod 实例的配置中(mongos 不支持该配置项)。
- 正确写法:
security: keyFile: /etc/mongod-keyfile clusterAuthMode: keyFile
-
clusterAuthMode必须显式设为keyFile(默认值是auth-supported,会导致认证失败) -
authorization: enabled可选但推荐:它控制客户端连接是否需要用户认证,和节点间 keyFile 认证是两层事 - 切勿把
security块写进mongos.conf—— 会启动失败,日志只提示Failed to load configuration from file,实际是语法校验不通过
副本集初始化前必须停掉所有节点并重配启动
已运行过的非认证节点无法“升级”为认证模式;强行加 keyFile 后重启,会出现 Authentication failed 或更隐蔽的 Unable to authenticate using sasl protocol。
- 操作顺序必须是:停全部
mongod→ 拷贝 keyFile 到各节点 → 更新配置 → 逐个启动 → 再rs.initiate() - 如果某节点曾以无认证方式启动过,其数据目录里可能残留未加密的元数据,此时加 keyFile 后启动会静默失败(日志无明确报错,但节点无法加入集群)
-
rs.initiate()必须在启用 keyFile 后的首次连接中执行,且连接命令里不能带--authenticationDatabase参数(此时还没建用户)
客户端连副本集时 authMechanism 和 authDB 容易漏
启用 keyFile 后,节点间通信自动走 SCRAM-SHA-256,但你自己的应用或 mongosh 连接时若没配对,会卡在“能连上但查不了数据”。
- 连接字符串必须显式声明:
mongodb://user:pass@host:27017/db?authMechanism=SCRAM-SHA-256 - 用
mongosh连 replica set 时,必须加--authenticationDatabase admin,否则即使密码正确也报not authorized on admin to execute command - 用户必须在每个节点的
admin数据库里创建(不能只在 primary 上建),因为 secondary 默认不接受写,而db.createUser()是写操作 - arbiter 节点不需要用户,但它参与选举,所以仍需 keyFile 和
clusterAuthMode配置
最容易被忽略的是:keyFile 生效后,所有节点(含 arbiter)的启动顺序、配置一致性、以及客户端连接参数三者必须全部对齐——少一个环节,整个集群就处于“半认证”状态,表现就是部分节点反复失联或选举失败。


















