Linux九阴真经之大伏魔拳残卷3(LVS)

如果一台服务器承受过多压力,那么服务器可能会崩溃,所以,我们应该让一台服务器承受的压力在合理范围内,但如果服务器必须承受较大的压力,那么一台服务器可能我发满足我们的要求,所以我们可以使用多台服务器分摊这些压力,当一定数量的服务器作为一个整体对外提供服务,并且分摊压力时, 我们可以称这些服务器为“负载均衡集群

LVS介绍

LVS:Linux Virtual Server,负载调度器,集成内核 章文嵩 阿里

VS: Virtual Server,负责调度


RS: Real Server,负责真正提供服务


L4:四层路由器或交换机


工作原理:VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS


iptables/netfilter:


iptables:用户空间的管理工具
netfilter:内核空间上的框架
流入:PREROUTING --> INPUT
流出:OUTPUT --> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
DNAT:目标地址转换; PREROUTING

扫描二维码关注公众号,回复: 1839627 查看本文章

LVS概念

lvs集群类型中的术语

VS : 调度器

RS:后端服务器(要访问的服务器)

CIP: 客户端IP

DIR: vs 内网的IP

VIP:VS外网的IP(公网IP)

RIP:后端服务器IP

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

lvs集群的类型

lvs-nat:修改请求报文的目标IP,多目标IP的DNAT


lvs-dr:操纵封装新的MAC地址


lvs-tun:在原请求IP报文之外新加一个IP首部


lvs-fullnat:修改请求报文的源和目标IP

NAT模式

本质是多个目标IP的DNAT, 通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发

