LVS集群

1.集群的分类

  • 负载均衡:提升效率
  • 高可用:保障关键性业务的可靠性
  • 高性能:科学计算、天气预报

实现负载均衡一般可以使用顺序比重流量服务类别等进行分配,负载均衡的部署方式也分为路由和服务直接返回模式。

实现负载均衡的主要几个方式:

  • 软件实现方式:

    • LVS
    • haproxy
    • nginx
  • 硬件实现方式:F5

负载均衡集群:

  • 四层负载:所谓四层就是基于IP+端口(套接字)的负载均衡,主要代表有lvs。

  • 七层负载也称内容交换,就是基于URL等应用层信息的负载均衡,主要代表有nginx

2.三种模式的工作原理

1、DR模式
在这里插入图片描述
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。

③.RS发现请求报文中的目的MAC是自己,就会将此报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。

保证前端路由器将目标IP为VIP的请求报文发送给调度器,解决方案有三种:

  • 静态绑定
  • arptables
  • 修改RS主机内核参数
    • arp_announce:是否接受并记录别人的通告以及是否通告自己的MAC地址给别人
    • arp_ignore:是否响应arp请求

需要设置lo接口的VIP不能响应本地网络内的arp请求。

2、NAT模式
在这里插入图片描述
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),目标地址为VIP(负载均衡器前端地址)。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。

③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。

④.然后lvs将此报文的源地址修改为本机并发送给客户端。

在NAT模式中,RS和DIP使用私网地址,且RS网关必须指向DIP,否则报文无法送达客户端

3、TUN模式
在这里插入图片描述

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。

③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。

注意:
需要设置lo接口的VIP不能在公网上出现。
RIP、DIP、VIP必须是公网地址
RS的网关不能指向DIP

3.HTTP负载均衡

3.1 LVS-NAT模式

环境准备:

LVS服务器(DR)DIP:192.168.237.167VIP:192.168.237.250
apache服务器(RS1)192.168.237.130网关为DR网关
apache服务器(RS2)192.168.237.170网关为DR网关
//关闭所有主机的防火墙和selinux
[root@DR ~]# systemctl disable --now firewalld.service 
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@DR ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 
[root@DR ~]# reboot

[root@RS1 ~]# systemctl disable --now firewalld.service 
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 
[root@RS1 ~]# reboot

[root@RS2 ~]# systemctl disable --now firewalld.service 
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS2 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 
[root@RS2 ~]# reboot

//配置DR的VIP
[root@DR ~]# ip addr add 192.168.237.250/24 dev ens160
[root@DR ~]# ip a s ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:50:0d:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.237.167/24 brd 192.168.237.255 scope global dynamic noprefixroute ens160
       valid_lft 1491sec preferred_lft 1491sec
    inet 192.168.237.250/24 scope global secondary ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::cef:1b5b:1107:cf5d/64 scope link dadfailed tentative noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::7220:8af:6655:3c80/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

