Mongod进程启动正常但systemctl status显示失败,无法搭建副本集咨询
问题根因说明
1 进程运行但systemctl查询状态异常的原因
systemctl仅管理预先在systemd中注册的服务单元,默认的mongod服务绑定的是/etc/mongod.conf配置文件、指定以root/mongod系统用户运行。你当前是手动以普通用户启动自定义配置/home/cluster1.conf的进程,没有通过默认mongod服务的启动逻辑,systemd无法识别这个非注册的进程,因此查询systemctl status mongod显示未运行属于正常情况。
2 同VPC其他虚拟机无法访问的原因
- 监听IP配置限制:如果配置文件中
bindIp参数设置为127.0.0.1,mongod只会监听本地环回地址,拒绝外部机器的访问请求 - 防火墙/安全组拦截:云服务器的安全组、系统内置的firewalld/iptables如果没有开放mongod对应端口的VPC网段入站规则,会导致外部连接被拦截
- 权限异常:普通用户启动的进程如果没有数据目录、日志目录的读写权限,会触发隐性运行异常,导致外部连接报错
解决步骤(支持副本集搭建)
- 清理原有冲突进程与服务
- 停止默认mongod服务避免端口冲突:
sudo systemctl stop mongod && sudo systemctl disable mongod - 停止当前手动启动的mongod进程:先执行
ps aux | grep mongod查询进程ID,再执行kill <进程ID>,进程无响应时再使用kill -9 <进程ID>强制终止
- 停止默认mongod服务避免端口冲突:
- 调整
/home/cluster1.conf配置- 修改
bindIp参数为0.0.0.0或者当前机器的VPC内网IP,多IP用逗号分隔 - 新增副本集配置项:
replication: replSetName: "你自定义的副本集名称" - 给普通用户开放数据、日志目录权限:
chown -R <你的普通用户名>:<你的普通用户组> <数据目录路径> <日志目录路径>
- 修改
- (推荐)注册自定义systemd服务单元方便进程管理
在/etc/systemd/system/路径下创建mongod-cluster1.service文件,写入以下内容:[Unit]
Description=MongoDB Cluster1 Node
After=network.target[Service]
User=<你的普通用户名>
Group=<你的普通用户组>
ExecStart=/usr/bin/mongod --config /home/cluster1.conf
Restart=always
LimitNOFILE=64000[Install]
WantedBy=multi-user.target
保存后执行sudo systemctl daemon-reload加载配置,后续即可通过以下命令管理服务:- 启动服务:
sudo systemctl start mongod-cluster1 - 查看状态:
systemctl status mongod-cluster1 - 开机自启:
sudo systemctl enable mongod-cluster1
如果不想注册服务,也可以手动后台启动进程:nohup mongod --config /home/cluster1.conf &
- 启动服务:
- 验证网络连通性
在同VPC的其他虚拟机上执行nc -zv <当前机器内网IP> <mongod端口>,返回连通成功提示则网络正常 - 副本集初始化
所有副本集节点都完成上述配置并启动后,任选一个节点进入mongo shell,执行初始化命令:
等待1~2分钟后执行rs.initiate( { _id: "你自定义的副本集名称", members: [ { _id: 0, host: "节点1内网IP:端口" }, { _id: 1, host: "节点2内网IP:端口" }, { _id: 2, host: "节点3内网IP:端口" } ] } )rs.status(),返回的副本集成员状态均为正常则搭建完成。
内容的提问来源于stack exchange,提问作者Sandeepa Kariyawasam
相关产品推荐
相关产品推荐

