今天有一个学生机房停电了,因为服务器的防火墙规则没搞持久化,所以导致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一类服务,从库升级为主库的时候,如果是跨地区,如果没有网速慢的问题,原主库恢复后设置为从库,后续可以继续这么用。
- 如果有网速问题,还得再切换回来才行。
后续我会更新更详细的运维知识,欢迎收藏本站。
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
评论