LVS负载均衡群集——NAT模式

    在各类互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求愈来愈高,单台服务器难以承担全部的访问。除了使用价格昂贵的大型机、专用负载分流设备之外,企业还有另一种选择来解决难题,那就是构建群集服务器——经过整合多台相对廉价的普通服务器,以同一个地址对外提供相对的服务。本篇博客将介绍企业中经常使用的一种群集技术——LVS(Linux Virtual Server,Linux虚拟服务器)html



群集的类型web

    不管是哪一种集群,都至少包括两台节点服务器,而对外表现为一个总体,只提供一个入口访问(域名或IP),至关于一台大型计算机。根据所针对的目标差别,可分为如下三类:    算法

(1)负载均衡群集:提升应用系统的响应能力,尽量处理更多的访问请求、减小延迟,得到高并发、高负载(LB)的总体性能,未来自客户机的访问请求分流给多台服务器,从而缓解整个系统的负载压力数据库

(2)高可用群集:提升应用系统的可靠性、减小中断时间、保证服务连续性,达到高可用(HA)的容错的效果,故障切换、双机热备、多机热备等都属于高可用群集技术vim

(3)高性能运算群集:提升应用系统的CPU运算速度、扩展硬件资源和分析能力,得到至关于大型、超级计算机的高性能运算(HPC)能力,就是将多台服务器的硬件整合到一块儿,实现高性能运算能力。安全


负载均衡的分层结构bash

杨书凡00.png

第一层:负载调度器,是群集系统的惟一入口,对外使用全部服务器共有的VIP(虚拟IP)地址,一般会配置主从两台调度器实现热备份,确保高可用性。服务器

第二层:服务器池,也就是提供各类服务的服务器,例如web服务器,ftp服务器,数据库服务器等,处理调度器发来的请求。网络

第三层:共享存储,主要存储服务器池中应用程序的数据,通常会采用nas或者san设备,为全部节点提供稳定、一致的文件存储服务,确保整个集群的统一性并发



负载均衡的工做模式

    关于集群的负载调度技术,能够基于IP、端口、内容等进行分发,其中基于IP的负载调度是效率最高的。基于IP的负载均衡模式中,常见的有如下三种工做模式:

杨书凡01.png

(1)地址转换,简称NAT模式,负载均衡调度器做为网关,服务器和负载调度器在同一个私有网络,安全性较好。

(2)IP隧道,简称TUN模式,负载调度器仅做为客户机的访问入口,各节点经过各自的Internet链接直接回应客户机,不在通过负载调度器,服务器的节点分散在互联网的不一样位置,具备独立的共有IP地址,经过专用的IP隧道与负载调度器相互通讯。

(3)直接路由,简称DR模式,与TUN模式相似,但各节点不是分散在各地,而是与调度器位于同一个物理网络,负载调度器与各节点服务器经过本地网络链接,不须要创建专用的ip隧道。

    以上三种模式中,NAT方式只须要一个公网地址,从而成为最容易的一种负载均衡模式,安全性也比较好,许多硬件负载均衡设备就是采用这种方式;相比较而言,DR模式和TUN模式的负载能力更强大,使用范围更广,但节点的安全性要稍差一些。



案例:构建地址转换模式负载均衡集群(LVS——NAT)

    为了进一步提升公司的负载能力,公司决定扩展示有的网站平台,通过多方面考虑,管理员准备采用LVS群集的NAT模式,以下图所示:

杨书凡02.png


需求描述:

1. LVS调度器有两块网卡,分别链接内外网,外网地址也做为整个群集的VIP地址

2. 四台节点服务器,共享存储均位于内网,其默认网关设为LVS调度器的内网地址

3. 共享存储有一台Linux服务器承担,将目录/var/www/html发布为NFS可读写共享


实验步骤以下:

1. 配置LVS负载调度器

