LVS实战演练

目录

一.LVS简介

<1>.工作原理

<2>.相关术语

<3>.lvs集群的常用转发类型

二.部署NAT模式集群实验

<1>.实验环境

1.调度器

2.真实服务器

3.客户端

<2>.实验配置

1.VS中启用内核路由器功能

2.RS装上http服务

3.VS安装ipvsadm软件

4.在RS上输入测试内容

5.在VS进行测试

6.在VS中添加调度策略

<3>.客户端测试

三.部署DR模式集群实验

<1>.实验环境

1.路由器

2.调度器

3.真实服务器

4.客户端

<2>.实验配置

1.路由器中启用内核路由器功能

2.RS主机中使vip不对外响应

3.在VS主机和RS主机添加vip(临时添加,关机重启后需要重新添加)

4.在VS中添加调度策略

<3>.测试

三.防火墙标签解决轮询错误

<1>.在RS1和RS2中安装mod_ssl并重启apache

<2>.在vs调度器中设定端口标签,人为80和443是一个整体

<3>.设定调度规则

<4>.测试

四.lvs持久化链接

<1>.设定调度规则

<2>.测试 


一.LVS简介

        LVS(Linux Virtual Server)是Linux虚拟服务器的简称,是一种基于Linux内核的开源负载均衡技术。

<1>.工作原理

        LVS(Linux Virtual Server)的工作原理可以概括为通过负载均衡技术将客户端的请求分发到多个后端服务器上,以实现高可用性、高性能和可伸缩性。

<2>.相关术语

VS: Virtual Server,负责调度

RS: RealServer,负责真正提供服务

CIP: Client IP

VIP: Virtual serve IP  VS外网的IP

DIP: Director IP  VS内网的IP

RIP: Real server  IP

访问流程: CIP <--> VIP == DIP <--> RIP

<3>.lvs集群的常用转发类型

  • LVS-NAT(Network Address Translation)修改请求报文的目标IP地址,实现多目标IP的DNAT(Destination Network Address Translation)。
  • LVS-DR(Direct Routing)通过为请求报文重新封装一个MAC首部进行转发,源IP/PORT以及目标IP/PORT均保持不变,是LVS的默认模式,应用最广泛。
  • LVS-TUN(Tunneling)在原请求IP报文之外新加一个IP首部,实现两级IP的隧道逻辑转发。
  • LVS-FULLNAT通过同时修改请求报文的源IP地址和目标IP地址进行转发,类似于LVS-NAT的增强版。

1. LVS-NAT

       LVS-NAT是LVS集群中一种基于网络地址转换技术的负载均衡模式。它通过修改请求报文的目标IP地址和端口,将请求转发到后端真实服务器,并将响应报文中的源IP地址修改为虚拟服务器的IP地址,实现客户端和真实服务器之间的无缝通信。然而,由于所有请求和响应都必须经过LVS调度器,可能导致调度器成为系统瓶颈。

2. LVS-DR

       LVS-DR模式是一种高效的负载均衡方式,它允许客户端直接与后端真实服务器通信,而不需要经过LVS调度器转发响应数据。在这种模式下,LVS调度器只负责接收客户端的请求,并根据负载均衡算法选择一个合适的真实服务器,然后将请求转发给该服务器。真实服务器处理请求后,直接将响应返回给客户端,而不需要经过LVS调度器。

3. LVS-TUN

       LVS-TUN模式通过在网络层之上增加一个IP隧道,将客户端的请求封装在一个新的IP包中,然后转发给后端真实服务器。真实服务器处理完请求后,直接将响应返回给客户端,而不经过LVS调度器。这种方式使得LVS调度器成为无状态的,只需要处理请求的分发,而不必关心响应的返回,从而提高了系统的可扩展性和性能。

4. LVS-FULLNAT

       LVS-FULLNAT模式与NAT模式类似,但它在处理请求和响应报文时都进行了源地址和目标地址的转换。在NAT模式下,只有请求报文的目标地址被转换为RS的地址,而响应报文则直接返回给客户端,无需再次转换。但在FULLNAT模式下,请求报文的源地址和目标地址都会被转换,响应报文在返回给客户端之前,其源地址和目标地址也会进行相应的转换。

二.部署NAT模式集群实验

<1>.实验环境

一台客户机、一台调度器、两台真实服务器

