线上mongodb集群不可用

`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

  

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

 

 

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值