LVS实战


文章目录

  • LVS实战
  • 1.LVS介绍
  • 2.LVS四种模式
  • 3.LVS实战DR模式


1.LVS介绍

lvs是4层负载均衡机制的实现,直接通过对fileter的修改实现请求之间的转发,多用在较大型集群环境中,是在内核级别实现的,其具有以下特点:

1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,保证了均衡器IO的性能不会受到大流量的影响;

2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;

3、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived;

4、应用范围比较广,可以对所有应用做负载均衡,不管是http还是ssh协议都可以使用lvs;

5、软件本身不支持正则处理,不能做动静分离,这个就比较遗憾了;其实现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。

6、如果是网站应用比较庞大的话,实施LVS/DR+Keepalived起来就比较复杂了,特别后面有Windows Server应用的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。

7、性能非常卓越,已经在多个公司使用可靠性也非常不错,并且是开源项目,可以修改源代码定制自己的需求

2.LVS四种模式

lvs-nat

lvs-dr

lvs-tun

lvs-fullnat

1. lvs-nat NAT模式:

多目标的DNAT:通过将请求报文的目标地址和目标端口修改为挑选出某RS的RIP和PORT来实现(通过ipvsadm实现);

(1) RIP和DIP应该使用私网地址,RS的网关应该指向DIP;

(2)请求和响应报文都要经由director转发;极高负载的场景中,Director可能会成为系统瓶颈;

(3)支持端口映射;用户请求的端口,可以与RS响应的端口不一样;

(4) VS节点必须为Linux,RS节点可以是任意的OS,因为lvs是linux上专用的;

(5) RS的RIP与Director的DIP必须在同一IP网络;

流程图

lvs DR详细配置 lvs dr模式 缺点_IP


2. lvs-dr:Direct Routing DR模式

lvs默认的类型,功能非常强大

通过修改请求报文的MAC地址进行转发;IP首部不会发生变化(源IP为CIP,目标IP始终为VIP);

(1)确保前端路由器将目标IP为VIP的请求报文一定会发送给Director;

解决方案有多种:

1.arp静态绑定;

2.禁止RS响应VIP的ARP请求;

(a)使用arptables;

(b)修改各RS的内核参数,并把VIP配置在特定的接口上实现禁止其响应;

(2) RS的RIP可以使用私有地址,也可以使用公网地址;

(3) RS跟Director必须在同一物理网络中;

(4)请求报文必须由Director调度,但响应报文必须不能经由Director;

(5)不支持端口映射;

(6)各RS可以使用大多数的OS;

流程图

lvs DR详细配置 lvs dr模式 缺点_linux_02

3. Lvs-tun模式:(ipip隧道)

不修改请求报文的IP首部,而是通过在原有的IP首部(CIP-VIP)之外,再封装一个ip首部(DIP-RIP);

(1)RIP,DIP,VIP全得是公网地址;

(2)RS的网关不能指向DIP;

(3)请求报文必须经由director调度,但响应报文必须不能经由director;

(4)不支持端口映射;

(5)RS的OS必须支持隧道功能;

基本上同dr模式一样,只是在客户端请求的时候在首部添加一个指向RS的IP头部

4. Lvs-fullnat:源地址和目标地址都会改变

director通过同时修改请求报文的上标地址和源地址进行转发;

(1)VIP是公网地址;RIP和DIP是私网地址,二者无须在同一个网络中:

(2)RS接收到的请求报文的源地址为DIP,因此要响应给DIP;

(3)请求报文和响应报文都必须经由Director;

(4)支持端口映射机制;

(5)RS的OS可以是任意OS;

3.LVS实战DR模式

#环境准备:干净的3台机器
lvs-dr: 10.0.0.201(DR)负载均衡器
lvs-rs1: 10.0.0.202(SR)
lvs-rs2: 10.0.0.203(SR)

#关闭防火墙和selinux

DR配置

#lvs-dr: 10.0.0.201(DR)执行
#1.安装ipvsadm
[root@lvs-dr ~]# yum install ipvsadm -y

#2.LVS/DR模式
实验说明:(不能使用云服务器,云都有云负载均衡)
1.网络使用NAT模式
2.DR模式要求Director DIP和所有RealServer RIP必须在同一个网段及广播域
3.所有节点网关均指定真实网关

网络拓扑:
Director:   DIP:10.0.0.201
            VIP:10.0.0.100
            
