Bitnami MongoDB ReplicaSet部署后认证失败问题求助
MongoDB副本集认证失败问题排查与解决
问题场景
基于Bitnami MongoDB镜像,通过docker-compose搭建1主1从1仲裁的副本集用于Spring Boot事务功能,但启动后primary节点出现SCRAM认证失败、密钥缓存刷新失败,arbiter节点也报认证错误。
原docker-compose配置:
version: '2' services: mongodb-primary: image: 'bitnami/mongodb:latest' environment: - MONGODB_ADVERTISED_HOSTNAME=mongodb-primary - MONGODB_REPLICA_SET_MODE=primary - MONGODB_ROOT_PASSWORD=password123 - MONGODB_REPLICA_SET_KEY=replicasetkey123 volumes: - 'mongodb_master_data:/bitnami' mongodb-secondary: image: 'bitnami/mongodb:latest' depends_on: - mongodb-primary environment: - MONGODB_REPLICA_SET_MODE=secondary - MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary - MONGODB_INITIAL_PRIMARY_PORT_NUMBER=27017 - MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=password123 - MONGODB_REPLICA_SET_KEY=replicasetkey123 mongodb-arbiter: image: 'bitnami/mongodb:latest' depends_on: - mongodb-primary environment: - MONGODB_REPLICA_SET_MODE=arbiter - MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary - MONGODB_INITIAL_PRIMARY_PORT_NUMBER=27017 - MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=password123 - MONGODB_REPLICA_SET_KEY=replicasetkey123 volumes: mongodb_master_data: driver: local
错误日志
Primary节点关键错误:
"id":4939300, "ctx":"monitoring-keys-for-HMAC","msg":"Failed to refresh key cache","attr":{"error":"NotYetInitialized: Cannot use non-local read concern until replica set is finished initializing.","nextWakeupMillis":5400}} "ctx":"conn34","msg":"Authentication failed","attr":{"mechanism":"SCRAM-SHA-256","speculative":true,"principalName":"root","authenticationDatabase":"admin","remote":"10.89.1.52:54010","extraInfo":{},"error":"AuthenticationFailed: SCRAM authentication failed, storedKey mismatch"}}
Arbiter节点错误:
MongoServerError: Authentication failed.
解决方案
1. 清理残留数据卷
旧数据卷可能存储了不匹配的认证信息,执行以下命令彻底清除:
docker-compose down -v
2. 添加健康检查确保服务就绪
depends_on仅等待容器启动,不代表MongoDB服务完成初始化。给primary节点添加健康检查,让secondary和arbiter仅在primary服务就绪后启动:
修改后的完整docker-compose配置:
version: '2.4' # 需要使用2.4+版本支持condition services: mongodb-primary: image: 'bitnami/mongodb:7.0' # 固定版本避免兼容性问题,可替换为稳定版本 environment: - MONGODB_ADVERTISED_HOSTNAME=mongodb-primary - MONGODB_REPLICA_SET_MODE=primary - MONGODB_ROOT_PASSWORD=password123 - MONGODB_REPLICA_SET_KEY=replicasetkey123 volumes: - 'mongodb_master_data:/bitnami' healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')", "--username", "root", "--password", "password123", "--authenticationDatabase", "admin"] interval: 10s timeout: 5s retries: 5 start_period: 20s # 给primary足够的初始化时间 mongodb-secondary: image: 'bitnami/mongodb:7.0' depends_on: mongodb-primary: condition: service_healthy environment: - MONGODB_REPLICA_SET_MODE=secondary - MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary - MONGODB_INITIAL_PRIMARY_PORT_NUMBER=27017 - MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=password123 - MONGODB_REPLICA_SET_KEY=replicasetkey123 mongodb-arbiter: image: 'bitnami/mongodb:7.0' depends_on: mongodb-primary: condition: service_healthy environment: - MONGODB_REPLICA_SET_MODE=arbiter - MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary - MONGODB_INITIAL_PRIMARY_PORT_NUMBER=27017 - MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=password123 - MONGODB_REPLICA_SET_KEY=replicasetkey123 volumes: mongodb_master_data: driver: local
3. 验证副本集状态
启动后,进入primary容器验证副本集状态:
docker-compose exec mongodb-primary mongosh --username root --password password123 --authenticationDatabase admin rs.status()
确认secondary和arbiter已加入副本集且状态正常。
问题原因
- 初始化时序问题:secondary/arbiter在primary尚未完成副本集初始化时就发起认证请求,导致认证失败。
- 旧数据残留:之前的MongoDB数据卷中存储的SCRAM密钥与新配置不匹配,引发
storedKey mismatch错误。 - 镜像版本不稳定:
latest标签可能自动更新到未兼容的版本,导致节点间通信异常。
内容的提问来源于stack exchange,提问作者DCO
相关产品推荐
相关产品推荐

