最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何在CentOS7上部署MongoDB副本集?
时间:2026-08-10 10:21:49 编辑:袖梨 来源:一聚教程网
mongod 启动后不会自动组成副本集,必须手动执行 rs.initiate() 并传入完整成员配置;replSet 仅声明名称,不触发初始化;三节点 replSet 名称须完全一致;SELinux、bind_ip、dbpath、端口、keyfile 等配置均需严格校验。
mongod 启动后不自动组成副本集,必须手动执行 rs.initiate() —— 这是绝大多数人卡住的第一步。
配置文件里 replSet 只是声明名称,不是启动副本集
很多人以为在 mongod.conf 里写了 replSet=rs0 就算配好了副本集,其实这只是告诉进程“我将来要加入叫 rs0 的副本集”,它自己仍是独立节点。真正触发选举和状态同步,得靠客户端命令。
-
replSet参数必须三台机器完全一致(包括大小写、空格),否则rs.add()会报replSet name mismatch - CentOS7 默认 SELinux 开启,若日志路径或
dbpath不在标准位置(如/var/lib/mongo),需用semanage fcontext放行,否则mongod静默失败 -
bind_ip别写127.0.0.1或localhost—— 其他节点连不上;推荐写具体内网 IP,或0.0.0.0+ 配合防火墙(firewall-cmd --add-port=27017/tcp)
初始化时 rs.initiate() 必须用完整 config 对象
直接敲 rs.initiate() 会创建单节点副本集(只有自己),后续加节点会失败:错误提示 already initialized 且无法再改成员列表。必须一开始就指定全部成员。
- 示例 config(三个节点,含仲裁):
cfg = { _id: "rs0", members: [ {_id: 0, host: "192.168.1.10:27017"}, {_id: 1, host: "192.168.1.11:27017"}, {_id: 2, host: "192.168.1.12:27017", arbiterOnly: true}] } - 执行顺序:先连主节点(任意一台),
use admin,再rs.initiate(cfg);成功返回{ "ok" : 1 } - 如果某节点网络不通,
rs.initiate()会卡住或超时,此时删掉该节点条目重试,等集群稳定后再用rs.add()加入
仲裁节点(arbiter)不能复用数据目录或端口
仲裁节点不存数据,但 dbpath 必须存在且可写,否则 mongod 启动失败 —— 错误日志里常见 Failed to unlink socket file 或 Permission denied。
- 仲裁节点的
dbpath目录可以为空,但不能指向其他节点正在用的路径(比如和主节点共用/data/mongo) - 仲裁节点也要监听端口,且该端口不能被其他 mongod 占用;即使只做投票,也必须能被主/从节点 TCP 连通(
telnet 192.168.1.12 27017要通) - 仲裁节点配置里不要加
oplogSize或directoryperdb—— 无效且可能引发 warning
认证开启后,rs.initiate() 必须用 keyfile 或 x.509
一旦配置了 security.authorization: enabled 和 security.keyFile,所有节点启动前必须同步同一份 keyfile(权限必须是 chmod 400),且初始化时连接要用 admin 用户认证。
- keyfile 生成命令:
openssl rand -base64 756 > /etc/mongod-keyfile && chmod 400 /etc/mongod-keyfile - 初始化前先认证:
mongo --host 192.168.1.10:27017 -u "admin" -p "pwd" --authenticationDatabase "admin" - 没配 keyfile 就开
authorization: enabled?mongod会直接拒绝启动,日志报KeyFile must be specified when authorization is enabled
副本集真正可用的标志不是所有 mongod 进程都 running,而是 rs.status().members[n].stateStr 出现 PRIMARY、SECONDARY、ARBITER —— 中间任何一环断开(比如时间不同步、hostname 解析失败、防火墙拦截心跳包),状态就会卡在 STARTUP 或 RECOVERING。
相关文章
- 学历提升报名入口官网-学历提升报名官网 08-10
- 寒武纪2026年上半年业绩亮眼 营收接近翻倍增长 08-10
- 原神2026年海灯节福利介绍汇总 08-10
- 不挂科在线搜题网页版官方入口最新链接 08-10
- 摩尔线程上半年营收大幅增长147.42%,S5000智算集群实现规模化销售 08-10
- OpenAI曝光GPT-6!传10万亿参数,8月强行发布 08-10