Real Server: 10.0.0.202   10.0.0.203
Client:测试试音,不做任何配置

#3.LVS/DR模式实施
准备工作(集群中所有主机关闭防火墙和selinux)
做解析:(3台机器都做)
cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.201 lvs-dr
10.0.0.202 lvs-rs1
10.0.0.203 lvs-rs2

#Director分发器配置,配置VIP
#临时设定VIP,设定完不能重启网络服务,重启之后就会失效
[root@lvs-dr ~]# ip a a dev ens33 10.0.0.100/32   #配置VIP,子网掩码设置32位最优ip
[root@lvs-dr ~]# 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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:dd:e1:73 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.201/24 brd 10.0.0.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 10.0.0.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::91cf:93df:680b:3436/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

#4.启动ipvsadm服务
[root@lvs-dr ~]# ipvsadm --save > /etc/sysconfig/ipvsadm   #必须先保存规则,否则启动报错
[root@lvs-dr ~]# systemctl start ipvsadm

#5.定义LVS分发策略
=========================================
-A:添加VIP
-t:用的是tcp协议
-a:添加的是lo的vip地址
-r:转发到realserverip
-s:算法
-L|-l -list:显示内核虚拟服务列表
--numeric,-n:以数字形式输出地址和端口号
-g --gatewaying:指定LVS工作模式为直接路由模式(也是LVS默认的模式)
-S -save:保存虚拟服务器规则到标准输出,输出为-R选项可读的格式
rr:轮询
#如果添加错了,删除命令如下:
# ip adddr del 10.0.0.120 dev ens33
# ipvsadm -C #清除内核服务器中所有虚拟记录
=========================================
#添加虚拟服务器  -s 负载均衡算法
[root@lvs-dr ~]# ipvsadm -A -t 10.0.0.100:80 -s rr

#添加服务器真实记录地址
#-r:指定真实服务器的ip地址
#-g:指定工作模式为LVS-DR
[root@lvs-dr ~]# ipvsadm -a -t 10.0.0.100:80  -r 10.0.0.202 -g
[root@lvs-dr ~]# ipvsadm -a -t 10.0.0.100:80  -r 10.0.0.203 -g

#将规则保存到文件中
[root@lvs-dr ~]# ipvsadm -S >/etc/sysconfig/ipvsadm
============DR部署结束=========================

#6.DR查看的命令
[root@lvs-dr ~]# 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.100:80 rr
  -> 10.0.0.202:80                Route   1      0          0         
  -> 10.0.0.203:80                Route   1      0          0    
  
#显示统计信息
[root@lvs-dr ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  10.0.0.100:80                       0        0        0        0        0
  -> 10.0.0.202:80                       0        0        0        0        0
  -> 10.0.0.203:80                       0        0        0        0        0

#查看速率
[root@lvs-dr ~]# ipvsadm -L -n --rate
IP Virtual Server version 1.2.1 (size=4096)
                                 (每秒)连接数|入包个数|出包个数|入流量(字节)|出流量(字节)
Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS
  -> RemoteAddress:Port
TCP  10.0.0.100:80                       0        0        0        0        0
  -> 10.0.0.202:80                       0        0        0        0        0
  -> 10.0.0.203:80                       0        0        0        0        0

RS配置

#RS配置:在10.0.0.202 lvs-rs1   10.0.0.202 lvs-rs2执行
#安装nginx并启动
[root@lvs-rs1 ~]# yum install nginx -y && systemctl start nginx
#设置站点
[root@lvs-rs1 ~]# echo "lvs-rs1" >/usr/share/nginx/html/index.html

#给RS绑定VIP,绑定在lo网卡
[root@lvs-rs1 ~]# ip a a dev lo 10.0.0.100/32
#忽略ARP广播,ARP静默,保证用户在访问VIP的时候能够访问到DR
[root@lvs-rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  #忽略arp广播,临时的
[root@lvs-rs1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward   #开启路由转发
#echo 2:保证RS能将数据之间返回给我们的客户端
[root@lvs-rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包

[root@lvs-rs2 ~]# ip a a dev lo 10.0.0.100/32
[root@lvs-rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@lvs-rs2 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@lvs-rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

客户端测试

curl http://10.0.0.100    #访问的是VIP

lvs DR详细配置 lvs dr模式 缺点_运维_03