VMVare网络设置NAT模式子网IP为172.25.254.0,仅主机模式子网IP为192.168.0.0

1.调度器

VMVare设置eth0网卡为NAT模式,eth1为仅主机模式

[root@LVS ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-namw=eth0[ipv4]
address1=172.25.254.100/24,172.25.254.2
method=manual
dns=114.114.114.114;[root@LVS ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection 
[connection]
id=eth1
type=ethernet
interface-namw=eth1[ipv4]
address1=192.168.0.100/24
method=manual

2.真实服务器

VMVare设置eth0网卡为仅主机模式

[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-namw=eth0[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-namw=eth0[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual

3.客户端

VMVare设置eth0网卡为NAT模式

[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-namw=eth0[ipv4]
address1=172.25.254.200/24,172.25.254.2
method=manual
dns=114.114.114.114;

<2>.实验配置

1.VS中启用内核路由器功能

[root@LVS boot]# echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf
[root@LVS boot]# sysctl -p
net.ipv4.ip_forward = 1

2.RS装上http服务

[root@webserver1 ~]# yum install httpd -y

3.VS安装ipvsadm软件

[root@LVS boot]# dnf install ipvsadm -y

4.在RS上输入测试内容

[root@webserver1 ~]# echo webserver1 - 192.168.0.10 > /var/www/html/index.html
[root@webserver1 ~]# systemctl enable --now httpd
[root@webserver2 ~]# echo webserver2 - 192.168.0.20 > /var/www/html/index.html
[root@webserver2 ~]# systemctl enable --now httpd

5.在VS进行测试

[root@LVS boot]# curl 192.168.0.10
webserver1 - 192.168.0.10
[root@LVS boot]# curl 192.168.0.20
webserver2 - 192.168.0.20

6.在VS中添加调度策略

[root@LVS boot]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn[root@LVS boot]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@LVS boot]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@LVS boot]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m[root@LVS boot]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr-> 192.168.0.10:80              Masq    1      0          0         -> 192.168.0.20:80              Masq    1      0          0   

<3>.客户端测试

[root@client ~]# for i in {1..10}
> do
> curl 172.25.254.100
> done
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10

三.部署DR模式集群实验

<1>.实验环境

一台客户端、一台路由器、一台调度器、两台真实服务器

VMVare网络设置NAT模式子网IP为172.25.254.0,仅主机模式子网IP为192.168.0.0

1.路由器

VMVare设置eth0网卡为NAT模式,eth1为仅主机模式

[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-namw=eth0[ipv4]
address1=172.25.254.100/24,172.25.254.2
method=manual
dns=114.114.114.114;[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection 
[connection]
id=eth1
type=ethernet
interface-namw=eth1[ipv4]
address1=192.168.0.100/24
method=manual

2.调度器

VMVare设置eth1网卡为仅主机模式

[root@LVS ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection 
[connection]
id=eth1
type=ethernet
interface-namw=eth1[ipv4]
address1=192.168.0.50/24,192.168.0.100
method=manual

3.真实服务器

VMVare设置eth0网卡为仅主机模式

[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-namw=eth0[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-namw=eth0[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual

4.客户端

VMVare设置eth0网卡为仅主机模式

[root@client ~]# curl 192.168.0.200
webserver2 - 192.168.0.20
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-namw=eth0[ipv4]
address1=172.25.254.200/24,172.25.254.100
method=manual

<2>.实验配置

1.路由器中启用内核路由器功能

[root@router ~]# echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf
[root@router ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0

2.RS主机中使vip不对外响应

[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore      
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore      
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 

3.在VS主机和RS主机添加vip(临时添加,关机重启后需要重新添加)

[root@LVS ~]# ip a a 192.168.0.200/32 dev lo
[root@webserver1 ~]# ip a a 192.168.0.200/32 dev lo
[root@webserver2 ~]# ip a a 192.168.0.200/32 dev lo

4.在VS中添加调度策略

[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn[root@LVS ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@LVS ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@LVS ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 wrr-> 192.168.0.10:80              Route   1      0          0         -> 192.168.0.20:80  

<3>.测试

根据DR模式的工作原理,用wearshark抓包能明显看到实验结果,便于理解

[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20

三.防火墙标签解决轮询错误

       以 http https 为例,当我们在 RS 中同时开放 80 443 端口,那么默认控制是分开轮询的,这样我们就出 现了一个轮询错乱的问题 。 当第一次访问 80 被轮询到 RS1 后下次访问 443 仍然可能会被轮询到 RS1 上。

<1>.在RS1RS2中安装mod_ssl并重启apache

[root@webserver2 ~]# yum install mod_ssl -y
[root@webserver2 ~]# systemctl restart httpd

<2>.vs调度器中设定端口标签,人为80443是一个整体

[root@LVS ~]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 813[root@LVS ~]# iptables -t mangle -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
MARK       6    --  0.0.0.0/0            192.168.0.200        multiport dports 80,443 MARK set 0x32d

<3>.设定调度规则

[root@LVS ~]# ipvsadm -A -f 813 -s rr
[root@LVS ~]# ipvsadm -a -f 813 -r 192.168.0.10 -g
[root@LVS ~]# ipvsadm -a -f 813 -r 192.168.0.20 -g[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  813 rr-> 192.168.0.10:0               Route   1      0          0         -> 192.168.0.20:0               Route   1      0          0  

<4>.测试

[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10

四.lvs持久化链接

        LVS(Linux Virtual Server)持久化连接是一种机制,用于确保来自同一客户端的请求被持续发送到同一台后端真实服务器(Real Server,简称RS),以保持会话的连续性和一致性。

<1>.设定调度规则

[root@LVS ~]# ipvsadm -E -f 813 -s rr -p
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  813 rr persistent 360-> 192.168.0.10:0               Route   1      0          0         -> 192.168.0.20:0               Route   1      0          0  

<2>.测试 

[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20

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

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

相关文章

删掉Elasticsearch6.x 的 .security-6索引会怎么样?

背景 玩了下 Elasticsearch 的认证&#xff0c;启动 ES 并添加认证后&#xff0c;看到索引列表额外多了一个 .security-6 。以为是没用的&#xff0c;手欠就给删掉了&#xff0c;然后 Elasticsearch 就访问不了了。 只好再重新部署&#xff0c;再看索引内容&#xff0c;发现这…

VMWare虚拟机磁盘扩容

文章目录 环境背景虚拟机磁盘扩容配置参考 环境 VMWare Workstation 17 ProRHEL 9.4 背景 一个RHEL虚拟机&#xff0c;其 /home 目录大小为30GB。 [ding192 ~]$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0…

Multisim 用LM358 运放模拟线性稳压器 - 运放输出饱和 - 前馈电容

就是拿运放搭一个可调的LDO 稳压器&#xff0c;类似下面这个功能框图里的感觉。本来应该非常简单&#xff0c;没什么好说的&#xff0c;没想到遇到了两个问题。 原理 - 理想运放 我用PNP 三极管Q2 作为输出&#xff0c;运放输出电压升高时&#xff0c;流过PNP 三极管BE 的电流变…

关于解决Qt配置clang format插件后打开Qt时报缺少pythonxxx.dll的问题

前言 原本安装过程中没有出现任何问题&#xff0c;但是当我退出Qt&#xff0c;再次打开Qt时报 虽然也不影响正常编程&#xff0c;但是架不住每次打开它都提示&#xff0c;于是准备探究下这个问题&#xff0c;并将其解决掉 第一步&#xff1a; 在官网下载:clang format&…

ubuntu20.04安装k8s和kubesphere

前提 已经安装docker 机器使用小写的hostname hostname建议你的机器把hostname改成小写&#xff0c;不然您会踩坑 官网的教程已经足够详实&#xff0c;推荐看官网教程 https://kubesphere.io/docs/v3.4/quick-start/all-in-one-on-linux/ 安装依赖 sudo apt install connt…

C++——多态

目录 前言&#xff1a;需要声明的&#xff0c;本节课件中的代码及解释都是在vs2013下的x86程序中&#xff0c;涉及的指针都是4bytes。 如果要其他平台下&#xff0c;部分代码需要改动。比如&#xff1a;如果是x64程序&#xff0c;则需要考虑指针是8bytes问题 等等 1.多态的概念…

【黑马】MyBatis

目录 MyBatis简介JDBC缺点&#xff1a;MyBatis针对于JDBC进行简化&#xff0c;简化思路&#xff1a; MyBatis快速入门具体构建步骤解决SQL映射文件的警告提示 Mapper代理开发案例&#xff1a;使用Mapper代理方式完成案例具体步骤详解&#xff1a;Mapper代理方式 Mapper核心配置…

C++ SQL ORM

测试代码 // // Created by www on 2024/8/7. // #include "sqlitepp/database.h" #include "sqlitepp/condition.h"#include <iostream> using namespace sqlitepp; using namespace sqlitepp::literals;enum class test_enum {hello };void test…

掌握这项技能,用Python爬虫定制你的私人电影推荐库

思路&#xff1a; 1、先选取你要获取的视频 2、用vip解析工具解析&#xff0c;获取地址 3、复制粘贴&#xff0c;获取视频 以下是效果图 需要的python模块&#xff1a; ##第一个模块不要安装&#xff0c;第二个模块需要安装 1、from multiprocessing import Pool 2、imp…

守护网站心脏:HAProxy负载均衡技术详解(全网最详细)

守护网站心脏&#xff1a;HAProxy负载均衡技术详解 文章目录 **守护网站心脏&#xff1a;HAProxy负载均衡技术详解**haproxy介绍特点功能配置结论 haproxy负载均衡测试haproxy主机操作日志重定向操作 webserver1主机操作webserver2主机操作 haporxy相关配置测试backup参数测速h…

【Redis】Redis 数据类型

文章目录 前言1 通用知识1.1 基本全局命令1.2 数据结构和内部编码 2 String2.1 类型介绍2.2 相关命令2.2.1 SET/GET 系列命令2.2.2 INCR/DECR 计数系列命令2.2.3 其他命令2.2.4 命令小结 2.3 内部编码2.4 应用场景2.4.1 缓存功能2.4.2 计数功能2.4.3 共享会话2.4.4 验证码功能 …

如何在linux上部署zabbix监控工具

<1>搭建服务机 1&#xff09;首先我们先执行 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config ​ #然后我们再把防火墙开机自启关掉 马上生效 systemctl disable --now firewalld 2&#xff09;我们获得rpm包 rpm -Uvh https://mirrors.aliyun.com/…

Java设计模式-享元设计模式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. 享元设计模式介绍1.1 定义1.2 原理1.3 使用场景1.4 注意事项 2. 享元设计模式角色2.1 抽象享元角色&#xff08;‌AbstractFlyWeight&#xff09;‌2.2 具体享元…

【MySQL】视图——视图、视图的概念、为什么要使用视图、视图的基本使用、视图规则和限制

文章目录 MySQL1. 视图1.1 视图的概念1.2 为什么要使用视图1.3 视图的基本使用1.4 视图规则和限制 MySQL 1. 视图 1.1 视图的概念 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表…

【动态规划】1、不同路径II+2、三角形最小路径和

1、不同路径II&#xff08;难度中等&#xff09; 该题对应力扣网址 AC代码 只会写简单的if-else class Solution { public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {//1、定义子问题//2、子问题递推关系//3、确定dp数组的计算顺序…

uniapp获取swiper中子组件的内容高度

swiper有默认高度,如果不单独设置一个具体高度&#xff0c;swiper后面的内容将不会展示 这里展示的例子是: swiper中放有一个子组件,想要完整展示子组件的内容&#xff0c;swiper就需要获取到子组件的内容高度并设置 <!-- 注意: 这里的单位是 px,不是rpx --><swiper…

Element UI导航菜单刷新就复原问题解决方法~

1、首先要知道为什么一刷新就复原了&#xff0c;是因为default-active属性设置的是默认值&#xff0c;是一个死值&#xff0c;一旦刷新就会复原&#xff0c;造成高亮不能保持&#xff0c;那么怎么解决呢&#xff1f; 2、很简单&#xff0c;无需像一些博主一样绑定path。思路&a…

linux中信号的相关概念

信号 内核层和用户层通信的一种方式 信号类型 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18…

【限流与Sentinel超详细分析】

Sentinel 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件&#xff0c;主要以流量为切入点&#xff0c;从流量控制、熔断降级、系统自适应保护等多个维度来保障微服务的稳定性。 1 Sentinel 基本概念 资源…

MySQL —— 聚合查询,分组查询 与 联合查询

聚合函数 常见的统计总数、计算平局值等操作&#xff0c;可以使用聚合函数来实现&#xff0c;常见的聚合函数有&#xff1a; 函数说明count()统计数据总数sum()求和avg()求平均值max()求最大值min()求最小值 注意凡是涉及运算的&#xff0c;数据库会自动掉 NULL 值 注意NULL …