容器健康检测 unhealthy 状态,curl不通,但nc 或 telnet通,解决方案

故障现象

DataEase 安装完后,dataease 容器一直处于 unhealthy 状态,但 DataEase 服务可正常访问;

进入 dataease 容器后,nc -zv 127.0.0.1 8081 网络可达,但 curl 127.0.0.1:80 没有返回。

衍生问题

DataEase 健康检测使用 curl 方式探测服务是否可用,该故障现象只是健康检测不通过,DataEase 服务可正常使用;

如果忽略该问题,正常使用 DataEase, 过一段时间后(通常几十分钟到几小时不等),DataEase 操作会变得卡顿。
故障原因

出现该问题的部署环境,通常是 CentOS 7.3 系统,默认内核版本为 3.10.0-514.el7.x86_64,该内核与 Docker 兼容性存在一定问题,这是导致 DataEase 健康检测不通过的关键因素;

我们经常使用的 CentOS 7.9 内核版本是 3.10.0-1160.71.1.el7.x86_64,小版本上有差异,所以不存在该问题。

容器中的 curl 健康检测没有返回数据,进程不会退出,并且会继续发起新的 curl 进程,这样就导致时间越长 curl 进程越多,最终服务器的负载过高便出现衍生问题,就是 DataEase 变得卡顿。

解决方案

升级 CentOS 系统内核:

# 导入仓库源
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
 
# 查看可安装的软件包
yum --enablerepo="elrepo-kernel" list --showduplicates | sort -r | grep kernel-ml.x86_64
  
# 安装 LT 版本,K8S 或 Docker 环境适合选这个
yum --enablerepo=elrepo-kernel install kernel-lt-devel kernel-lt -y
 
# 查看现有内核启动顺序
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
 
#修改默认启动项
grub2-set-default 0 (0表示第一个内核)
 
# 重启
reboot
 
# 检查内核版本
uname -r

升级后,dectl status 查看服务状态,dataease 容器变成 healthy 状态,问题解决。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

范一刀

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值