LVS/DR+Keepalived负载均衡实战(一)

引言

负载均衡这个概念对于一个IT老鸟来说再也熟悉不过了,当听到此概念的第一反应是想到举世闻名的nginx,但殊不知还有一个大名鼎鼎的负载均衡方案可能被忽略了,因为对于一般系统来说,很多应用场合中采用nginx基本已经满足需求,但对于大型机高性能系统掌握lvs负载均衡是非常有必要的,接下来将小哥对lvs负载均衡进行初步探索。

lvs 简介

概念

LVS(Linux Virtual Server),顾名思义是linux 虚拟服务器的意思,一个虚拟的服务器集群系统,使用负载均衡技术将多台服务器组成一个虚拟服务器。

LVS的由来

由于互联网用户的急剧增长,用户对服务器的访问数量快速增加,这就要求广大的互联网服务器需要具备较大的并发服务能力,因此对于大负载的服务器来讲, CPU、I/O处理能力很快会成为瓶颈。由于单台服务器的性能总是有限的,简单的提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡技术才能满足大量并发访问的需要。

LVS 的优势

1、LVS具有较高的带负载能力,理论上来说,首先LVS 工作在网络7层模型的第4层,一般情况下,越低的工作层次就代表其效率也会越高,工作在低4层模型也就意味着不用和客户端建立连接,不用握手,不用付出因为建立连接或者握手而开辟的资源开销;其次从操作系统层面来讲,LVS是内核级别的功能,对于有限核数的cpu来看,内核级别的功能优先级远远高于用户级别功能的优先级,其执行效率一般会计较高;最后从系统资源层面来看, LVS只对数据进行转发,不消耗操作系统的IO 资源,因此LVS对操作系统资源的依赖是大大降低。根据小哥我查到的数据,LVS 并发服务量大概在几十万这个级别。
2、LVS具有较高的可用,LVS适合对所有的应用层软件做负载均衡解决方案。
3、可靠性较高,LVS工作在7网络模型第四层,他的运行只和网络协议栈和操作系统有关系,因此和其他应用软件的冲突机率大大降低,此外
LVS自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat,这使得LVS的可靠性得到充分保障。

LVS 搭建高可靠负载均衡集群

集群负载均衡的三种模式

NAT

NAT(Network Address Translation)意即网络地址转换,允许一个整体机构以一个公用IP地址出现在Internet上,即把内部私有网络地址翻译成合法网络IP地址的技术。通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
在这里插入图片描述

IP Tunneling

采用NAT技术做负载均衡时,自身网络带宽和cpu算力变成瓶颈,为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。
在这里插入图片描述

Direct Routing

Direct Routing 也就是常说的DR模式,此模式通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同TUN模式一样,DR模式可提高集群系统的扩展性。DR模式下没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求LVS服务器和其他应用服务必须在同一物理网段上。其模型图如下所示:

在这里插入图片描述

LVS 实战

LVS 高可靠负载均衡集群至少得准备四台虚拟机
在这里插入图片描述
按照本大猿的结构准备环境,架构框图如下所示:
在这里插入图片描述
从上图中可以看出,我们需要将node1和node2的两台机子作为LVS负载均衡的主机和从机,需要检查两台机器的环境。

所有节点关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

在这里插入图片描述

LVS 环境准备

从linux 2.4 开始已经自带LVS,我们只需要安装ipvsadm 工具包即可。node1 和node2 分别安装ipvsadm 工具。

yum install ipvsadm -y

在这里插入图片描述
在这里插入图片描述

LVS环境检查

查看LVS 环境配置是否污染,如果污染需要清空

# 查看配置
ipvsadm  -ln
#  清空配置
ipvsadm  -C

在这里插入图片描述
如果虚拟网卡(VIP)已经存在,则需要先卸载网卡,保持环境干净。

ifconfig  down  eth0:xxx down

