搭建LVS负载均衡测试环境

实现负载均衡有很多种方式,土豪直接F5,性能最好,价格最贵

没钱也可以使用Apache,Nginx 工作在网络的第四层,虽然性能一般,但是很灵活,比如可以将80端口映射到真实服务器的8080端口.

   
还有一种选择LVS ,它工作在网络的第三层,性能较好,非常稳定.但是它不能实现端口的重新映射.因为在网络的第三层,并不清楚端口的信息。

下面的实验搭建了一个LVS负载均衡测试环境,采用DR的方式。

Linux服务器LB群集之LVS-NAT

Linux下群集服务之LB集群-LVS-NAT模式

LVS-NAT+ipvsadm实现RHEL 5.7上的服务集群

Linux虚拟服务器LVS-NAT 和 LVS-DR 模型的实现

客户端访问LVS前置机
这个请求如下
源MAC(client mac) 目标MAC(DR mac) 源IP(client IP) 目标IP(DR IP,VIP)

LVS前置机会将报文改写之后转发真实的服务器
改写如下
源MAC(client mac) 目标MAX(真实服务器MAC) 源IP(client IP) 目标IP(DR IP,VIP)

因为真实的服务器将VIP绑定到了环回地址,所以会处理这个请求,并返回响应的报文.
网络层的源目对掉
源MAC(真实服务器MAC) 目标MAC(client mac) 源IP(DR IP,VIP) 目标IP(client IP)

所以LVS DR的本质就是网络层的欺骗。

实验采用VirtualBox虚拟机,并且配置内部网络,关闭SELinux和防火墙


首先,在LVS DR前置机上安装ipvsadm命令
yum install ipvsadm -y

然后配置两台真实服务器(RealServer)的Http服务
yum install httpd -y
service httpd start
chkconfig httpd on
并分别改写/var/www/html/index.html的内容为"real server 1"和"real server 2"

然后在两台真实服务器上执行如下的脚本
vim lvs_real.sh

#!/bin/bash 
 # description: Config realserver lo and apply noarp 

SNS_VIP=192.168.16.199
 source /etc/rc.d/init.d/functions
 case "$1" in

start)
        ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
        /sbin/route add -host $SNS_VIP dev lo:0
        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
        sysctl -p >/dev/null 2>&1
        echo "RealServer Start OK" 
        ;;

stop)
        ifconfig lo:0 down
        route del $SNS_VIP >/dev/null 2>&1
        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 "RealServer Stoped" 
        ;;

*)

echo "Usage: $0 {start|stop}" 
        exit 1
 esac
 exit 0


最后,在DR前置机上执行如下脚本
vim lvs_dr.sh

#!/bin/bash
 VIP1=192.168.16.199
 RIP1=192.168.16.3
 RIP2=192.168.16.4

case "$1" in
 start)
        echo " start LVS of DirectorServer"
        /sbin/ifconfig eth1:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 broadcast $VIP1 up
        /sbin/route add -host $VIP1 dev eth1:0
        echo "1" >/proc/sys/net/ipv4/ip_forward

/sbin/ipvsadm -C
        /sbin/ipvsadm -A -t $VIP1:80 -s rr
        /sbin/ipvsadm -a -t $VIP1:80 -r $RIP1:80 -g -w 1
        /sbin/ipvsadm -a -t $VIP1:80 -r $RIP2:80 -g -w 1
        /sbin/ipvsadm
        ;;
 stop)
        echo "close LVS Directorserver"
        echo "0" >/proc/sys/net/ipv4/ip_forward
        /sbin/ipvsadm -C
        /sbin/ifconfig eth1:0 down
        ;;
 *)
        echo "Usage: $0 {start|stop}"
        exit 1
 esac

通过client访问LVS前置服务器,可以看到已经实现了负载均衡的效果。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b009eb00225a6eeda0a81176eed1648a.html