首页 > 系统相关 >linux-LVS

linux-LVS

时间:2023-04-18 22:58:32浏览次数:31  
标签:10.0 00 LVS lvs lo linux 80 root

LVS

一、概述

1.常见负载均衡

常见负载均衡对比 优势 缺点
硬件:F5 性能好 技术支持 价 格昂贵 购买2台1对 .
lvs 工作四层 效率极其高 对数据做的转发 负载均衡 部署 维护(运维成本较高)
nginx/tengine/openresty(lua) 使用简单 支持4层(1.9版本后支持)和7层 反向代理 缓 存 流量镜像(mirror) 处理数据代理模式 替用户去查找 找到后发送给用户 并发较大(1w以 上)
haproxy 相对复杂 支持4层和7层 反向代理 动态加载配置文件 处理数据代理模式 替用户去查找 找到后发送给用户 并发较大(1w以 上 比nginx多)
云服务: clb(slb) clb 4层和7层 只能支持url或者域名的转发
alb alb 7层 支持更多的7层的转发功能 基于用户请求头 http_user_agent 用户语言

2. 4层lb vs 7层lb

4层负载均衡 传输层 负载均衡最多认识到端口

7层负载均衡 应用层 url,uri 转发 http https

3.负载均衡 vs 反向代理

负载均衡: lvs 对数据进行转发

反向代理 :nginx/haproxy 做的代理 代替用户找 找到后发送给用户

lvs ngx
区别01 仅工作在4层,性能好 4层和7层,配置方便
区别02 lvs(DR模式)处理数据流程是转发 ngx对处理进行代理(2次请求,2次响应)

4.lvs 概述

linux virtual server linux虚拟服务器 负载均衡

lvs 放到Linux内核中内核模块 ip_vs

通过命令行管理工具或服务,间接管理lvs

  • 命令行管理命令 ipvsadm ()
  • 服务: keepalived通过配置文件的方式管理lvs. ( keepalived for lvs ) 控制管理 ip_vs内核模块

image-20230401142650124

二、lvs工作模式

dr direct routing 直接路由模式

nat

tun 隧道

full nat 完全nat模式

1.一些名词

名称 单词 含义
CIP client ip 客户端ip地址
VIP Virtual ip 虚拟ip
DIP director ip 负载均衡本身的ip
RS服务器 real server 真实服务器 处理用户请求.
RIP Real erver IP real server ip 真实服务器的ip地址

2.lvs -dr模式

image-20230401150557977

特点

  • lvs dr模式中lvs只负责转发并修改用户的目标IP的mac地址 dmact
  • lvs dr模式中服务端给用户的响应是通过后端rs服务器处理直接响应给用户. 不需要再通过lvs
  • lvs vip公网ip,rs服务器也要有公网ip.

优势

  • lvs dr支持更高并发(几万 几十万) ,nginx(1w)

局限性

  • lvs服务器和后端rs服务器,必须要在同1个局域网,涉及到arp解析
  • 用户请求过来的端口,无法修改的. 用户的请求是什么端口 ,后端rs服务器就要开端口
  • lvs dr模式需要lvs服务器进行配置,同时还要在后端rs服务端 lo网卡绑定vip, 抑制arp解析

3.lvs - nat模式

image-20230401150811734

特点

  • lvs服务器与rs服务器可以不在同一局域网
  • nat模式:流量进出都要经过lvs,效率性能不高
  • 端口也可以不同

基于nat模式进阶模式 full-nat模式(数据流入的时候与nat模式一致,数据流出的时候类似于dr模型,直接响应给用户)

三、dr模式

1.环境准备

主机 服务 ip
vip vip 10.0.0.3
lb01 lvs 10.0.0.5
web01 nginx 10.0.0.7
web01 nginx 10.0.0.8

2.准备web环境

#web01
[root@web01 ~]# mkdir -p /app/code/lvs
[root@web01 ~]# echo "`hostname` `hostname -I`" >/app/code/lvs/index.html
[root@web01 ~]# cat /etc/nginx/conf.d/lvs.conf
    server {
       listen 80;
       server_name   lvs.cn;
       root /app/code/lvs;
       location / {
          index index.html ;
       }
    }
[root@web01 ~]# systemctl restart nginx
[root@web01 ~]# curl -H Host:lvs.cn http://172.16.1.7

#web02
[root@web02 ~]# mkdir -p /app/code/lvs
[root@web02 ~]#  echo "`hostname` `hostname -I`" >/app/code/lvs/index.html
[root@web02 ~]# cat /etc/nginx/conf.d/lvs.conf
server {
   listen 80;
   server_name   lvs.cn;
   root /app/code/lvs;
   location / {
 	  index index.html ;
   }
}
[root@web02 ~]# systemctl restart nginx

3.关闭lb的keepliaved nginx

[root@lb01 ~]# systemctl stop keepalived.service nginx.service 

4.lb安装lvs

