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

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



群集的类型

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

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

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

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


负载均衡的分层结构

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

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

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

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



负载均衡的工作模式

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

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

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

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

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

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



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

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

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


需求描述:

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

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

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


实验步骤如下:

1. 配置LVS负载调度器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
[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存储设备必然支持的一种协议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[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服务器端口、网站文档内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[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负载均衡调度器,可查看当前的负载分配情况,由于使用轮询算法,各节点所获得的连接负载大致相当。

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


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

1
2
3
4
5
6
7
8
9
[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

    可看到各节点服务器的连接负载大致相当,从而实现了负载均衡










本文转自 杨书凡 51CTO博客,原文链接:http://blog.51cto.com/yangshufan/2065415,如需转载请自行联系原作者
上一篇:九合创投王啸:送给AI创业者的2018年生存指南 | 36氪阿里AI赛道明星班


下一篇:一站式元器件平台「硬之城」完成千万美元B1轮融资,魔量资本独家投资