本文中LVS 主副节点均为新建,无需其他清理操作。
在这里插入图片描述
在这里插入图片描述

keepalived环境准备

LVS 需要和keepalived结合,

什么是keepalived

Keepalived is a routing software written in C. The main goal of this project is to provide simple and robust facilities for loadbalancing and high-availability to Linux system and Linux based infrastructures. Loadbalancing framework relies on well-known and widely used Linux Virtual Server (IPVS) kernel module providing Layer4 loadbalancing. Keepalived implements a set of checkers to dynamically and adaptively maintain and manage loadbalanced server pool according their health. On the other hand high-availability is achieved by VRRP protocol. VRRP is a fundamental brick for router failover. In addition, Keepalived implements a set of hooks to the VRRP finite state machine providing low-level and high-speed protocol interactions. In order to offer fastest network failure detection, Keepalived implements BFD protocol. VRRP state transition can take into account BFD hint to drive fast state transition. Keepalived frameworks can be used independently or all together to provide resilient infrastructures.
下面开始配置keepalived环境

yum install keepalived  -y

在这里插入图片描述

keepalived配置文件设置

cp /etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
master
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.150.100/24 dev ens33 label  ens33:1
    }
}

virtual_server 192.168.159.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP

   real_server 192.168.159.32 80 {
        weight 1
        HTTP_GET {
              url {
                   path /
                   status_code 200
              }
              connect_timeout 3
              nb_get_retry 3
              delay_before_retry 3
       }
    }
    real_server 192.168.159.33 80 {
        weight 1
        HTTP_GET {
              url {
                   path /
                   status_code 200
              }
              connect_timeout 3
              nb_get_retry 3
              delay_before_retry 3
       }
    }
}

在这里插入图片描述

在这里插入图片描述

slave
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 500
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.150.100/24 dev ens33 label  ens33:1
    }
}

virtual_server 192.168.159.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP

   real_server 192.168.159.32 80 {
        weight 1
        HTTP_GET {
              url {
                   path /
                   status_code 200
              }
              connect_timeout 3
              nb_get_retry 3
              delay_before_retry 3
       }
    }
    real_server 192.168.159.33 80 {
        weight 1
        HTTP_GET {
              url {
                   path /
                   status_code 200
              }
              connect_timeout 3
              nb_get_retry 3
              delay_before_retry 3
       }
    }
}

在从机上不显示虚拟网卡但显示路由配置
在这里插入图片描述
需要注意的是副节点上并没有看到虚拟网卡信息,因为这时候主节点无故障,副节点中的虚拟网卡基本

应用服务器配置

修改内核配置

echo 1  >  /proc/sys/net/ipv4/conf/ens33/arp_ignore 
echo 1  >  /proc/sys/net/ipv4/conf/all/arp_ignore 
echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce 
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 

在这里插入图片描述
其他方式修改,永久神效

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

在这里插入图片描述
在这里插入图片描述

设置隐藏ip

node3和node4为应用服务器,我们需要在应用服务器上配置VIP

ifconfig  lo:1  192.168.159.100  netmask 255.255.255.255

在这里插入图片描述

安装httpd插件

node3和node4 首先安装httpd 插件

	yum install httpd -y
	systemctl start httpd 

在这里插入图片描述

修改首页,两个节点需要分别修改

	vi   /var/www/html/index.html
		from node3
	#重启
	systemctl restart httpd

在这里插入图片描述
如上图将两个应用服务器节点的httpd服务配置完成。

数据转发失效

这里数据转发失效的最大可能原因是没有注释掉vrrp_strict这条配置。

在这里插入图片描述

测试负载均衡效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
经过测试,本次探索的LVS负载均衡器基本达到试目标,后续文章会继续探索这块的知识。

参考文章:
https://blog.csdn.net/weixin_52813907/article/details/127074105
https://www.jianshu.com/p/a2190b6d4333

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C# Programming】C#第一课(自己学习的笔记)