[root@localhost ~]# ifconfig              //添加一块网卡,分别配置内外网接口地址
eth0      Link encap:Ethernet  HWaddr 00:0C:29:1C:B4:FB  
          inet addr:172.16.16.172  Bcast:172.16.16.255  Mask:255.255.255.0
          
eth1      Link encap:Ethernet  HWaddr 00:0C:29:1C:B4:05  
          inet addr:192.168.7.254  Bcast:192.168.7.255  Mask:255.255.255.0

[root@localhost ~]# vim /etc/sysctl.conf   //打开防火墙路由转发功能,以便节点服务器访问Internet
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p      //当即生效
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# iptables -I FORWARD -p tcp -j ACCEPT
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.7.0/24 -o eth0 -j SNAT --to-source 172.16.16.172
                    
[root@localhost ~]# modprobe ip_vs        //LVS已成为Linux内核一部分,默认为ip_vs模块
[root@localhost ~]# cat /proc/net/ip_vs    //查看ip_vs模块版本信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn     
  
[root@localhost ~]# yum -y install ipvsadm     //ipvsadm是在负载调度器上使用的LVS群集管理工具
[root@localhost ~]# ipvsadm -v                 //查看ipvsadm版本信息
ipvsadm v1.26 2008/5/15 (compiled with popt and IPVS v1.2.1)

[root@localhost ~]# service ipvsadm stop      //关闭服务(清除原有策略)
[root@localhost ~]# service ipvsadm start     //开启服务(重建规则)
[root@localhost ~]# ipvsadm -A -t 172.16.16.172:80 -s rr   //建立虚拟服务器,调度算法为轮询
# -A表示添加虚拟服务器
# -t用来指定VIP地址及TCP端口
# -s用来指定负载调度算法
# rr轮询:将受到的访问请求按顺序轮流分配给群集中的各节点,无论服务器的链接数和系统负载
# wrr加权轮询:也是轮流分配,可是能够调整权重,让处理性能强的服务器承担更多的访问流量
# lc最少链接:根据链接数分配,分配给链接数少的节点
# wlc加权最少链接:权重高的节点将承担更大比例的负载

