LVS+keepalived——高可用集群

lvs+keepalived:高可用集群

keepalived为lvs应运而生的高可用服务。lvs的调度器无法做高可用,于是keepalived这个软件。实现的是调度器的高可用。但是:keepalived不是专门为lvs集群服务的,也可以做其他代理服务器的高可用。

lvs的高可用集群:主调度器和备调度器(可以有多个)一主两备 一主一备

主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理,其余的备用调度器处在冗余状态。

不参与集群的运转,主调度器出现了故障无法运行,备调度器才会承担主调度器的工作。一旦主调度器恢复工作,继续由主调度器进行处理,备调度器又成了冗余。

VRRP:keepalived是基于vrrp协议实现lvs服务的高可用。解决了调度器单节点的故障问题

VRRP协议:提高网络路由器的可靠性开发的一种协议

选举出主和备,预先设定好了主和备的优先级。主打优先级较高,备的优先级低。一旦开启服务器,优先级高的,会自定抢占主的位置,

VRRP组播通信:224.0.0.18 VRRP协议当中的主备服务器通过组播地址进行通信,交换主备服务器之间的运行状态。主服务器会周期性的发送VRRP报文消息,以告知其他备服务器,主服务器现在的状态。

主备切换:主服务器发生故障或者不可达,VRRP协议会把请求转移到备服务器,通过组播地址,VRRP可以迅速的通知其他服务器发生了主备切换,确保新的主服务器可以正常的处理客户端的请求。

故障恢复:一旦主服务器恢复通信,由组播地址进行通信,发现在恢复的主服务器优先级更高,会抢占原主服务器的位置,成为主服务器,调度和接受请求。

lvs-DR模式结合keepalived

keepalived的体系模块:

全局模块:core模块,负责整个keepalived启动加载和维护

VRRP模块:实现vrrp协议,包括主备切换

check模块:负责健康检查,检查后端真实服务器的健康检查。配置真实服务器的模块当中

Test1:主调度器 192.168.120.10

Test2:备调度器 192.168.120.70

后端真实服务器1:192.168.120.30

后端真实服务器2:192.168.120.40

VIP地址:192.168.120.100    客户端:192.168.120.60

关闭防火墙

配置主调度器test1:

安装服务

yum -y install ipvsadm keepalived

修改配置文件

 vim /etc/keepalived/keepalived.conf

smtp_server 127.0.0.1

 主备服务的id,主和备的id不能一致

 router_id LVS_01

取消严格遵守vrrp协议功能,不取消vip无法连接

#vrrp_strict

标识身份,主备:MASTER/BACKUP

state MASTER

指定VIP地址的物理接口

interface ens33

虚拟路由器的id号

 virtual_router_id 10

发送报文的间隔时间

advert_int 1

指定集群的vip地址

 virtual_ipaddress {

        192.168.120.10  }

健康检查的间隔时间

 delay_loop 6

负载均衡的调度算法

lb_algo rr

指定lvs集群的工作方式,要大写

 lb_kind DR

连接保持50秒

 persistence_timeout 50

