LVS负载均衡-DR模式
一、简介
1、理论已经在上一篇博客简述,不了解得可以看看 https://www.cnblogs.com/zhangxingeng/p/10497279.html
2、LVS-DR优缺点 #参考博客:https://www.cnblogs.com/zhangxingeng/p/10573695.html
关于这种模式:
1)确保前端路由器将目标ip为vip的请求报文发往director a、在前端网关做静态绑定; b、在RS上使用arptables; c、在RS上修改内核参数以限制arp通告即应答级别; arp_announce arp_ignore 2)、RS的RIP可以使用私网或公网地址; 3)、RS跟director在同一物理网络; 4)、请求报文经由director,响应报文直接发往client; 5)、此模式不支持端口映射; 6)、RS支持大多数的OS; 7)、RIP的网关不能指向DIP,以确保响应报文不经由director;
缺点:LVS调度器及应用服务器在同一个网段中,因此不能实现集群的跨网段应用。
优点:直接路由转发,通过修改请求报文的目标mac地址进行转发,效率提升明显。
3、实验拓扑
LVS相关术语 1. DS:Director Server。指的是前端负载均衡器节点(eg:lvs调度节点)。 2. RS:Real Server。后端真实的工作服务器(eg:web01,web02)。 3. VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址(lvs调度节点 和 web节点都要配置)。 4. DIP:Director Server IP,主要用于和内部主机通讯的IP地址。 5. RIP:Real Server IP,后端服务器的IP地址。 6. CIP:Client IP,访问客户端的IP地址。
实验说明:测试环境为服务器,准备三台即可,这里是4台外加本机物理机
节点 | ip | 应用 | ip2 | 备注 |
director | 10.192.27.100(DIP) | director | VIP:em1:0,10.192.27.115 | |
web01 | 10.192.27.111(RIP) | rs | VIP:Lo:0,10.192.27.115 | |
web02 | 10.192.27.112(RIP) | rs | VIP:Lo:0,10.192.27.115 | |
本网段测试 | 10.192.27.80 | client | curl | |
本地电脑测试 | 公网 | client | web访问 |
二、开始部署
1、网络配置
修改服务器网卡rip、vip、dip都在同一个网段
director一块网卡即可,后续配置添加vip使用别名即可,配置后的结果
[root@director init.d]# ifconfig em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.192.27.100 netmask 255.255.255.128 broadcast 10.192.27.127 #真实IP inet6 fe80::e5e0:cff7:59dd:c73b prefixlen 64 scopeid 0x20<link> ether 18:66:da:fb:2f:54 txqueuelen 1000 (Ethernet) RX packets 80016444 bytes 82807230821 (77.1 GiB) RX errors 0 dropped 1 overruns 0 frame 0 TX packets 70362807 bytes 78200418969 (72.8 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 81 em1:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.192.27.115 netmask 255.255.255.0 broadcast 10.192.27.255 #虚拟VIP ether 18:66:da:fb:2f:54 txqueuelen 1000 (Ethernet) device interrupt 81
rs也是一块网卡,后续vip配置在lo:0上即可但是需要先修改arp_ignore,arp_announce才能添加lo:0 ,配置后的结果
[root@web01 init.d]# ifconfig em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.192.27.111 netmask 255.255.255.128 broadcast 10.192.27.127 inet6 fe80::8c08:2f2:e6bb:2ab7 prefixlen 64 scopeid 0x20<link> ether 18:66:da:fa:e7:b8 txqueuelen 1000 (Ethernet) RX packets 15683 bytes 1735880 (1.6 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1309 bytes 241153 (235.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 10.192.27.115 netmask 255.255.255.255 loop txqueuelen 1000 (Local Loopback)
[root@web02 init.d]# ifconfig em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.192.27.112 netmask 255.255.255.128 broadcast 10.192.27.127 inet6 fe80::57e9:b44b:71ec:7082 prefixlen 64 scopeid 0x20<link> ether 18:66:da:fb:07:88 txqueuelen 1000 (Ethernet) RX packets 24486138 bytes 2167932635 (2.0 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 17143136 bytes 1412413427 (1.3 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 81 lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 10.192.27.115 netmask 255.255.255.255 loop txqueuelen 1000 (Local Loopback)
2、三台服务器关闭防火墙
systemctl stop firewalld systemctl disable firewalld sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
3、安装软件
10.192.27.100上 安装ipvsadm #yum install ipvsadm -y 10.192.27.111、112安装httpd #yum install httpd -y
4、配置web01 web02
注意:arp_ignore 改为1的意义是,响应报文,请求报文从哪个地址进来的,就只能这个接口地址响应
arp_announce 改为2的意义是,通知,不通告不同网段
配置RealServer,两台配置一样,新建文件 /etc/init.d/lvs_rs.sh 并赋予执行权限 #可设置开机自启 [root@web01 init.d]# cat lvs_dr.sh #!/bin/sh VIP=10.192.27.115 . /etc/init.d/functions case "$1" in start) echo "Start LVS of RealServer" /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce ;; stop) /sbin/ifconfig lo:0 down echo "Stop LVS of RealServer" echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce ;; *) echo "Usage:$0{start|stop}" exit 1 ;; esac # /etc/init.d/lvs_rs.sh start
5、配置director
lvs-dr模式不需要开启地址转发,ip_forward功能,因为director发给rs的数据包是修改过的包,不是原包,不经过ip_forward转发,而是经过修改后的mac根据l路由决策直接路由到rip
配置DirectServer,创建文件 /etc/init.d/lvs_vsadm.sh, 并赋予执行权限 [root@director init.d]# cat lvs_vsadm.sh #!/bin/sh VIP=10.192.27.115 RIP1=10.192.27.111 RIP2=10.192.27.112 . /etc/init.d/functions case "$1" in start) echo "start LVS of DirectorServer" #set the Virtual IP Address ifconfig em1:0 $VIP/24 #/sbin/route add -host $VIP dev em1:0 #Clear IPVS table /sbin/ipvsadm -C #set LVS /sbin/ipvsadm -A -t $VIP:80 -s rr /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g #Run LVS /sbin/ipvsadm #end ;; stop) echo "close LVS Directorserver" /sbin/ipvsadm -C ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac [root@localhost init.d]#
启动lvsadm服务:#可设置开机自启 [root@director init.d]# ./lvs_vsadm.sh start start LVS of DirectorServer IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP localhost.localdomain:http rr -> 10.192.27.111:http Route 1 0 0 -> 10.192.27.112:http Route 1 0 0
检查网络信息
查看配置规则 [root@director init.d]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.192.27.115:80 rr -> 10.192.27.111:80 Route 1 0 0 -> 10.192.27.112:80 Route 1 0 0 [root@director init.d]#
由于LVS(IPVS)是工作在内核空间的,因此要在用户空间对其进行配置和管理就要用到ipvsadm,ipvsadm是LVS在用户空间的管理命令。https://www.cnblogs.com/fansik/p/5830927.html 一般在安装linux(CentOS6.5)时该命令是为安装的所以在使用前要先安装该命令:yum -y install ipvsadm ipvs和iptables最好不要同时使用,所以在定义ipvs前最好要先清空iptables的规则,至少要清空filter # iptables -F -t filter # /etc/init.d/iptables save ipvsadm的语法: ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] ipvsadm -D -t|u|f service-address ipvsadm -C ipvsadm -R ipvsadm -S [-n] ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower] ipvsadm -d -t|u|f service-address -r server-address ipvsadm -L|l [options] ipvsadm -Z [-t|u|f service-address] ipvsadm --set tcp tcpfin udp ipvsadm --start-daemon state [--mcast-interface interface] [--syncid syncid] ipvsadm --stop-daemon state ipvsadm -h ipvsadm命令的使用方法: 1、集群服务相关 -A:添加一个集群服务 -t:tcp -u:udp -f:firewall-mark,通常用于将两个或以上的服务绑定为一个服务进行处理是使用,integer类型 service-address: -t:ip:port -u:ip:port -f:firewall-mark -s:调度算法,默认为wlc -p:timout:persistent connection,持久连接 -E:修改定义过的集群服务 -D:-t|-u|-f service-address:删除指定得集群服务 2、RS(Real Server)相关 -a:向指定得CS(Cluster Service)中添加RS(Real Server) -t|-u|-f service-address:指明将RS添加至哪个Cluster Service中 -r:指定RS(Real Server),可包含{IP[:port]},只有支持端口映射的LVS类型才允许此处使用跟集群服务中不同的端口 LVS类型: -g:Gateway,DR(默认使用的类型) -i:ipip,TUN -m:masquerade(地址伪装),NAT 指定RS(Real Server)权重: -w 取值范围0-65535 -e:修改指定的RS属性 -d:-t|-u|-f service-address -r server-address:从指定得集群服务中删除某RS 3、清空所有的集群服务: -C 4、保存规则:(使用输出重定向) ipvsadm-save ipvsadm -S 5、载入指定的规则:(使用输入重定向) ipvsadm-restore ipvsadm -R 6、查看ipvsadm规则 ipvsadm -L [options] -n:数字格式显示IP地址 -c:显示连接数相关信息 --stats:显示统计数据 --rate:速率 --exact:显示统计数据的精确值 7、计数器清零 -Z
6、测试结果
[root@client ~]# curl 10.192.27.115 welcom to web1 [root@client ~]# curl 10.192.27.115 welcom to web2 [root@client ~]# curl 10.192.27.115 welcom to web1 [root@client ~]# curl 10.192.27.115 welcom to web2
#统计信息 [root@director init.d]# ipvsadm -ln --stats IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes -> RemoteAddress:Port TCP 10.192.27.115:80 6 101 0 19177 0 -> 10.192.27.111:80 3 55 0 9473 0 -> 10.192.27.112:80 3 46 0 9704 0
#连接条目
[root@director init.d]# ipvsadm -lnc
IPVS connection entries
pro expire state source virtual destination
TCP 01:54 FIN_WAIT 10.192.33.40:56584 10.192.27.115:80 10.192.27.112:80
TCP 01:54 FIN_WAIT 10.192.33.40:56583 10.192.27.115:80 10.192.27.111:80
[root@localhost init.d]#