Lvs负载均衡实现

NAT模式

NAT模式的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址配置在调度器上,服务器组可以用私有的IP地址。缺点是它的伸缩能力有限, 当服务器结点数目上升到20时,调度器本身有可能成为系统的新瓶颈,因为在NAT模式中请求和响应报文都需要通过负载均衡调度器。

访问流程:客户端 -> 调度器 -> 后端服务器 ->调度器 -> 客户端

单网卡NAT模式实现负载均衡配置:

环境搭建
平台: Linux RedHat6.5
server2:172.25.7.2  #安装ipvsadm,作为负载均衡调度器
server3:172.25.7.3  #安装httpd,作为后端服务器
server4:172.25.7.4  #安装httpd,作为后端服务器
虚拟ip(VIP):172.25.254.100

1.调度器server2端配置:安装ipvsadm
用配置好的yum源下载即可:yum install ipvsadm -y
yum源配置:

[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.7.250/rhel6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[HighAvailability]
name=Red Hat Enterprise Linux HighAvailability
baseurl=http://172.25.7.250/rhel6.5/HighAvailability
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[LoadBalancer]
name=Red Hat Enterprise Linux LoadBalancer
baseurl=http://172.25.7.250/rhel6.5/LoadBalancer
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[ResilientStorage]
name=Red Hat Enterprise Linux ResilientStorage
baseurl=http://172.25.7.250/rhel6.5/ResilientStorage
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[ScalableFileSystem]
name=Red Hat Enterprise Linux ScalableFileSystem
baseurl=http://172.25.7.250/rhel6.5/ScalableFileSystem
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

2.下载安装好ipvsadm后,在作为调度器的server2主机上设置ipvsadm策略:

ifconfig eth0:0 172.25.254.100 netmask 255.255.255.0 up 
# 绑定vip
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 172.25.7.3:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 172.25.7.4:80 -m
service ipvsadm save    #保存策略

策略中参数代表的意思:

-A #在内核的虚拟服务器表中添加一条新的虚拟服务器记录
-a #在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录
-s #指定使用的调度算法,这里是‘rr’,为轮询
-r #指定真实的服务器以及服务
-m #指定 LVS 的工作模式为NAT模式

查看策略:

[root@server2 ~]# ipvsadm -ln  
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr
  -> 172.25.7.3:80                Masq    1      0          0         
  -> 172.25.7.4:80                Masq    1      0          0         

打开内核路由功能:默认是0为关闭状态

echo 1 > /proc/sys/net/ipv4/ip_forward #临时更改,重启后失效

想要永久更改可写到/etc/sysctl.conf文件中:
net.ipv4.ip_forward = 1

加载 nat 模块:如果不加载此模块,也可以在第一次访问时成功,但是会在再次访问时出现延迟过长,或访问超时现象

modprobe iptable_nat

关闭防火墙:

iptabes -F
/etc/init.d/iptables stop

2.后端服务器配置
server3

yum install httpd -y    #安装httpd

新建并编辑默认发布文件:index.html

echo "server3-hk" > /var/www/html/index.html

启动httpd:/etc/init.d/httpd start
设置网关,将网关指向server2的同网段ip:vim /etc/sysconfig/network

GATEWAY=172.25.7.2

重启网络:/etc/init.d/network restart
关闭防火墙:

iptabes -F
/etc/init.d/iptables stop

server4配置:

yum install httpd -y    #安装httpd

新建并编辑默认发布文件:index.html

echo "server4-hk" > /var/www/html/index.html

启动httpd:/etc/init.d/httpd start
配置网关,指向server2的同网段ip:vim /etc/sysconfig/network

GATEWAY=172.25.7.2

重启网络,让配置生效:/etc/init.d/network restart
关闭防火墙:

iptabes -F
/etc/init.d/iptables stop

测试
在客户端访问虚拟ip,直接在客户端终端进行测试即可:使用for循环语句,可以更加清楚的看到负载均衡效果:

[root@hguan07 ~]# for i in {1..6}; do curl 172.25.254.100; done
server3-hk
server4-hk
server3-hk
server4-hk
server3-hk
server4-hk

调度器端ipvsadm查看负载均衡效果:

[root@server2 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr
  -> 172.25.7.3:80                Masq    1      0          3         
  -> 172.25.7.4:80                Masq    1      0          3         

TUN模式

TUN模式对服务器有要求,即所有的服务器必须支持 “ IP Tunneling” 或者 “ IP Encapsulation”协议。目前,TUN模式 的后端服务器主要运行 Linux 操作系统。
在 TUN模式中,负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就可以处理大量的请求,它甚至可以调 度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即使负载调度器只有 100Mbps的全双工网卡,整个系统的最大吞吐量可超过 1Gbps。所以,VS/TUN 可以极大地增加负载调度器调度的服务器数量。VS/TUN 调度器可以调度上百台服务器,而它本身不会成为系统的瓶颈,可以用来构建高性能的超级服务器。

访问流程:客户端 -> 调度器 -> 后端服务器 -> 客户端

环境搭建
平台: Linux RedHat6.5
server2:172.25.7.2  #安装ipvsadm
server3:172.25.7.3  #安装httpd
server4:172.25.7.4  #安装httpd
虚拟ip(VIP):172.25.7.100

调度器端server2配置:

ipvsadm -C  #清除之前的策略
ipvsadm -A -t 172.25.7.100:80 -s rr
ipvsadm -a -t 172.25.7.100:80 -r 172.25.7.3:80 -i
ipvsadm -a -t 172.25.7.100:80 -r 172.25.7.4:80 -i
-i  #表示tun模式即ip隧道模式
service ipvsadm save    #保存策略

绑定VIP:

ifconfig eth0:0 172.25.7.100 netmask 255.255.255.0 up 

查看ipvsadm状态:

[root@server2 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.7.100:80 rr
  -> 172.25.7.3:80                Tunnel  1      0          0         
  -> 172.25.7.4:80                Tunnel  1      0          0         

打开内核路由功能:

echo 1 > /proc/sys/net/ipv4/ip_forward

关闭防火墙:

iptables -F
/etc/init.d/iptables stop

后端服务器配置
server3
绑定tun模式虚拟ip:

ifconfig tunl0 172.25.7.100 netmask 255.255.255.255 up
route add -host 172.25.7.100 dev tunl0

网关指向调度器ip:vim /etc/sysconfig/network

GATEWAY=172.25.7.2

重启网络,让网关设置生效:/etc/init.d/network restart
设置tun模式权限:

echo 0 > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

编辑httpd默认发布文件内容如下:vim /var/www/html/index.html

<h1>server3-httph1>

启动httpd:/etc/init.d/httpd start
关闭防火墙:

iptables -F
/etc/init.d/iptables stop

server4配置:
绑定tun模式虚拟ip:

ifconfig tunl0 172.25.7.100 netmask 255.255.255.255 up
route add -host 172.25.7.100 dev tunl0

设置网关,指向调度器ip:vim /etc/sysconfig/network

GATEWAY=172.25.7.2

重启网络,让网关生效:/etc/init.d/network restart
设置tun模式权限:

echo 0 > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

编辑httpd默认发布文件内容如下:vim /var/www/html/index.html

<h1>server4-httph1>

启动httpd:/etc/init.d/httpd start
关闭防火墙:

iptables -F
/etc/init.d/iptables stop

测试
在客户端访问虚拟ip,这里在客户端终端进行访问,用for循环可以更加清楚的看到负载均衡效果:

[root@hguan07 ~]# for i in {1..6}; do curl 172.25.7.100; done
<h1>server4-httph1>
<h1>server3-httph1>
<h1>server4-httph1>
<h1>server3-httph1>
<h1>server4-httph1>
<h1>server3-httph1>

调度器端ipvsadm查看负载均衡效果:

[root@server2 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.7.100:80 rr
  -> 172.25.7.3:80                Tunnel  1      0          15        
  -> 172.25.7.4:80                Tunnel  1      0          15        

DR模式

跟TUN模式相同,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量。跟 TUN模式相比,这种方法没有 IP 隧道的开销,但调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的 HUB 相连。VIP 地址为调度器和服务器组共享,调度器配置的 VIP 地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把 VIP 地址配置在各自的 Non-ARP 网络设备上,它对外面是不可见的,只是用于处 理目标地址为VIP 的网络请求

访问流程:客户端 -> 调度器 -> 后端服务器 -> 客户端

环境搭建
平台: Linux RedHat6.5
server2:172.25.7.2  #安装ipvsadm
server3:172.25.7.3  #安装httpd
server4:172.25.7.4  #安装httpd
虚拟ip(VIP):172.25.7.200

调度器端server2配置:

ipvsadm -C  #清除之前的策略
ipvsadm -A -t 172.25.7.200:80 -s rr
ipvsadm -a -t 172.25.7.200:80 -r 172.25.7.3:80 -g
ipvsadm -a -t 172.25.7.200:80 -r 172.25.7.4:80 -g
-g  #表示DR模式
service ipvsadm save    #保存策略

绑定VIP:

ifconfig eth0:0 172.25.7.200 netmask 255.255.255.0 up

关闭防火墙:

iptables -F
/etc/init.d/iptables stop

后端服务器配置
server3
绑定虚拟ip:

ifconfig lo:0 172.25.7.200 netmask 255.255.255.255 up
route add -host 172.25.7.200 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

重新编辑httpd默认发布文件内容如下:vim /var/www/html/index.html

<h1>server3-HKh1>

启动httpd:/etc/init.d/httpd start
关闭防火墙:

iptables -F
/etc/init.d/iptables stop

server4配置:
绑定虚拟ip:

ifconfig lo:0 172.25.7.200 netmask 255.255.255.255 up
route add -host 172.25.7.200 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

重新编辑httpd默认发布文件内容如下:vim /var/www/html/index.html

<h1>server4-HKh1>

启动httpd:/etc/init.d/httpd start
关闭防火墙:

iptables -F
/etc/init.d/iptables stop

测试
客户端在终端访问虚拟ip,同样,使用for循环语句:

[root@hguan07 ~]# for i in {1..6}; do curl 172.25.7.200; done
<h1>server4-HKh1>
<h1>server3-HKh1>
<h1>server4-HKh1>
<h1>server3-HKh1>
<h1>server4-HKh1>
<h1>server3-HKh1>

调度器端ipvsadm查看负载均衡效果:

[root@server2 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.7.200:80 rr
  -> 172.25.7.3:80                Route   1      0          121       
  -> 172.25.7.4:80                Route   1      0          122       

总结:这三种模式中,DR模式速度最快,效率最高,也节省了TUN模式的ip隧道开销,和TUN模式一样,调度器可以承受较大的负载压力;NAT模式效率最低,因为请求数据来回都要经过调度器,时间相对较长,当访问量过大,调度器就成为新的压力瓶颈,唯一的优点就是可以在任何支持TCP/IP协议的操作系统上实现负载均衡;TUN模式即ip隧道模式,也很高效,但是对环境的要求较高,需要服务器支持ip隧道协议。

你可能感兴趣的:(Lvs负载均衡实现)