###
实现LVS负载均衡转发方式有三种,分别为NAT、DR、TUN模式,LVS均衡算法包括:RR(round-robin)、LC(least_connection)、W(weight)RR、WLC模式等(RR为轮询模式,LC为最少连接模式)。
LVS NAT原理:用户请求LVS VIP到达director(LVS服务器:LB),director将请求的报文的目标IP地址改成后端的realserver IP地址,同时将报文的目标端口也改成后端选定的realserver相应端口,最后将报文发送到realserver,realserver将数据返给LVS,director再把数据发送给用户。(两次请求都经过director,所以访问大的话,director会成为瓶颈)
LVS NAT模式实施必备条件
1)LVS服务器至少配置2块网卡,一个外网卡,一个内网卡;
2)LVS后端RS服务器的网关设置为LVS的内网卡IP地址;
在LVS服务器上开启路由转发功能ip_forward。
###
###
LVS TUN原理:用户请求LVS到达director,director通过IP-TUN加密技术将请求的报文的目标MAC地址改成后端的realserver MAC地址,目标IP为VIP(不变),源IP为用户IP地址(保持不变),然后Director将报文发送到realserver,realserver基于IP-TUN解密,然后检测到目标为自己本地VIP,如果在同一个网段,然后将请求直接返给用户。如果用户跟realserver不在一个网段,则通过网关返回用户。
###
###
#一般使用DR模式
LVS DR原理:用户请求LVSVIP到达director(LB均衡器),LVS将请求的报文的目标MAC地址改成后端的realserver MAC地址,目标IP为VIP(不变),源IP为用户IP地址(保持不变),然后Director将报文发送到realserver,realserver检测到目标IP是自己(VIP地址配置在RS机器上),如果在同一个网段,然后将请求直接返给用户。如果用户跟realserver不在一个网段,则通过网关返回用户
LVS DR模式实施必备条件
1)LVS服务器和后端RS机器必须在同一个物理网段;
2)LVS和后端RS机器均要配置同一个VIP地址,不能冲突;
3)抑制后端RS机器上VIP地址的ARP广播响应;
不能抑制后端RS机器上真实IP地址的ARP广播响应。
#大白话理解如下:
客户端首先访问到LVS这一层,然后到达LVS这一层之后,LVS会把客户端的mac修改同后端RS机器一样的mac,客户端的ip和LVS保持不变,然后LVS再拿着这个修改成与后端RS机器一样的mac,去找后端的RS机器,后端的RS机器一看,LVS拿的这个mac和自己的mac一样,然后就开始处理请求,最后RS机器处理玩请求之后,如果用户和RS机器在同一个网段,那么直接返回请求给用户,如果跟RS机器不在同一个网段,那么就通过网关返回给用户,也就是局域网路由器,所以数据进来会经过LVS,但是出去就不经过LVS了
注:LVS DR模式有一个硬性要求,LVS机器必须跟后端的RS机器在同一个物理网段,简单理解就是说要使用同一台交换机,因为它要解析到mac地址
#注意:
VIP既配置在LVS机器,又要配置在RS后端机器如何防止冲突:
1)后端机器VIP地址必须配置在lo网卡上(lo本地回环网卡是用来检测本地通信的,一般不对外),不能配置在真实网卡上,否则会产生冲突
2)当请求到达内网,它会发一个广播查找谁是VIP,但是用户请求只能去找LVS上面的VIP,如果直接跳过LVS去找RS机器的VIP,那么就不叫作负载均衡了,所以要抑制后端RS机器VIP地址响应ARP广播,同时又不能抑制后端RS机器的真实IP的ARP广播,因为LVS会将请求的报文MAC地址修改成后端RS的mac,所以如果把后端RS机器真实网卡的ARP广播抑制之后,那么即使LVS机器和后端RS机器在一个网段,那也解析不了RS的mac地址
#VIP的可以抑制,但是真实网卡的不能抑制,因为LVS必须要找到真实机器的mac
###
###
#LVS DR模式实施:
#硬性要求
#LVS服务器必须和后端RS机器在同一个网段
#LVS服务器和后端RS机器都要配置同一个VIP地址,不能冲突
#必须抑制后端RS机器上的VIP地址的ARP广播响应
#不能抑制后端RS机器上的真实ip地址的ARP广播响应
###
#准备四台机器,一台客户端,一台LVS,两台后端RS机器
###
#LVS机器
#LVS负载均衡技术实现是基于Linux内核模块IP_VS
#安装ipvsadm管理工具
[root@yang-6 ~]# yum install -y ipvsadm
[root@yang-6 ~]# rpm -qa |grep -aiE ipvsadm
ipvsadm-1.27-8.el7.x86_64
#加载模块
[root@yang-6 ~]# lsmod |grep -aiE ip_vs
[root@yang-6 ~]# modprobe ip_vs
[root@yang-6 ~]# lsmod |grep -aiE ip_vs
[root@yang-6 ~]# lsmod |grep -aiE ip_vs
ip_vs 145497 0
nf_conntrack 133095 6 ip_vs,nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4
libcrc32c 12644 4 xfs,ip_vs,nf_nat,nf_conntrack
[root@yang-6 ~]#
#添加LVS机器上的VIP
[root@yang-6 ~]# ipvsadm -A -t 192.168.254.99:80 -s rr
#查看虚拟服务器VIP
[root@yang-6 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.254.99:80 rr
[root@yang-6 ~]#
#在VIP旗下添加后端RS机器真实IP地址,增加两个后端
[root@yang-6 ~]# ipvsadm -a -t 192.168.254.99:80 -r 192.168.254.207 -g -w 100
[root@yang-6 ~]# ipvsadm -a -t 192.168.254.99:80 -r 192.168.254.208 -g -w 100
#查看LVS负载均衡集群
[root@yang-6 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.254.99:80 rr
-> 192.168.254.207:80 Route 100 0 0
-> 192.168.254.208:80 Route 100 0 0
###
#给VIP机器配置VIP地址
#给lo网卡配置VIP
[root@yang-6 network-scripts]# cd /etc/sysconfig/network-scripts/
[root@yang-6 network-scripts]#
[root@yang-6 network-scripts]# cp ifcfg-lo ifcfg-lo:1
[root@yang-6 network-scripts]# vim ifcfg-lo:1
DEVICE=lo:1
#LVS机器定义的VIP地址
IPADDR=192.168.254.99
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
#启动lo:1网卡
#查看是否存在VIP地址
[root@yang-6 network-scripts]# ifup lo:1
[root@yang-6 network-scripts]#
[root@yang-6 network-scripts]# ifconfig
###
#RS后端机器1
#给lo网卡配置VIP
[root@yang-5 network-scripts]# cd /etc/sysconfig/network-scripts/
[root@yang-5 network-scripts]#
[root@yang-5 network-scripts]# cp ifcfg-lo ifcfg-lo:1
[root@yang-5 network-scripts]# vim ifcfg-lo:1
DEVICE=lo:1
#LVS机器定义的VIP地址
IPADDR=192.168.254.99
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
#启动lo:1网卡
#查看是否存在VIP地址
[root@yang-5 network-scripts]# ifup lo:1
[root@yang-5 network-scripts]#
[root@yang-5 network-scripts]# ifconfig
#抑制VIP地址的ARP广播响应
[root@yang-5 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@yang-5 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@yang-5 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@yang-5 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
###
#RS后端机器2
#给lo网卡配置VIP
[root@yang-8 network-scripts]# cd /etc/sysconfig/network-scripts/
[root@yang-8 network-scripts]#
[root@yang-8 network-scripts]# cp ifcfg-lo ifcfg-lo:1
[root@yang-8 network-scripts]# vim ifcfg-lo:1
DEVICE=lo:1
#LVS机器定义的VIP地址
IPADDR=192.168.254.99
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
#启动lo:1网卡
#查看是否存在VIP地址
[root@yang-8 network-scripts]# ifup lo:1
[root@yang-8 network-scripts]#
[root@yang-8 network-scripts]# ifconfig
#抑制VIP地址的ARP广播响应
[root@yang-5 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@yang-5 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@yang-5 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@yang-5 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
###
#客户端机器
#测试,直接访问VIP地址,每次返回不同页面,表示LVS负载均衡配置成功
[root@yang-7 ~]# curl http://192.168.254.99
###
##############
###
#LVS机器
#LVS 机器中可以配置很多组
#增加新的组,增加新的VIP即可
[root@yang-6 ~]# ipvsadm -A -t 192.168.254.98:80 -s rr
[root@yang-6 ~]# ipvsadm -a -t 192.168.254.98:80 -r 192.168.254.200 -g -w 100
[root@yang-6 ~]# ipvsadm -a -t 192.168.254.98:80 -r 192.168.254.201 -g -w 100
[root@yang-6 ~]# ipvsadm -a -t 192.168.254.98:80 -r 192.168.254.202 -g -w 100
[root@yang-6 ~]#
[root@yang-6 ~]# ipvsadm -L -n
#保存LVS规则
[root@yang-6 ~]# ipvsadm-save -n lvs_config.txt
#删除集群组
[root@yang-6 ~]# ipvsadm -D -t 192.168.254.98:80
###
###
#整合LVS+Keepalived
#安装keepalived
[root@yang-6 ~]# yum install -y keepalived
#编辑配置文件
#[root@yang-6 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
#VIP1
vrrp_instance VI_1 {
state MASTER
interface ens32
virtual_router_id 51
priority 100
advert_int 5
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.254.99
}
}
virtual_server 192.168.254.99 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.254.205 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.254.208 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
#重启keepalived服务
[root@yang-6 ~]# systemctl restart keepalived.service
#查看LVS集群状态,已经自动进行配置
[root@yang-6 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.254.99:80 wrr persistent 60
-> 192.168.254.205:80 Route 100 0 0
-> 192.168.254.208:80 Route 100 0 0
[root@yang-6 ~]#
#同样后端机器需要在lo网卡配置VIP,LVS机器会自动绑定VIP
#同样后端机器需要做VIP抑制
#在LVS服务区器上查看负载均衡集群
[root@yang-6 ~]# ipvsadm -L -n
#测试宕掉后端一台服务,查看集群机器状态会自定踢掉失活的机器,把服务起来,再次到LVS服务器查看集群状态,机器重新加到集群当中
###