(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统

 如上图所示,客户端的请求发往LVS服务器,此时客户端请求报文的源IP为CIP,目标IP是LVS的VIP,当LVS收到客户端的请求报文时,会将请求报文里的目标IP修改为后端的某个RIP,RIP1或者RIP2。这时请求报文的源IP是CIP,目标IP变成了RIP,那么报文自然会被LVS转发到对应的RealServer 中,当RealServer收到对应的请求报文时,会发现目标IP就是自己的RIP,于是就会接收报文处理并响应,响应时报文的源 IP 为RIP,目标IP为 CIP,但是CIP和RealServer 不在一个网络内,因为CIP是一个公网IP,所以我们要将所有RealServer的网关指向DIP,当RealServer产生响应报文时,会将响应报文发往网关DIP,而DIP是LVS的内网IP,当LVS收到对应的响应报文时,响应报文的源IP为RIP,目标IP为CIP,此时LVS会将形影报文的源IP修改为VIP,再将响应报文发往客户端,客户端则会收到响应报文;其实上述整个过程是一个DNAT的过程,所以此种LVS模型被称之为LVS-NAT模型。

LVS-DR模式

LVS-DR: 直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

(1) Director和各RS都配置有VIP


(2) 确保前端路由器将目标IP为VIP的请求报文发往Director


在前端网关做静态绑定VIP和Director的MAC地址

在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP


在RS上修改内核参数以限制arp通告及应答级别
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce

(3)RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director


(4)RS和Director要在同一个物理网络


(5)请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client

(6)不支持端口映射(端口不能修败)


(7)RS可使用大多数OS系统

当客户端向服务器发起请求报文,报文里源是 客户端的CIP ,随机端口 和 客户端的CMAC,目标是VIP的80端口和路由器的MAC地址MAC1; 接着路由器就把报文转发到内部去,转发时,源 客户端的CIP不变,端口不变,MAC地址变成MAC2;目标还是VIP 80端口,但是MAC地址变成了LVS的mac地址  MAClvs;到达LVS服务器后,LVS服务器需要将请求调度到 RS服务器上去,此时源的CIP和端口不变,而mac地址变成LVS服务器的MAClvs ,目标还是 VIP的 80端口,而mac地址变成了 RS1服务器的 MACrs1,到这里我们可能觉得奇怪,lLVS服务器怎么知道RS服务器的mac地址的? 其实他是通过ARP广播找到的,既然是广播,那么连接他们的就一定是交换机了。此时我们遇到一个重大的问题,到达RS1的报文里,mac地址确实是自己的,但是 VIP 并不是自己的IP地址啊,所以需要在RS服务器上都配上vip的地址,为了使VIP地址不冲突,我们可以关闭 IP地址的广播和应答功能,这样就算是IP地址相同,也不会产生冲突了!好了 现在开始回应了,回应时 源变成了VIP  80端口 mac地址是 MACrs1    而目标变成了 客户端的CIP  随机端口  mac地址变成了 路由器的mac地址 MAC2.我们发现 回来的时候已经不经过LVS服务器了;接着就要从路由器转给客户端了,此时 源还是 VIP  80端口  mac地址是路由器的MAC1 ,而目标是 客户端的CIP  随机端口  和客户端的mac地址 CMAC 。这个就是DR模式的具体步骤。

LVS-DR模型调度实现

实验架构

准备工作

一、添加各主机的路由,使其能够互相通讯

clite

添加相邻路由器的IP地址 

[root@localhost ~]# route add default gw 192.168.11.11

LVS服务器

[root@localhost ~]# route add default gw 192.168.12.10

RS1服务器

[root@localhost ~]# route add default gw 192.168.12.10

RS2服务器

[root@localhost ~]# route add default gw 192.168.12.10

路由器

2个网卡,分别配置2个地址段的IP  ,然后开启路由转发功能

[root@localhost ~]# ip a
ens33:
<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 192.168.11.11/24 brd 192.168.11.255 scope global ens33
ens37:
<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 192.168.12.10/24 brd 192.168.12.255 scope global ens37

将/etc/sysctl.conf文件中的net.ipv4.ip_forward 值改为 1,后执行sysctl -p

[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1

2、部署HTTPserver

在RS1 和 RS2服务器上部署http 

[root@localhost network-scripts]# yum install httpd
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# echo "RS1 laobai"> /var/www/html/index.html
[root@localhost network-scripts]# yum install httpd
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# echo "RS2 laobai"> /var/www/html/index.html

我们来测试一下 从客户端能否访问http服务器

[root@localhost ~]# curl 192.168.12.12
RS1 laobai

成功

3、对RS服务器 设置 arp抑制规则,不让IP主动发广播也不应答别人,从而达到一个IP在多台主机上使用

RS1

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

RS2

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

4、LVS  RS1 RS2 添加VIP

[root@localhost ~]# ip addr add 192.168.12.100 dev lo

5、配置LVS 集群规则

[root@localhost ~]# yum install ipvsadm -y

添加lvs集群 ,设置调度模式为 rr 轮循模式

[root@localhost ~]# ipvsadm -A -t 192.168.12.100:80 -s rr

将后端两台RS 服务器加入 集群,设置工作模式为集群

[root@localhost ~]# ipvsadm -a -t 192.168.12.100:80 -r 192.168.12.12 -g
[root@localhost ~]# ipvsadm -a -t 192.168.12.100:80 -r 192.168.12.13 -g

工作模式

       -g: gateway, dr模式,默认

      -i: ipip, tun模式

     -m: masquerade, nat模式

     -w weight:权重

查看 ipvsadm 规则信息

6、Client 测试

成功

LVS 高可用 的实现

当后台有某一个服务器宕机时,LVS将不在将客户端的访问数据包发向宕机的主机了。

ldirectord

ldirectord:监控和控制LVS守护进程,可管理LVS规则 

包名:ldirectord-3.9.6-0rc1.1.1.x86_64.rpm

/etc/ha.d/ldirectord.cf 主配置文件

/usr/share/doc/ldirectord-3.9.6/ldirectord.cf 配置模版

/usr/lib/systemd/system/ldirectord.service 服务

/usr/sbin/ldirectord 主程序

/var/log/ldirectord.log 日志

/var/run/ldirectord.ldirectord.pid pid文件

安装包:实现LVS的高可用(在上述实验的基础上添加此服务可实现高可用性)

yum install ldirectord-3.9.6-0rc1.1.1.x86_64.rpm   (安装包)

cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/(将配置文件复制一份出来)

vim /etc/ha.d/ldirectord.cf  (修改配置文件)(需要将以前在ipvsadm里的规则都清空:ipvsadm -C)

 

修改过后的配置文件如下

systemctl start ldirectord.service  (启动此服务)

查看ipvsadm -Ln  发现已经自动生成定义的规则了。

在LVS服务器主机上安装http服务然后将主页面定义为sorry server

当所有后台主机都宕机是客户端在访问就会显示出sorry server的提示字样

echo “sorry server” > /var/www/html/index.html

此时如果将后台的两台http服务器都停止服务:systemctl stop httpd

就会显是LVS服务器本机提供的http服务提供sorry server

猜你喜欢

转载自www.cnblogs.com/huxiaojun/p/9256082.html