故障复盘-基础设施-服务器断电导致Linux重启iptables防火墙规则丢失docker容器间无法连接

小熊 故障复盘23,211字数 778阅读2分35秒阅读模式

今天有一个学生机房停电了,因为服务器的防火墙规则没搞持久化,所以导致docker的容器之间网络不通了。在这里复盘一下。

总结

问题描述:容器间网络不通

持续时间:预估超过12小时

故障类型:基础设施

故障影响:保密

影响

时间线

不准确时间估算

2024-01-06 晚 市电停电导致服务器断电,来电后重启

2024-01-07 13:25 重启docker0网卡,导致规则再次丢失

2024-01-07 14:25 重启docker防火墙路由恢复

2024-01-07 15:30 修改rabbitmq地址配置后服务均恢复

根因分析

1、服务器防火墙规则丢失的根本原因是没有做持久化,重启网卡后丢失。
2、没有做跨机房、跨地区灾备

临时解决方案

方案一、重启docker

因为已经停电了,服务器已经重启,是单点的docker服务,所以直接重启docker规则就会恢复

systemctl restart docker

方案二、发送信号让 dockerd 进程重载 iptables 规则

kill -SIGHUP $(pidof dockerd)

后续跟进

问题 计划
iptables未持久化 参考iptables进行持久化配置,重启不丢失
未做高可用 初步改造,使用双机房(跨市)冷备份,故障时手动迁移的方案
规避手动故障切换 对于直接使用ip的服务,可以使用keepalived服务暴露vip来实现主备切换,跨机房配置为一个集群,在单机房不可访问时,自动切换访问另一个机房
  • 注意跨机房配置lvs,肯定是跨网段的,具体可以网上查查怎么配置。
  • 对于无状态的服务而言,直接切肯定没问题;如果是有状态的服务,比如mysql,还要做相应的定时备份。
  • 对于mysql一类服务,从库升级为主库的时候,如果是跨地区,如果没有网速慢的问题,原主库恢复后设置为从库,后续可以继续这么用。
  • 如果有网速问题,还得再切换回来才行。

后续我会更新更详细的运维知识,欢迎收藏本站。

weinxin
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包