`1.现象
代码报错如下:
Query failed with error code 133 and error message 'Encountered non-retryable error during query :: caused by :: Could not find host matching read preference { mode: "primary" } for set shard2' on server 10.XX.XXX.XXX:27017
主机集群报错如下:
Error in heartbeat (requestId: 564255) to 10.XX.XXX.XXX:27017, response status: HostUnreachable: Error connecting to 10.XX.XXX.XXX :: caused by :: No route to host
2.问题排查
2.1 查看集群状态
ssh到mongodb集群所在主机,mongo --port 27017 一系列操作,发现db.auth("","")不可认证就无法查看集群状态即无法执行rs.status()。
2.2 查看mongo日志,如下
Error in heartbeat (requestId: 564255) to 10.XX.XXX.XXX:27017, response status: HostUnreachable: Error connecting to 10.XX.XXX.XXX :: caused by :: No route to host
2.3 分析
通过上面2步强烈怀疑网络问题,ping下,发现都可以,即而telnet XX.XX.XXX 27017 发现跨网段集群内telnet不通(即10.5的网段机器telnet到10.3网端不通。)
2.4 立马检查防火墙
发现10.3网段所有机器的防火墙昨天夜里被打开了,关闭这个网段机器防火墙,集群恢复。
附防火墙相关命令:
1.firewall防火墙(centos和redhat)
1. 查看firewall服务状态 systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1) 2. 查看firewall的状态 firewall-cmd --state not running 3、开启、重启、关闭、firewalld.service服务# 开启service firewalld start# 重启service firewalld restart# 关闭service firewalld stop 4、查看防火墙规则 firewall-cmd --list-all 5、查询、开放、关闭端口# 查询端口是否开放firewall-cmd --query-port=8080/tcp# 开放80端口firewall-cmd --permanent --add-port=80/tcp# 移除端口firewall-cmd --permanent --remove-port=8080/tcp#重启防火墙(修改配置后要重启防火墙)firewall-cmd --reload# 参数解释1、firwall-cmd:是Linux提供的操作firewall的一个工具; 2、--permanent:表示设置为持久; 3、--add-port:标识添加的端口;
2、iptables防火墙
1、基本操作 # 查看防火墙状态 service iptables status # 停止防火墙 service iptables stop # 启动防火墙 service iptables start # 重启防火墙 service iptables restart # 永久关闭防火墙 chkconfig iptables off # 永久关闭后重启 chkconfig iptables on 2、开启80端口 vim /etc/sysconfig/iptables # 加入如下代码 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 保存退出后重启防火墙 service iptables restart
3.开启iptables防火墙
cd /etc/sysconfig
ls -l
没有查看到iptables文件,但存在ip6tables-config和iptables-config,linux为CentOS 7.6 ,CentOS 7默认没有了iptables文件。
#安装
yum install iptables-services
#启动
systemctl enable iptables

您的支持,是我创作最大的动力,敬礼!!

1686