目录 一、C# 介绍 1.1 托管代码(Manage Code ) : 1.2 基础类型库 (Base Class Library): 1.3 程序集(Assembly): 1.4 .NET 框架: 1.5 公共中间语言(Common Intermediate Language),简称 IL。 1.6 C#编译器将源代…

android Ndk Jni动态注册方式以及静态注册

目录 一.静态注册方式 二.动态注册方式 三.源代码 一.静态注册方式 1.项目名\app\src\main下新建一个jni目录 2.在jni目录下,再新建一个Android.mk文件 写入以下配置 LOCAL_PATH := $(call my-dir)//获取当前Android.mk所在目录 inclu

STM32F429IGT6使用CubeMX配置外部中断按键

1、硬件电路 2、设置RCC,选择高速外部时钟HSE,时钟设置为180MHz 3、配置GPIO引脚 4、NVIC配置 PC13相同 5、生成工程配置 6、部分代码 中断回调函数 /* USER CODE BEGIN 0 */void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {if(GPIO_Pin GPIO_PIN_0){HAL_GPIO…

C语言属刷题训练【第八天】

文章目录 🪗1、如下程序的运行结果是( )💻2、若有定义: int a[2][3]; ,以下选项中对 a 数组元素正确引用的是( )🧿3、在下面的字符数组定义中,哪一个有语法错…

uniapp创建项目入门【详细】

大家在学习vue和微信小程序之后,就可以开始来学习uniapp了,在uniapp中,一套代码可以跨越所有的平台,可以很方便的维护。接下来我们先来学习如何创建uinapp的项目 一、uniapp的创建需求 大家只要会vue和微信小程序的基础来学习unia…

PHP最简单自定义自己的框架定义常量自动生成目录(三)

1、框架入口增加模块定义&#xff0c;实现多模块功能 index.php 定义模块 <?php //定义当前请求模块 define("MODULE",index); require "./core/KJ.php"; 创建后台模块admin.php <?php define("MODULE",admin); require "./cor…

运维监控学习笔记2

硬件监控&#xff1a; 1&#xff09;使用IPMI 2&#xff09;机房巡检 路由器和交换机&#xff1a; 使用SNMP&#xff08;简单网络管理协议&#xff09;进行监控。 Linux 安装snmp&#xff1a; yum install -y net-snmp net-snmp-utils 说明&#xff1a;net-snmp是安装在snm…

【C语言】结构体详解

现实生活中一个事物&#xff0c;会有许多属性连接起来。而C语言引入一种构造数据类型——结构体 将属于一个事物的多个数据组织起来以体现其内部联系。 一、结构体类型的定义 结构体类型 是一种 构造类型&#xff0c;它是由若干成员组成的&#xff0c;每个成员可以是一个基本…

系统架构设计专业技能 · 系统安全分析与设计(四)【加解密、数字信封、信息摘要、数字签名、数字书证、网络安全、信息安全】

系列文章目录 系统架构设计专业技能 网络规划与设计&#xff08;三&#xff09;【系统架构设计师】 系统架构设计专业技能 系统安全分析与设计&#xff08;四&#xff09;【系统架构设计师】 系统架构设计高级技能 软件架构设计&#xff08;一&#xff09;【系统架构设计师…

概率论与数理统计:第二、三章:一维~n维随机变量及其分布

文章目录 Ch2. 一维随机变量及其分布1.一维随机变量1.随机变量2.分布函数 F ( x ) F(x) F(x)(1)定义(2)分布函数的性质 (充要条件)(3)分布函数的应用——求概率3.最大最小值函数 2.一维离散型随机变量及其概率分布(分布律)3.一维连续型随机变量及其概率分布(概率密度)4.一般类型…

openocd调试esp32(通过FT232H)

之前在学习ESP32&#xff0c;其中有一部分课程是学习openocd通过JTAG调试程序的&#xff0c;因为我用的是ESP32-wroom&#xff0c;usb端口没有集成对应的usb转jtag的ft232&#xff0c;查了ESP32相关的资料&#xff08;JTAG 调试 - ESP32 - — ESP-IDF 编程指南 latest 文档 (es…

Linux 目录和文件常见操作

就常见的命令&#xff1a; pwd pwd 显示当前的目录 目录迁移 我以如下的目录大致结构做一个简单的例子 cd 迁移到指定的路径&#xff0c;可以指定相对路径和绝对路径&#xff0c;默认相对 .指向当前路径&#xff0c;…/ 指向上一级的目录。 ls 列出文件及其目录 命令选…

android 如何分析应用的内存(十八)终章——使用Perfetto查看内存与调用栈之间的泄露

android 如何分析应用的内存&#xff08;十八&#xff09; 在前面两篇文章中&#xff0c;先是介绍了如何用AS查看Android的堆内存&#xff0c;然后介绍了使用MAT查看 Android的堆内存。AS能够满足基本的内存分析需求&#xff0c;但是无法进行多个堆的综合比较&#xff0c;因此…

第六章 SpringBoot注解 @ConditionalOnBean

满足条件的则进行组件的注入 Configuration(proxyBeanMethods true) //告诉SpringBoot这是一个配置类 配置文件 ConditionalOnBean(name "tom") public class MyConfig {Bean("tom")public Pet tom(){return new Pet("tomPet");}/*** 外部无论…

linux 命令--查看网络端口命令

使用 netstat 检查端口 netstat 是一个命令行工具&#xff0c;可以提供有关网络连接的信息。 netstat - atulnp会显示所有端口和所有对应的程序&#xff0c;用grep管道可以过滤出想要的字段 -a &#xff1a;all&#xff0c;表示列出所有的连接&#xff0c;服务监听&#xff…

对文件的读取和修改 JAVA

目录 1、try catch:2、hasNextLine():3、java读取某个文件夹信息&#xff1a;4、修改&#xff1a; 1、try catch: 1、try语句对你觉得可能会有问题的语句进行尝试 2、try内语句出现错误会被catch语句捕捉&#xff0c;且整个程序不会崩溃 3、try语句出错才会执行下方catch语句…

在R中比较两个矩阵是否相等

目录 方法一&#xff1a;使用all.equal()比较两个R对象是否近似相等 方法二&#xff1a;使用identical比较两个R对象是否精确相等。 方法一&#xff1a;使用all.equal()比较两个R对象是否近似相等 使用函数&#xff1a;all.equal(x,y) 比较两个R对象x和y是否近似相等 > M1…

特语云用Linux和MCSM面板搭建 我的世界基岩版插件服 教程

Linux系统 用MCSM和DockerWine 搭建 我的世界 LiteLoaderBDS 服务器 Minecraft Bedrock Edition 也就是我的世界基岩版&#xff0c;这是 Minecraft 的另一个版本。Minecraft 基岩版可以运行在 Win10、Android、iOS、XBox、switch。基岩版不能使用 Java 版的服务器&#xff0c;…

tomcat设置PermSize

最近tomcat老是报错,查看了日志出现PermGen 内存不够用,重启tomcat后查询使用情况 通过启动参数发现没有设置 PermGen,继续通过jmap查看 jmap -heap 21179 发现99%已使用,而且默认是30.5M,太小了,这里设置成256M 1. 创建setenv.sh文件 在/usr/local/tomcat/bin目录下创建一个…

公会在tiktok发展,有哪些国家,怎么入驻呢?

在秀场直播领域&#xff0c;众多公会都将目光聚焦在TikTok上。TikTok已成为一个新的金矿&#xff0c;许多公会已在这个平台上赚得盆满钵满。 这些公会在TikTok上月流水达到数百万美元&#xff0c;甚至在一场PK中流水达到40万美元&#xff0c;分成比例高达80%。TikTok的秀场直播…