Rocky Linux 9 上安装 MongoDB 必须避开 RPM 包的 glibc 2.34 兼容坑,直接用 dnf install mongodb-org 会因 __libc_single_threaded 符号缺失而失败;唯一可靠方案是手动下载对应 rhel9 架构的 tar.gz 包(如 mongodb-linux-x86_64-rhel90-7.0.14.tgz),解压后严格隔离端口、数据目录、日志路径及 PID 文件部署多实例,并确保 bindIp 包含 127.0.0.1、关闭 firewalld/SELinux 或精准放行端口与打 SELinux 标签。
直接用 dnf install mongodb-org 会失败,报 undefined symbol: __libc_single_threaded —— 这是 MongoDB 最新 RPM 包(7.0+)和 Rocky 9 默认 glibc 2.34 的 ABI 不匹配导致的,不是配置问题,是二进制层面不兼容。
实操建议只有一条路:放弃包管理器安装,改用 tar.gz 手动部署。下载地址必须选 rhel9 架构,不能混用 rhel8 或 amazon2 包:
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel90-7.0.14.tgz
mv mongodb-linux-x86_64-rhel90-7.0.14 mongodb,避免后续路径过长出错ldd --version 输出 glibc ≥ 2.28(Rocky 9 满足),但别指望 RPM 能跑通单机搭副本集不是“复制粘贴三次配置”,而是每个实例要完全独立:不同端口、不同数据目录、不同日志路径、不同 PID 文件。否则启动时会抢锁或覆盖数据。
典型错误是把三个 mongod.conf 里 dbpath 都写成 /data/db,结果只有第一个能起来,后面两个报 Unable to lock file: /data/db/mongod.lock。
正确做法(以端口 27017/27018/27019 为例):
mkdir -p /usr/local/mongodb/{node1,node2,node3}/{data,logs,conf}
mongod.conf 里明确指定:port=27017、dbpath=/usr/local/mongodb/node1/data、logpath=/usr/local/mongodb/node1/logs/mongod.log、pidfilepath=/usr/local/mongodb/node1/logs/mongod.pid
bind_ip 必须设为 127.0.0.1(不是 0.0.0.0),否则副本集成员间无法通过 localhost 互相发现别急着敲 rs.add(),第一步永远是让主节点自己形成一个单成员副本集。常见错误是直接连上就加其他节点,结果报 no replset config object retrieved。
操作顺序必须是:
mongod -f /usr/local/mongodb/node1/conf/mongod.conf
mongosh --port 27017 连上去rs.initiate({ _id: "rs0", members: [{ _id: 0, host: "127.0.0.1:27017" }] })
"ok" : 1 再启动第二、第三个节点,再分别执行 rs.add("127.0.0.1:27018") 和 rs.add("127.0.0.1:27019")
注意:所有 host 字段必须用 IP + 端口,不能写 localhost(某些版本解析失败);_id 名称(如 rs0)三节点配置文件里 replSet=rs0 必须完全一致。
Rocky 9 默认启用 firewalld 和 SELinux,即使你绑定了 127.0.0.1,MongoDB 副本集内部通信仍走 TCP,会被拦截。现象是 rs.status() 里其他节点状态始终是 "stateStr" : "(not reachable/healthy)"。
临时验证可先关掉:
sudo systemctl stop firewalldsudo setenforce 0(永久关闭需改 /etc/selinux/config)生产环境不能这么干,得精确放行端口:sudo firewall-cmd --permanent --add-port=27017-27019/tcp,然后 sudo firewall-cmd --reload。SELinux 则需打标签:sudo semanage fcontext -a -t mongod_var_lib_t "/usr/local/mongodb/node1/data(/.*)?",再 restorecon -Rv /usr/local/mongodb。
最易被忽略的是:mongod 进程默认不允许监听多个地址,如果配置里 bind_ip 漏写了 127.0.0.1,只写了内网 IP,那副本集成员之间根本看不见彼此。
Tplink企业版路由器WiFi名称的默认设置介绍(Tplink企业版路由器WiFi名称的默认设置是什么)
Tplink路由器灯常亮无法上网的原因分析(如何解决Tplink路由器灯常亮无法上网的问题)
Tplink千兆企业级路由器自动重启的作用和优势介绍(如何设置Tplink千兆企业级路由器自动重启功能)
一根天线的tplink路由器有哪些(一根天线的Tplink路由器的特点和优势介绍)
tplink路由器外网访问不了nas(Tplink路由器外网访问NAS的原因分析)
Tplink无法搜到路由器的原因分析(如何解决Tplink无法搜到路由器的问题)