后端真实服务器的轮询权重

 real_server 192.168.120.30 80 {

        weight 1

检测目标的端口号

connect_port 80

连接超时时间

connect_timeout 3

重试的次数

 nb_get_retry 3

重试的间隔描述

 delay_before_retry 4

刷新

systemctl restart keepalived.service

查看策略

ipvsadm -ln

配置备服务器

远程复制

scp root@192.168.120.10:/etc/keepalived/keepalived.conf /etc/keepalived/

修改配置文件

vim /etc/keepalived/keepalived.conf

刷新

systemctl restart keepalived.service

配置后端真实服务器1

Yum安装nginx

vim /usr/local/nginx/html/index.html

This is test1

vim /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0

ONBOOT=yes

IPADDR=192.168.120.100

NETMASK=255.255.255.255

刷新

ifup ifcfg-lo:0

标识

route add -host 192.168.120.100 dev lo:0

vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

立即生效

sysctl -p

配置后端真实服务器2

跟上面操作一致

客户端查看

停止主调度器服务

备调度器

恢复主调度器

备调度器

nginx1:192.168.120.30 主

nginx2:192.168.120.40 备

nginx3:192.168.120.60 客户端

主备调度器

关闭防火墙

安装服务

yum -y install keepalived

主调度器:

 cd /etc/keepalived/

cp keepalived.conf keepalived.conf.bak

vim keepalived.conf

vim /opt/check_nginx.sh

 chmod 777 check_nginx.sh

 systemctl restart keepalived.service

vim /usr/local/nginx/html/index.html

备调度器

scp root@192.168.120.30:/etc/keepalived/keepalived.conf /etc/keepalived/

vim /etc/keepalived/keepalived.conf

vim /opt/check_nginx.sh

chmod 777 check_nginx.sh

systemctl restart keepalived.service

vim /usr/local/nginx/html/index.html

主调度器关闭nginx

脑裂:主和备同时拥有VIP地址。在高可用系统当中,联系两个节点的心跳线,本来是一体的,动作协调的高可用系统。心跳线断开后,分裂成了两个独立的个体。主备之间失去了联系,都以为是对方出现了故障。两个调度器就像脑裂人一样

开始抢占主的位置,抢占VIP。主也有VIP,备也有VIP,导致整个集群失败。

软件层面:

  1. 配置文件
  2. tcpdump抓包分析

tcpdump -i ens33 vrrp -n

动态获取vrrp协议的所有网络数据包

重启

网络层面:

高可用服务器之间心跳线检测失败。主备之间无法进行通信。

硬件层面:

连接主备之间的心跳线老化

网卡或网卡的驱动失效,IP地址配置冲突

防火墙没有配置心跳线消息的传输通道。导致检测失败

后端服务器的配置问题,心跳方式不同,心跳广播冲突,软件BUGG。

如何解决keepalived脑裂的问题:

  1. 硬件:准备两条心跳线,这样断了一跳,依然能够传送心跳。
  2. 设置防火请一定要让心跳的消息通过
  3. 监控软件,实时检测(zabbix)

dev:开发环境 开发人员专用

sit:测试环境 测试人员使用(开发,运维)

pre:预生产环境 运维和开发(和最终的生产环境保持一致)

prd:生产环境(面向用户的环境)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/200625.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot要如何学习?【云驻共创】

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。我这里会分享一些学习Spring Boot的方法和干货,包括…

Python如何实现模板方法设计模式?什么是模板方法设计模式?Python 模板方法设计模式示例代码

什么是模板方法(Template Method)设计模式? 模板方法(Template Method)是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。这种模式允许子类为一个算法的特定步骤提供…

【Flink】Process Function

目录 1、ProcessFunction解析 1.1 抽象方法.processElement() 1.2 非抽象方法.onTimer() 2、Flink中8个不同的处理函数 2.1 ProcessFunction 2.2 KeyedProcessFunction 2.3 ProcessWindowFunction 2.4 ProcessAllWindowFunction 2.5 CoProcessFunction 2.6 ProcessJo…

【Java系列】SpringBoot 集成MongoDB 详细介绍

目录 写在前面 一、步骤介绍 步骤 1: 添加 MongoDB 依赖 步骤 2: 配置 MongoDB 连接信息 步骤 3: 创建实体类 步骤 4: 创建 Repository 接口 步骤 5: 使用 Repository 进行操作 二、特殊处理 写在前面 在Spring Boot中集成MongoDB的过程相对简单,以下是一个…

Linux下使用宏定义判断系统架构和系统类型

文章目录 查看编译器当前支持的宏定义查找指定的宏不同架构不同系统 附录-编译器内部常用的一些宏定义宏定义实际应用使用宏定义判断系统架构使用宏定义判断系统类型 一般情况下在linux下做C/C方面的开发不需要太关注系统架构,当然如果涉及到不同架构下的适配问题&a…

Python---变量的作用域

变量作用域:指的是变量的作用范围(变量在哪里可用,在哪里不可用),主要分为两类:局部变量和全局变量。 定义在函数外部的变量就称之为全局变量; 定义在函数内部的变量就称之为局部变量。 # 定义…

基于 Eureka 的 Ribbon 负载均衡实现原理【SpringCloud 源码分析】

目录 一、前言 二、源码分析 三、负载均衡策略 一、前言 如下图,我们在 orderserver 中通过 restTemplate 向 usersever 发起 http 请求,在服务拉取的时候,主机名 localhost 是用服务名 userserver 代替的,那么该 url 是一个可…

Android Studio 引入Xui框架-简单应用

Android Studio Flamingo | 2022.2.1 Patch 2 Android 11开发、Gradle Version 8.0、 jdk17 源代码:GitHub - xuexiangjys/XUI: 💍A simple and elegant Android native UI framework, free your hands! (一个简洁而优雅的Android原生UI框架&#xff…

录屏软件自动开启录视频,是如何实现的?

工作要留痕,作为职场人的一项必备技能,因此许多人在做一些重要操作的时候,就会提前开启录屏软件,把操作的每一个步骤进行录制,以避免在出现问题的时候进行检查。当每天都需要在固定的时间点重复某项工作的时候&#xf…

【力扣】从零开始的动态规划

【力扣】从零开始的动态规划 文章目录 【力扣】从零开始的动态规划开头139. 单词拆分解题思路 45. 跳跃游戏 II解题思路 5. 最长回文子串解题思路 1143. 最长公共子序列解题思路 931. 下降路径最小和解题思路 开头 本力扣题解用5题来引出动态规划的解题步骤,用于本…

竞赛选题 目标检测-行人车辆检测流量计数

文章目录 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 🔥 优质竞赛项目系列,今天要分享的是 行人车辆目标检测计数系统 …

【计算机网络笔记】路由算法之距离向量路由算法

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

DAY60 84.柱状图中最大的矩形

84.柱状图中最大的矩形 题目要求:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 思路 单调栈 本地单调栈的解法和接雨水的题目是遥相呼…

【docker】虚拟化和docker容器概念

基础了解 IAAS: 基础设施服务,(只提供基础设施,没有系统) **SAAS: ** 软件即服务,(提供基础设施和系统) PAAS: 平台即服务,(提供基…

《白帽子讲web安全》

第十四章 PHP安全 文件包含漏洞是“代码注入”的一种。“代码注入”这种攻击,其原理就是注入一段用户能控制的脚本或代码,并让服务器端执行。“代码注入”的典型代表就是文件包含(File Inclusion)。文件包含可能会出现在JSP、PHP…

时序预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的时间序列预测

时序预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的时间序列预测 目录 时序预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现HPO-ELM猎食者算法优化极限学习机时间序列预测 1.data为数据集…

【C++ 学习 ㊴】- 详解 C++ 的 I/O 流

目录 一、C 的 I/O 流 二、C 的标准 I/O 流 三、C 的文件 I/O 流 一、C 的 I/O 流 C 语言有一套完成数据读写(I/O)的解决方案: 使用 scanf()、gets() 等函数从键盘读取数据,使用 printf()、puts() 等函数向屏幕输出数据&#…

②【Hash】Redis常用数据类型:Hash [使用手册]

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Redis Hash ②Redis Hash 操作命令汇总1. hset…

Week-T10 数据增强

文章目录 一、准备环境和数据1.环境2. 数据 二、数据增强(增加数据集中样本的多样性)三、将增强后的数据添加到模型中四、开始训练五、自定义增强函数六、一些增强函数 🍨 本文为🔗365天深度学习训练营 中的学习记录博客&#x1f…

【Java】异常处理及其语法、抛出异常、自定义异常(完结)

🌺个人主页:Dawn黎明开始 🎀系列专栏:Java ⭐每日一句:道阻且长,行则将至 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️ 文章目录 一.🔐异…