LVS基于NAT模式搭建负载均衡群集

LVS的基本架构图

负载均衡群集中,包括三个层次的组件:

1、第一层,负载调度器(BL)

         前段至少有一个负载调度器(Load Balancer 或称为Director)负责响应并分发来自客户端的访问请求。

         这是访问整个集群系统的唯一入口,对外使用所有服务器共有的VIP(Virtual IP,虚拟IP)地址,也称为群集IP地址,通常会配置主、备两台调度器实现热备份,当主机调度器失效以后平滑替换至备用调度器,确保高可用性。

 

2、第二层,服务器池(Real Server)

         后端由大量真实服务器(Real Server)构成服务器池(Server Pool),提供实际的应用服务,整个群集的伸缩性通过增加、删除服务器节点来完成,而这些过程对客户机是透明的。

         群集所提供的应用服务(如HTTP、FTP)由服务器池承担,其中的每个节点具有独立的RIP(Real IP,真实IP)地址,只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。

 

3、第三层,共享储存(NFS)

         为了保持服务的一致性,所有节点使用共享储存设备。

         为了服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个集群的统一性。在Linux/UNIX环境中,共享储存可以使用NAS设备,或者提供NFS(Network File System,网络文件系统)共享服务的专用服务器。

 

 

实验环境:

         LVS调度器(BL)作为Web1、Web2两台Web服务器池的网关

         BL两块网卡,分别连接内外网   (本次实验是单节点调度的,若要高可用请添加多台备用调度器+keepalive实现,本次实验只是做负载均衡)

BL主机(负载调度器):

外网地址:192.168.10.20/24,同时也作为整个群集的VIP

内网地址:192.168.1.11/24

Web1主机:192.168.1.22/24

Web2主机:192.168.1.33/24

NFS主机:192.168.1.44/24

使用轮询(rr)调度算法

主机名称 内网IP地址 外网IP地址 部署软件
LVS-master(BL主机)
192.168.1.11 192.168.10.20 ipvsadm
NFS 192.168.1.22 nfs、rpcbind
WEB1 192.168.1.33 httpd、nfs-utils
WEB2 192.168.1.44 httpd、nfs-utils

 

LVS的NAT负载均衡模式原理:

1、PC机直接访问BL服务器的VIP:192.168.10.20

2、BL服务器接收到请求后,通过自身调度算法选择一台下面的WEB服务器,并将目标地址为某一WEB服务器的IP,源地址不变。

3、WEB服务器接受到请求后,将数据包解封并返回数据给BL,返回的数据包中,源IP为WEB自身IP,目标IP为PC机IP。

4、BL服务器接收到WEB响应的数据包后,将数据包的源IP改为自身IP,目标IP不变,发给PC机

整个过程PC机并不知道WEB服务器的存在。

 

开始搭建

1、配置NAS(nfs)共享储存服务器

 1 [root@nfs ~]# yum -y install nfs-utils rpcbind    #下载NFS rpcbind
 2 [root@nfs ~]# mkdir /opt/www
 3 [root@nfs ~]# vim /etc/exports                    #设置共享目录,将/opt/www作为共享目录,要求192.168.2.0/24网段只读权限访问网页数据(若增加读写速度和安全性,可结合raid5+LVM)
 4 /opt/www        192.168.1.0/24(ro,sync,no_root_squash)   5 
 6 [root@nfs ~]# /etc/init.d/rpcbind start
 7 正在启动 rpcbind:                                         [确定]
 8 [root@nfs ~]# /etc/init.d/nfs start
 9 启动 NFS 服务:                                            [确定]
10 启动 NFS mountd:                                          [确定]
11 启动 NFS 守护进程:                                        [确定]
12 正在启动 RPC idmapd:                                      [确定]
13 [root@nfs ~]# showmount -e 192.168.1.22            #查看nfs挂载情况
14 Export list for 192.168.1.22:
15 /opt/www 192.168.1.0/24
16 [root@nfs ~]# chkconfig rpcbind on   #设置开机启动
17 [root@nfs ~]# chkconfig nfs on       #设置开机启动
18 [root@nfs ~]# echo "<h1>it works</h1>">/opt/www/index.html   #编辑共享文件内容

 2、配置WEB1、WEB2(操作相同)

 1 [root@WEB1 ~]#yum -y install httpd nfs-utils                   #下载Apache、nfs服务
 2 [root@WEB1 ~]#sed -i '/#S/ s/#//' /etc/httpd/conf/httpd.conf   #启用apache的域名服务
 3 [root@WEB1 ~]#sed -n '/com:80/p' /etc/httpd/conf/httpd.conf 
 4 ServerName www.example.com:80
 5 [root@WEB1 ~]# /etc/init.d/httpd start
 6 正在启动 httpd:                                           [确定]
 7 
 8 [root@WEB1 ~]# vim /etc/fstab           #编辑fstab文件,写入nfs服务器的挂载目录,使其永久生效。
 9 ……