[root@lb01 ~]# yum -y install ipvsadm
#软件包内容
/etc/sysconfig/ipvsadm-config
/usr/lib/systemd/system/ipvsadm.service
/usr/sbin/ipvsadm           #管理lvs规则 ip_vs
/usr/sbin/ipvsadm-restore   #恢复从文件中恢复lvs规则
/usr/sbin/ipvsadm-save      #保存lvs规则

#检查 ip_vs 内核模块是否加载
[root@lb01 ~]# lsmod |grep ip_vs
ip_vs                 145458  0 
nf_conntrack          139264  1 ip_vs
libcrc32c              12644  3 xfs,ip_vs,nf_conntrack

5.lvs服务端配置

#手动添加vip,后面是由keepalived生成
[root@lb01 ~]# ip addr add 10.0.0.3/24 dev eth0 label eth0:0
[root@lb01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:fb:43:58 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.5/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.0.0.3/24 scope global secondary eth0:0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fefb:4358/64 scope link 
       valid_lft forever preferred_lft forever

#查看lvs规则
[root@lb01 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

#清空规则,要备份
[root@lb01 ~]# ipvsadm -C

#设置 tcp超时时间
[root@lb01 ~]# ipvsadm --set 30 5 60

#添加规则 ngx upstream
[root@lb01 ~]# ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20
#-A add-service 创建池塘  
#-t tcp-service tcp协议
#10.0.0.3:80 组名称
#-s scheduler 轮询算法    wrr weight 加权轮询   rr  lc wlc
#-p persistent 会话保持时间

[root@lb01 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.3:80 wrr persistent 20

#添加规则 向upsteam中添加server
[root@lb01 ~]# ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
[root@lb01 ~]# ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
#-a 添加 rs服务器  
#-t tcp协议
#-r 指定rs服务器ip
#-g gatewaying dr模式 默认的
#-w 权重

[root@lb01 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.3:80 wrr persistent 20
  -> 10.0.0.7:80                  Route   1      0          0         
  -> 10.0.0.8:80                  Route   1      0          0 
#规则的备份与恢复
ipvsadm-save -n > /root/ipvs.txt
ipvsadm-restore < /root/ipvs.txt

6.web服务器 RS服务端配置

#lo网卡绑定 vip
[root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-lo:1
DEVICE=lo:1
IPADDR=10.0.0.3
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback

[root@web01 ~]# systemctl restart network
[root@web01 ~]# ip a s lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 10.0.0.3/32 brd 10.0.0.3 scope global lo:1
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

[root@web02 ~]# cat /etc/sysconfig/network-scripts/ifcfg-lo:1
DEVICE=lo:1
IPADDR=10.0.0.3
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
[root@web02 ~]# systemctl restart network
[root@web02 ~]# ip a s lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 10.0.0.3/32 brd 10.0.0.3 scope global lo:1
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
       
#抑制arp解析
[root@web01 ~]# cat >>/etc/sysctl.conf<<EOF
> net.ipv4.conf.all.arp_ignore = 1
> net.ipv4.conf.all.arp_announce = 2
> net.ipv4.conf.lo.arp_ignore = 1
> net.ipv4.conf.lo.arp_announce = 2
> EOF
[root@web01 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2


[root@web02 ~]# cat >>/etc/sysctl.conf<<EOF
> net.ipv4.conf.all.arp_ignore = 1
> net.ipv4.conf.all.arp_announce = 2
> net.ipv4.conf.lo.arp_ignore = 1
> net.ipv4.conf.lo.arp_announce = 2
> EOF
[root@web02 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

7.调试

不要在lvs本地进行测试

lvs应对高并发负载均衡,访问量比较少的时候,不会像nginx 1:1

C:\Windows\System32\drivers\etc
10.0.0.3 lvs.cn

image-20230401154305322

image-20230401154137131

8.lvs 与keepalived配合

#加注释
virtual_server 10.0.0.3 80 {  #创建组 池塘
   delay_loop 6        
   lb_algo wrr              
   #轮询算法   lc leastconn 最小连接数  
   #         wlc  weighted round robin     
   lb_kind DR              
   # lvs DR模式    
   nat_mask 255.255.255.0   
   #vip对应的子网掩码
   persistence_timeout 50   
   #会话保持时间   -p  
   protocol TCP             
   #协议 -t 
   #ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80   -g-w 1  
	   #添加rs服务器
       real_server 10.0.0.7 80 {   
       weight 1 
	   #健康检查 检查端	   
       TCP_CHECK {                 
		   connect_timeout 8      
		   nb_get_retry 3
		   delay_before_retry 3
		   connect_port 80
       }
   }
    
    #ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1  
		#添加rs服务器
       real_server 10.0.0.8 80 {   
       weight 1 
		#健康检查 检查端	   
       TCP_CHECK {                 
		   connect_timeout 8      
		   nb_get_retry 3
		   delay_before_retry 3
		   connect_port 80
       }
   }
}


[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
   router_id lb01
}


vrrp_instance vip_3 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3 dev eth0 label eth0:0
    }
}

virtual_server 10.0.0.3 80 {  
	   delay_loop 6
	   lb_algo wrr              													
	   lb_kind DR              
	   nat_mask 255.255.255.0  
	   persistence_timeout 50  
	   protocol TCP            
	   real_server 10.0.0.7 80 {  
	   weight 1              
	   TCP_CHECK {                
		   connect_timeout 8      
		   nb_get_retry 3
		   delay_before_retry 3
		   connect_port 80
	   }
	}    
	   real_server 10.0.0.8 80 {  
	   weight 1              
	   TCP_CHECK {                
		   connect_timeout 8      
		   nb_get_retry 3
		   delay_before_retry 3
		   connect_port 80
	   }
	}
}

[root@lb01 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@lb01 ~]# systemctl start keepalived.service 

标签:10.0,00,LVS,lvs,lo,linux,80,root
From: https://www.cnblogs.com/world-of-yuan/p/17331539.html

相关文章

  • linux-Jumpserver
    Jumpserver一、跳板机概述日常普通运维:运维管理与维护环境,一般通过远程连接工具,进行去维护与管理,好处方便.缺点不方便进行行为审计(什么时间什么地点,做了什么),批量管理较难自动化运维与管理:推荐通过跳板机连接用户管理服务器,进行批量管理可以利用自动化工具(......
  • Windows 上的 Bash 正在成为微软的 Linux
    微软对WindowsSubsystemfor Linux(WSL)的一系列大量更新被列入WindowsInsiderbuild15002,该版本已于1月10日开始推送给Windows10用户。微软的WSL计划仍然是具有较强的暂时性和实验性的,但该公司正在不断往上添加功能,以飞快的步伐改进和扩展WSL。这在一定程度上......
  • Windows 上的 Bash 正在成为微软的 Linux
    微软对WindowsSubsystemfor Linux(WSL)的一系列大量更新被列入WindowsInsiderbuild15002,该版本已于1月10日开始推送给Windows10用户。微软的WSL计划仍然是具有较强的暂时性和实验性的,但该公司正在不断往上添加功能,以飞快的步伐改进和扩展WSL。这在一定程度上......
  • Windows 上的 Bash 正在成为微软的 Linux
    微软对WindowsSubsystemfor Linux(WSL)的一系列大量更新被列入WindowsInsiderbuild15002,该版本已于1月10日开始推送给Windows10用户。微软的WSL计划仍然是具有较强的暂时性和实验性的,但该公司正在不断往上添加功能,以飞快的步伐改进和扩展WSL。这在一定程度上......
  • Linux的操作系统网络模块
    Linux操作系统的网络模块是负责网络通信的核心部分。它通过实现各种协议和算法,使得计算机能够在网络中进行数据交换和通信。网络模块主要包括以下几个方面的功能:(1)IP协议栈:负责处理网络层的数据包,实现IP地址的分配、路由选择等功能。IP协议栈是网络模块中最基本的部分,它负责处理......
  • Linux 系统在线扩容磁盘空间
    @目录一、概述二、开始实战操作演示第一步:添加一块10G的硬盘第二步:查看添加的硬盘第三步:对磁盘进行分区第四步:扩充根分区:将新分区扩展根:/一、概述在Linux系统中,目录的大小是动态的,随着其中的文件和子目录的添加、删除和修改而变化。当目录中的文件和子目录越来越多时,可能需要对......
  • Linux基础命令
    目录一、关机或重启命令二、显示当前所在路径,显示当前路径下的所有内容三、基础命令touch、cat、echo四、基础命令cp、mv、rm五、切换目录六、创建目录结构七、编辑相关命令八、如何建立软连接?一、关机或重启命令'''参数介绍-h(hour小时的意思后面跟具体时间12:30常用-h0......
  • Linux下Mysql数据库的基础操作
    (Linux下Mysql数据库的基础操作)一、Mysql数据介绍Mysql数据库是一种关系型数据库管理系统,具有的优点有体积小、速度快、总体成本低,开源,可移植性(跨平台,在不同系统中使用),可以和开发语结合,属于轻量级数据库。二、数据库相关术语介绍1.数据库相关名词数据库:database表:table......
  • 四月学习之LVS shell脚本配置DR模型
    1、DS脚本配置#!/usr/bin/bashVIP=172.16.1.100RS1=172.16.1.5RS2=172.16.1.6PORT=80SCHEDULER=rrDEV=eth1:1case$1instart)#配置虚拟IP地址VIP cat>/etc/sysconfig/network-scripts/ifcfg-${DEV}<<-EOF TYPE=Ethernet BOOTPROTO=none DEFROUTE=y......
  • Redis 一、(简介,redis-linux下载,启动方式,常用配置,应用场景,数据结构和内部编码,字符类型)
    目录Redis一、Redis1、简介2、RedisLinux下载安装3、redis启动方式3、1.简单启动3、2.动态参数启动3、3.配置文件启动5、常用配置6、redis应用场景7、redis通用命令8、数据结构和内部编码9、redis字符串类型Redis一、Redis1、简介#Redis特性1)速度快10wops(每秒10万......