//查看DR网关
[root@DR ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160 
......
IPADDR0=192.168.237.167
IPADDR1=192.168.237.250
NETMASK=255.255.255.0
GATEWAY=192.168.237.2
DNS1=114.114.114.114

//在RS1和RS2上安装httpd
[root@RS1 ~]# yum -y install httpd
[root@RS1 ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@RS1 ~]# echo 'test1' > /var/www/html/index.html

[root@RS2 ~]# yum -y install httpd
[root@RS2 ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@RS2 ~]# echo 'test2' > /var/www/html/index.html

//配置RS1和RS2网关为DIP
[root@RS1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.237.130
GATEWAY=192.168.237.167
NETMASK=255.255.255.0
DNS1=114.114.114.114
[root@RS1 ~]# ip r s
default via 192.168.237.167 dev ens160 proto static metric 100 
192.168.237.0/24 dev ens160 proto kernel scope link src 192.168.237.130 metric 100 

[root@RS2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.237.170
GATEWAY=192.168.237.167
NETMASK=255.255.255.0
DNS1=114.114.114.114
[root@RS2 ~]# ip r s
default via 192.168.237.167 dev ens160 proto static metric 100 
192.168.237.0/24 dev ens160 proto kernel scope link src 192.168.237.170 metric 100 

//在DR上配置转发规则
[root@DR ~]# yum -y install ipvsadm
[root@DR ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1	//添加此行
[root@DR ~]# sysctl -p
net.ipv4.ip_forward = 1

[root@DR ~]# ipvsadm -A -t 192.168.237.250:80 -s rr
[root@DR ~]# 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.237.250:80 rr
[root@DR ~]# ipvsadm -a -t 192.168.237.250:80 -r 192.168.237.130:80 -m
[root@DR ~]# ipvsadm -a -t 192.168.237.250:80 -r 192.168.237.170:80 -m
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@DR ~]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.237.250:80 -s rr
-a -t 192.168.237.250:80 -r 192.168.237.130:80 -m -w 1
-a -t 192.168.237.250:80 -r 192.168.237.170:80 -m -w 1

//验证
[root@DR ~]# curl http://192.168.237.250
test2
[root@DR ~]# curl http://192.168.237.250
test1

3.2 LVS-DR模式

LVS服务器(DR)DIP:192.168.237.167VIP:192.168.237.250
apache服务器(RS1)192.168.237.130VIP:192.168.237.250
apache服务器(RS2)192.168.237.170VIP:192.168.237.250
//配置DR的VIP
[root@DR ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
......
IPADDR0=192.168.237.167
IPADDR1=192.168.237.250
NETMASK=255.255.255.0
GATEWAY=192.168.237.2
DNS1=114.114.114.114

[root@DR ~]# ip a s ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:50:0d:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.237.167/24 brd 192.168.237.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.237.250/24 brd 192.168.237.255 scope global secondary noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::cef:1b5b:1107:cf5d/64 scope link dadfailed tentative noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::7220:8af:6655:3c80/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

//在RS1和RS2上配置arp内核参数
[root@RS1 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@RS1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

[root@RS2 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@RS2 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

//在RS1和RS2上配置VIP
[root@RS1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR0=192.168.237.130
IPADDR1=192.168.237.250
GATEWAY=192.168.237.2
NETMASK=255.255.255.0
DNS1=114.114.114.114
[root@RS1 ~]# ifdown ens160 ;ifup ens160 
成功停用连接 "ens160"(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
[root@RS1 ~]# ip a s ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:e7:f4:f2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.237.130/24 brd 192.168.237.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.237.250/24 brd 192.168.237.255 scope global secondary noprefixroute ens160
       valid_lft forever preferred_lft forever

[root@RS2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR0=192.168.237.170
IPADDR1=192.168.237.250
GATEWAY=192.168.237.2
NETMASK=255.255.255.0
DNS1=114.114.114.114
[root@RS2 ~]# ifdown ens160;ifup ens160 
成功停用连接 "ens160"(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
[root@RS2 ~]# ip a s ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:cd:b3:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.237.170/24 brd 192.168.237.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.237.250/24 brd 192.168.237.255 scope global secondary noprefixroute ens160
       valid_lft forever preferred_lft forever

//在DR上配置转发规则
[root@DR ~]# yum -y install ipvsadm
[root@DR ~]# ipvsadm -A -t 192.168.237.250:80 -s rr
[root@DR ~]# ipvsadm -a -t 192.168.237.250:80 -r 192.168.237.130:80 -m
[root@DR ~]# ipvsadm -a -t 192.168.237.250:80 -r 192.168.237.170:80 -m
[root@DR ~]# ipvsadm -Sn
-A -t 192.168.237.250:80 -s rr
-a -t 192.168.237.250:80 -r 192.168.237.130:80 -m -w 1
-a -t 192.168.237.250:80 -r 192.168.237.170:80 -m -w 1
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值