10 192.168.1.22:/opt/www/   /var/www/html/          nfs     defaults,_netdev       1 2
11 #挂载点IP:挂载点目录       #挂载到的目录            

12 [root@WEB1 ~]# mount -a #挂载所以可挂载点 13 [root@WEB1 ~]# df -hT #查看挂载情况 14 Filesystem Type Size Used Avail Use% Mounted on 15 /dev/mapper/vg_www-lv_root ext4 37G 1.3G 34G 4% / 16 /dev/sda1 ext4 485M 33M 427M 8% /boot 17 tmpfs tmpfs 242M 0 242M 0% /dev/shm 18 192.168.1.22:/opt/www/ nfs 37G 1.3G 34G 4% /var/www/html

3、PC机访问WEB服务器测试

 4、配置LVS服务器(BL)

 11)加载ip_vs模块,安装ipvsadm工具
 2 [root@bl ~]# modprobe ip_vs
 3 [root@bl ~]# cat /proc/net/ip_vs
 4 IP Virtual Server version 1.2.1 (size=4096)
 5 Prot LocalAddress:Port Scheduler Flags
 6   -> RemoteAddress:Port Forward Weight ActiveConn InActConn
 7 [root@bl ~]# yum -y install ipvsadm
 8 
 92)配置负载调度器SNAT转发规则
10 [root@bl ~]# /etc/init.d/ipvsadm stop
11 ipvsadm: Clearing the current IPVS table:                  [确定]
12 ipvsadm: Unloading modules:                                [确定]
13 [root@bl ~]# ipvsadm -A -t 192.168.10.20:80 -s rr
14 [root@bl ~]# ipvsadm -a -t 192.168.10.20:80 -r 192.168.1.33:80 -m -w 1
15 [root@bl ~]# ipvsadm -a -t 192.168.10.20:80 -r 192.168.1.44:80 -m -w 1
16 [root@bl ~]# ipvsadm -L -n
17 IP Virtual Server version 1.2.1 (size=4096)
18 Prot LocalAddress:Port Scheduler Flags
19   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
20 TCP  192.168.10.20:80 rr
21   -> 192.168.1.33:80               Masq    1      0          0         
22   -> 192.168.1.44:80               Masq    1      0          0         
23 [root@bl ~]#ipvsadm -S >> /etc/sysconfig/ipvsadm
24 ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [确定]
25 [root@bl ~]# chkconfig ipvsadm on
26 
273)开启路由转发功能
28 [root@bl ~]#echo "net.ipv4.ip_forward=1
29 net.ipv4.conf.all.rp_filter=0
30 net.ipv4.conf.default.rp_filter=0 " > /etc/sysctl.conf  
31 
32 [root@bl ~]# sysctl -p
33 net.ipv4.ip_forward = 1
34 net.ipv4.conf.all.rp_filter = 0
35 net.ipv4.conf.default.rp_filter = 0

5、PC机访问VIP测试

 

(若不成功,检查各个服务器的防火墙与selinux机制是否关闭)多刷新几次

多次CTRL+f5刷新后查看

 1  [root@bl ~]#ipvsadm -L -n -c
 2  IPVS connection entries
 3  pro expire state       source               virtual            destination
 4  TCP 01:51  TIME_WAIT   192.168.10.10:63567 192.168.10.20:80    192.168.1.33:80
 5  TCP 01:00  TIME_WAIT   192.168.10.10:63560 192.168.10.20:80    192.168.1.33:80
 6  TCP 01:01  TIME_WAIT   192.168.10.10:63562 192.168.10.20:80    192.168.1.44:80
 7  TCP 01:00  TIME_WAIT   192.168.10.10:63556 192.168.10.20:80    192.168.1.44:80
 8  TCP 01:00  TIME_WAIT   192.168.10.10:63561 192.168.10.20:80    192.168.1.44:80
 9  TCP 00:59  TIME_WAIT   192.168.10.10:63555 192.168.10.20:80    192.168.1.33:80
10  TCP 01:50  TIME_WAIT   192.168.10.10:63566 192.168.10.20:80    192.168.1.33:80
11  TCP 01:54  TIME_WAIT   192.168.10.10:63569 192.168.10.20:80    192.168.1.33:80

 之所以看到的结果并不是轮询的一次是192.168.1.33下一次是192.168.1.44,是因为负载调度器要判断一次完整TCP连接结束后才会进行轮询,也就是完成完整的三次握手与四次断开,因此若在网页上下载电影时及时刷新了网页,也不会轮询到下一台服务器导致传输中断。

 

Have fun!!!

 

 

猜你喜欢

转载自www.cnblogs.com/Smbands/p/10611051.html