[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1  //添加服务器节点
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.22:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.23:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.24:80 -m -w 1
# -a表示添加真实服务器
# -r指定RIP地址及TCP端口
# -m表示使用NAT群集模式(-g DR模式和-i TUN模式)
# -w设置权值(权重为0时表示暂停节点)

[root@localhost ~]# ipvsadm -ln      //查看群集节点状态
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.16.172:80 rr
  -> 192.168.7.21:80              Masq    1      0          0         
  -> 192.168.7.22:80              Masq    1      0          0         
  -> 192.168.7.23:80              Masq    1      0          0         
  -> 192.168.7.24:80              Masq    1      0          0  

[root@localhost ~]# ipvsadm -d -r 192.168.7.24:80 -t 172.16.16.172:80  //若是须要删除某个节点,执行此命令
[root@localhost ~]# ipvsadm -D -t 172.16.16.172:80        //若是须要删除整个虚拟服务器,执行此命令

[root@localhost ~]# service ipvsadm save                     //保存策略
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [肯定]
[root@localhost ~]# chkconfig ipvsadm on                     //开机自动启动
[root@localhost ~]# cat /etc/sysconfig/ipvsadm               //确认保存结果  
-A -t 172.16.16.172:http -s rr
-a -t 172.16.16.172:http -r 192.168.7.21:http -m -w 1
-a -t 172.16.16.172:http -r 192.168.7.22:http -m -w 1
-a -t 172.16.16.172:http -r 192.168.7.23:http -m -w 1


2. 配置NFS共享存储服务

    NFS是一种基于TCP/IP传输的网络文件系统协议,也是NAS存储设备必然支持的一种协议

[root@localhost ~]# ifconfig           //配置IP地址,网关设置为LVS内网IP地址192.168.1.254
eth0      Link encap:Ethernet  HWaddr 00:0C:29:0D:16:6A  
          inet addr:192.168.7.250  Bcast:192.168.7.255  Mask:255.255.255.0

[root@localhost ~]# iptables -I INPUT -p tcp -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT                    
          
[root@localhost ~]# yum -y install nfs-utils rpcbind          
# nfs-utils软件包来提供NFS共享服务          
# rpcbind软件包提供RPC支持,以完成远程到本地的映射过程          

[root@localhost ~]# chkconfig nfs on        //建议调整为开机自启动
[root@localhost ~]# chkconfig rpcbind on          
[root@localhost ~]# mkdir /opt/wwwroot      //设置共享目录
[root@localhost ~]# echo welcome to beijing!!! > /opt/wwwroot/index.html
[root@localhost ~]# cat /opt/wwwroot/index.html     //建立测试网页
welcome to beijing!!!
[root@localhost ~]# vim /etc/exports        //将目录共享给192.168.7.0/24使用   
/opt/wwwroot 192.168.7.0/24(rw,sync,no_root_squash)          
# rw表示容许读写(ro为只读)          
# sync表示同步写入          
# no_root_squash当客户机以root身份访问时赋予本地root权限(默认是root_squash,将做为nfsnobody用户降权对待)

[root@localhost ~]# service rpcbind start
[root@localhost ~]# service nfs start
[root@localhost ~]# showmount -e 127.0.0.1       //查看本机发布的NFS共享目录
Export list for 127.0.0.1:
/opt/wwwroot 192.168.7.0/24


3. 配置web节点服务器

    全部节点服务器均使用相同的配置,包括httpd服务器端口、网站文档内容

[root@localhost ~]# ifconfig            //配置IP地址,网关设置为LVS内网IP地址192.168.1.254
eth1      Link encap:Ethernet  HWaddr 00:0C:29:8A:0D:26  
          inet addr:192.168.7.21  Bcast:192.168.7.255  Mask:255.255.255.0
          
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT   //配置防火墙策略     
 
[root@localhost ~]# yum -y install httpd nfs-utils rpcbind

[root@localhost ~]# showmount -e 192.168.7.250     //查看NFS服务器共享了哪些目录
Export list for 192.168.7.250:
/opt/wwwroot 192.168.7.0/24
[root@localhost ~]# mount 192.168.7.250:/opt/wwwroot /var/www/html    //将共享目录挂载到本地目录
[root@localhost ~]# tail -1 /etc/mtab 
192.168.7.250:/opt/wwwroot /var/www/html nfs rw,vers=4,addr=192.168.7.250,clientaddr=192.168.7.21 0 0

[root@localhost ~]# cat /var/www/html/index.html     //验证测试网页是否共享
welcome to beijing!!!
[root@localhost ~]# vim /etc/fstab          //设置开机自动挂载
192.168.7.250:/opt/wwwroot   /var/www/html     nfs     defaults,_netdev   0 0

[root@localhost ~]# chkconfig nfs on        
[root@localhost ~]# chkconfig rpcbind on  
[root@localhost ~]# chkconfig httpd on
[root@localhost ~]# service rpcbind start
[root@localhost ~]# service nfs start
[root@localhost ~]# service httpd start

    其余节点服务器的配置和上面彻底同样,以便实现负载均衡


4. 测试LVS集群

    安排多台测试机,从Internet中直接访问VIP地址http://172.16.16.172/,将能看到有真实Web服务器提供的网页内容。经过LVS负载均衡调度器,可查看当前的负载分配状况,因为使用轮询算法,各节点所得到的链接负载大体至关。

杨书凡03.png


在LVS负载均衡调度器中执行如下命令:

[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.16.172:80 rr
  -> 192.168.7.21:80              Masq    1      2          9         
  -> 192.168.7.22:80              Masq    1      3          8         
  -> 192.168.7.23:80              Masq    1      2          9 
  -> 192.168.7.24:80              Masq    1      4          7

    可看到各节点服务器的链接负载大体至关,从而实现了负载均衡