第9章 负载均衡集群日常维护
一个设计良好的高可用负载均衡集群,交付使用以后并不能一劳永逸。欲使其高效、稳定、持续对外服务,日常维护必不可少。
对于高可用负载均衡集群来说,有两种类型的维护形式:常规性维护与突发性维护。突发性维护一般指故障处理,而常规性的维护包括的内容大致包括但不限于:变更、监控、升级、
备份与恢复等。本章会列举一些日常维护的实际案例给读者作为经验讲解。
9.1 负载均衡集群故障处理
在高可用负载均衡集群中,一些设施或者应用发生故障虽然不影响用户的使用,但作为维护人员,发现故障应立即排查并进行故障恢复,并对处理进行记录。
故障一般有硬件故障、系统故障、软件故障、性能故障。硬件故障比较容易判断,找出问题所在以后进行维修或者更换。系统故障、软件故障等,排查的诀窍就是日志文件,这一点要牢记于心。
1.故障实例:通过VIP访问不到Web页面
一个刚刚部署好Web服务集群,前端Keepalived + LVS(DR直接路由模式),后端多个真实服务器部署Apache。实施人员反馈故障现象如下:
(1)能通过telnet VIP 80正常访问。
(2)单独访问每个真实服务器的页面,正常。
(3)通过域名访问Web页面(绑定了集群VIP),不正常。
作者认为,排查最有效的策略是先实后虚--先查后端真实服务器,再查前端负载均衡。反之,假使故障在后端真实服务器,却在负载均衡器上找病因,能有效么?
得到授权以后,开始登录后端真实服务器宿主系统,检查Apache服务的配置,一下子就发现问题所在:居然把集群的VIP显式的写在配置文件中(<VirtualHost VIP:80>)。
修改Apache配置文件,将“<VirtualHost VIP:80>”更正为“<VirtualHost *:80>”,保存配置,重启Apache服务,再以VIP地址访问Web页面,一切正常。
2.故障实例:集群性能故障
一个长期运行的负载均衡集群,前端Keepalived + HAProxy,后端真实服务器部署Nginx,提供数十个域名Web访问。在没有做任何市场推广、也没有突然大幅度增加注册用户的情况下,某一个域名的访问异常缓慢,同一个页面用浏览器反复刷新甚至出现“503”错误,而在此负载均衡集群中的其他域名的访问却是正常的。
登录到主负载均衡器宿主系统,粗略查看HAProxy日志,发现大量的日志记录来自于网络爬虫,再以主机名与“spider”做关键字对访问日志做处理,果然是爬虫在耗费网络资源,如图9-1所示。
图9- 1
知道了问题所在,接下来的处理从两个方面入手:负载均衡器上限制单个IP地址的最大并发数,同时在Nginx上屏蔽某些恶意的爬虫。
(1)负载均衡器限制同一个网段所有地址的连接总数量。使用系统防火墙工具“iptables”,在从负载均衡器(BACKUP)宿主系统手动执行防火墙策略,确定该指令不会产生异常并能正确发挥作用以后,再应用到主负载均衡器(Master)。限制访问并发数的“iptables”指令如下:
| /usr/sbin/iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 80 --connlimit-mask 24 -j DROP /usr/sbin/iptables -I INPUT -p tcp --dport 443 -m connlimit --connlimit-above 80 --connlimit-mask 24 -j DROP |
请读者注意:上述语句中有大写与小写、有单横杠与有双横杠,不能混淆。
(2)Nginx限制爬虫。用禁止源地址的方法无法有效的屏蔽爬虫,因此可选的方法之一就是对用户代理(User-Agent)进行处理。在Nginx配置文件中,对爬虫的定义可以是全局,也可以单独针对某个主机名,单独的主机名配置,以“include”的形式包含到主配置文件即可。根据从主负载均衡器(MASTER)访问日志统计出来的恶意爬虫名字,在Nginx的配置文件中加入如下文本块:
| if ($http_user_agent ~* "FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpCli ent|MJ12bot|heritrix|EasouSpider|Ezooms|Sogou spider|Sogou web spider|360Spider|YisouSpider" ) { return 403; } |
请读者注意:小括号“()”里的字符串是一个整行,不要回车断行!保存修改,执行指令“nginx -t”进行语法检查,无误后重启“nginx”服务。以同样的方法,将集群中的其他Nginx做好处理。
通过上述两种方式进行处理后,发生性能故障的Web站点又恢复了正常。
9.2 负载均衡集群变更操作
集群容量扩充或缩减、现有集群中新增项目、变更策略、置换设施等,均在此范围。
对有前后端架构的负载均衡集群,变更操作时,先后端再前端,先从(BACKUP)后主(MASTER)。这样做的目的,是保证集群的服务不因变更操作而受影响。例如,在负载均衡集群中增加后端节点,正确有效的做法通常如下:
- 确认新增的后端,直接访问它承载的服务,状态正常。
- 将新增的后端加入到从负载均衡器(BACKUP)转发队列,客户端访问从负载均衡器(BACKUP)的地址及端口,可正确得到结果,并能跟踪确认用户的最终访问到达新增的节点(可通过负载均衡器日志与节点服务日志相互参照确认)。
- 用户访问量小的夜间,将从负载均衡器(BACKUP)的配置同步到主负载均衡器(MASTER),然后重启主负载均衡器系统或者服务。重启主负载均衡器(MASTER)期间,从负载均衡器(BACKUP)将主动接管主负载均衡的所有任务,不会导致服务不可用的风险。
后端真实服务器节点的撤离,可直接关闭其上的服务甚至是系统,负载均衡器的健康检查将自动将其从转发队列里踢出,不会对用户的访问造成影响,然后再在主从负载均衡器删掉相关条目,即可平稳将节点下线。
9.4 负载均衡集群升级
不论哪一种类型的高可用负载均衡集群,都可以分为系统升级和应用升级两个大项。在进行升级前,做好是否必须升级的评估。升级是否解决已经存在的缺陷?升级是否能大幅度提高整体性能?升级失败是否可以快速、有效回退?
在做好升级测试以后,正式进行升级,一定要按对可用性影响最小的方式进行,这个可参考软件工程“灰度发布”。
9.5 负载均衡集群备份与恢复
运行在Proxmox VE超融合集群上的高可用负载均衡集群,备份轻而易举,它将整个主机进行完整备份。如果不是这样的运行环境,则需要对数据进行选择性备份,并启动定时任务,进行关键数据的自动备份。
Proxmox VE超融合集群从备份进行恢复相当简单和容易,选中需要恢复的主机,单击按钮“还原”, 余下的事情交给时间,如图9-1所示。
图9- 5
传统方式的恢复,就要复杂和耗时一些。这些过程可能包括:安装系统、安装软件、初始化、复制数据、调试、上线
相关文章:
第9章 负载均衡集群日常维护
一个设计良好的高可用负载均衡集群,交付使用以后并不能一劳永逸。欲使其高效、稳定、持续对外服务,日常维护必不可少。 对于高可用负载均衡集群来说,有两种类型的维护形式:常规性维护与突发性维护。突发性维护一般指故障处理&…...
鸿蒙内核源码分析(消息封装篇) | 剖析LiteIpc(上)进程通讯内容
基本概念 LiteIPC是OpenHarmony LiteOS-A内核提供的一种新型IPC(Inter-Process Communication,即进程间通信)机制,为轻量级进程间通信组件,为面向服务的系统服务框架提供进程间通信能力,分为内核实现和用户…...
Charger之三动态电源路径管理(DPPM)
-----本文简介----- 主要内容包括: 领资料:点下方↓名片关注回复:粉丝群 硬件之路学习笔记公众号 Charger的动态电源路径管理(DPPM) 前篇内容:①电池管理IC(Charger)了解一下&…...
大数据模型的选择与安装
大数据模型的选择和安装是一个复杂的过程,涉及多个因素,包括模型的通用能力、特定任务的性能、数据效率、评估完整性、成本以及部署的硬件和软件环境。以下是一些关于大数据模型选择与安装的考虑因素和步骤: 选择大数据模型的考虑因素&#…...
React 之 lazy(延迟加载)(十七)
lazy 能够让你在组件第一次被渲染之前延迟加载组件的代码。 在组件外部调用 lazy,以声明一个懒加载的 React 组件: import { lazy } from react;const MarkdownPreview lazy(() > import(./MarkdownPreview.js)); 配合 Suspense 实现懒加载组件 //App.js imp…...
Node.js -- 会话控制
文章目录 1. 会话介绍2. cookie 相关操作2.1 cookie 设置2.2 删除 cookie2.3 获取cookie 3. session 相关操作4. cookie 和session 的区别5. 补充知识 -- CSRF跨站请求伪造6. token 1. 会话介绍 所谓会话控制就是对会话进行控制 HTTP是一种无状态的协议,它没有办法…...
做抖店不能踩的几个坑,新手要照做,老玩家要听劝~
我是王路飞。 很多人都说抖店的运营很简单,选选品、对接一下达人,就可以坐等店铺出单了。 这话骗骗还没开店的小白也就得了,但凡做抖店超过一个月的,都不会相信这句话。 细心耐心是做抖店最基本的态度。 拿到一个好结果的前提…...
【Kibana】快速上手Kibana平台(KQL)
文章目录 快速使用Kibana平台常用查询语句KQL基本查询覆合查询模糊查询 目前市面上大部分的公司的日志系统都是使用ELK系统,因此我们进行工作必须得掌握Kibana平台的基本使用,这里主要说明怎么“快速使用Kibana平台”以及记录一些常用的“KQL语言”。 快…...
全方位入门git-慕课网 笔记
目录 【上传github忽略某些文件】【配置用户名和邮箱】【想要删除不需要的文件时如何进行操作】【想要给文件重命名如何操作】【想要移动文件到其他位置时如何操作】【文件有变化时,如何查看前后变化】【操作失误的情况下如何实现一键还原】【不再追踪时如何实现撤销…...
使用 Docker 部署 TaleBook 私人书籍管理系统
1)项目介绍 GitHub:https://github.com/talebook/talebook Talebook 是一个简洁但强大的私人书籍管理系统。它基于 Calibre 项目构建,具备书籍管理、在线阅读与推送、用户管理、SSO 登录、从百度/豆瓣拉取书籍信息等功能。 友情提醒&#x…...
分布式系统的一致性与共识算法(一)
前言 etcd是线性一致性读,而zk却是顺序一致性读,再加上各种共识、强弱一致的名词,看到欸度时候总会混淆,这里会给出一些例子来帮助理解。 什么是一致性? 在谈到一致性这个词时,你会想到CAP理论的consist…...
创建一个Spring Boot项目
文章目录 一、如何创建一个Spring Boot项目1.1 项目创建:专业版 or 社区版 or 网站创建1.2 数据配置1.3 项目启动1.4 代码编写 二、Spring Boot 项目文件介绍三、Web服务器四、根据HTTP状态码解决bug4.1 4044.2 500 五、Spring VS Spring Boot VS Spring Web MVC5.1…...
ansible -playbook运维工具、语法、数据结构、命令用法、触发器、角色
目录 配置文件 基本语法规则: YAML支持的数据结构 playbook核心元素 ansible-playbook用法: 触发器 特点: 角色: 习题: 配置文件 playbook配置文件使用yaml语法,YAML 是一门标记性语言,专门用来写配…...
web前端之sass中的颜色函数、active按钮激活、hover鼠标悬浮、disabled禁用、scss循环、css
MENU 效果图htmlsassscss编译后的css页面css 效果图 注意查看蓝色按钮。 html <div class"box"><button class"btn type_1">按钮</button><button class"btn type_2">按钮</button><button class"btn ty…...
交通地理信息系统实习教程(二)
这篇文章服务于GIS背景用户以及有志于GIS的朋友 操作源数据位置:【免费】交通地理信息系统实习二源数据资源-CSDN文库 软件安装包位置:【免费】TransCad-交通地理信息系统软件资源-CSDN文库 一、最短路径分析 1.1软件启动说明 这里需要给出一个必要的…...
Shell脚本——批量清理Kubernetes集群中Evicted状态的pod
测试环境有一台宿主机出现了异常,大量的异常日志导致宿主机的磁盘使用率超过了85%,触发了上面的pod驱离策略,该宿主机上的的pod处于Evicted状态。在清理了磁盘之后,得手动处理掉这些Evicted状态的pod。 #!/bin/bash# 获取当前状态…...
(深度估计学习)Win11复现DepthFM
目录 1. 系统配置2. 拉取代码,配置环境3.开始深度预测4.运行结果 论文链接:https://depthfm.github.io/ 讲解链接:https://www.php.cn/faq/734404.html 1. 系统配置 本人系统:Win11 CUDA12.2 python3.11.5 这里附上几个CUDA安装链…...
cocos creator 帧率60 不生效meta50 能刷新到90
环境: cocos creator 2.4.3 华为meta 50 背景: 小游戏 需要在update 里取帧率 发现跟时间对不上 游戏设置60帧 手机上显示 90帧 cc.game.setFrameRate(30) 显示 30帧 cc.game.setFrameRate(60) 显示 90帧 结论: 对于老版本的cocos creator …...
探讨 cs2019 c++ 的STL 库中的模板 conjunction 与 disjunction
(1)在 STL 库源码中这俩模板经常出现,用来给源码编译中的条件选择,模板的版本选择等提供依据。先给出其定义: 以及: 可以得出结论: conj 是为了查找逻辑布尔型模板参数中的第一个 false &#x…...
【核弹】我的第一款IDEA插件
SuperHotSwap 插件名称叫做:SuperHotSwap(超级热更新) 开发初心:旨在做出一款最便捷的IDEA热更新插件,减少用户操作步骤,提供零配置的可视化操作更新。 为什么要写这个插件: 每次改一下Mappe…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
