当前位置: 首页 > news >正文

谈谈VIP漂移那点破事

一直以来都是用nginx的upstream模块做网站最前端的负载均衡,为了防止nginx本身宕机导致网站不能访问,通常都会做两套nginx反向代理,然后用keepalive之类的软件提供VIP。


常见的环境是nginx主节点和从节点各有一个公网IP,一个私有IP,VIP地址也使用公网IP来提供,正常情况下VIP只会在nginx主节点上工作,只有主节点宕机或者网络不可达等情况下,VIP才会漂移到nginx从节点上。如果keepalive配置了非抢占模式,则主节点恢复后,VIP也不会漂移会主节点,而是继续在从节工作。这种配置要求机房网络不做mac地址绑定。


最近做的两套培训系统测试情况如下:

系统一:主从节点做双网卡绑定,都只有一个私有IP,VIP也为私有IP,通过防火墙的NAT转发用户的访问请求。主节点宕机后,VIP可以漂移至从节点,但用户无法访问网站,telnet防火墙公网IP的80端口提示无法连接。


系统二:主从节点各有两张网卡,分别配置一个公网IP和一个私有IP。VIP地址也使用公网IP来提供。

主节点宕机后,VIP可以漂移至从节点,但用户无法ping通VIP,自然网站也就打不开。


于是分别对这两种情况进行排查:

系统二:属于比较常见的配置方案。VIP漂移后无法ping通,第一反应询问机房工作人员,是否相应的设备做了mac地址绑定。得知无绑定策略后继续排查。

发现配置net.ipv4.ip_nonlocal_bind = 1 参数并使其生效后重新测试正常。


系统一:情况有点特殊,按系统二的解决方法尝试无果后,怀疑端口路由器映射上出现问题。于是继续测试VIP漂移,发现VIP漂移到从节点后,防火墙上的arp表中vip对应的mac地址依旧是主节点网卡的mac地址,原来防火墙才是罪魁祸首,坑爹的货。机房使用的防火墙型号华为Quidway Eudemon1000E,据说默认配置下,这个arp地址表自动刷新需要20分钟!


好吧!于是用下面的命名手工刷新后,万事大吉,网站访问也很顺畅,比较郁闷的是当主节点重新抢占VIP后,依然需要手工刷新下,否则防火墙还是把请求转给从节点响应。

# arping -I 网卡地址 -c 3 -s VIP地址 网关地址


后记:

要彻底解决系统一的问题,可以从两方面去着手,首先是考虑去调整防火墙的arp表的自动刷新时间;其次是考虑在从节点上部署一个无限循环的脚本,时时去检测是否抢占到了VIP,若抢占成功,则运行前面的刷新命令,命令成功运行后退出脚本,同时可以用nagios监控该脚本,了解最新的主从切换情况。切记,循环运行一次接受后sleep 1秒,否则会死机的哦!

如果在主节点上也部署类似的脚本,则会对网络带来负担,因而主节点恢复后的刷新手工运行下就好了,如果忘记运行了,从节点依然可以工作,无伤大雅!

相关文章:

  • 程序员的几款利器
  • 数据库系统设计_银行业务管理系统
  • 云桌面、云课堂究竟是什么?企业追捧是坑还是福?
  • 对hibernate框架的认知及总结
  • 三个常用的PHP图表类库
  • 在android源码中单独编译modkoid工程遇见的问题
  • Hanlp中使用纯JAVA实现CRF分词
  • kotlin使用spring mvc(三)
  • 在Ubuntu 11.04中安装Openresty
  • Nginx 部署HTTPS
  • 浅谈IP地址-1
  • Rafy 领域实体框架演示(2) - 新功能展示
  • 高程读书笔记 第六章 面向对象程序设计
  • oracle常用操作语句
  • 搞定面试官
  • [译] 怎样写一个基础的编译器
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • eclipse的离线汉化
  • ES6 ...操作符
  • FineReport中如何实现自动滚屏效果
  • golang 发送GET和POST示例
  • Javascript弹出层-初探
  • Octave 入门
  • spark本地环境的搭建到运行第一个spark程序
  • yii2中session跨域名的问题
  • 初探 Vue 生命周期和钩子函数
  • 高度不固定时垂直居中
  • 云大使推广中的常见热门问题
  • postgresql行列转换函数
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • #git 撤消对文件的更改
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (ZT)一个美国文科博士的YardLife
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • .net 发送邮件
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET6 命令行启动及发布单个Exe文件
  • .net和jar包windows服务部署
  • @Documented注解的作用
  • []sim300 GPRS数据收发程序
  • [14]内置对象
  • [16/N]论得趣
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析
  • [CCIE历程]CCIE # 20604
  • [Codeforces] combinatorics (R1600) Part.2
  • [C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!