使用LVS-NAT搭建集群

使用LVS-NAT搭建集群

环境:

hostname OS IP
balancer centos7 nat:192.168.220.130
仅主机192.168.100.10/24
server1 centos7 仅主机192.168.100.20/24
server2 centos7 仅主机192.168.100.30/24
  • 集群

一组各自相互独立且又相互依赖的,通过高速网络互联的计算机组成的一个计算机组, 以单一的系统模式加以管理, 为用户提供服务, 对用户来说, 用户只会认为对方是一个服务. 这个里面, 一组计算机的一台计算机就是集群的一个节点

  • LVS负载均衡的三种包转发方式

    LVS提供了三种包转发方式:NAT(网络地址映射)、IP Tunneling(IP隧道)、Direct Routing(直接路由)。不同的转发模式决定了不同的cluster的网络结构

    • NAT
    NAT: 网络地址转换
    		DNAT: 目标地址转换  改变的是目标地址
    		SNAT: 原地址转换	改变的是原地址
    		LVS-NAT 就是使用的SNAT和DNAT完成报的转发
    NAT方式可支持任何的操作系统,以及私有网络,并且只需一个Internet IP地址,但是整个系统的性能受到限制。因为执行NAT每次需要重写包,有一定的延迟;另外,大部分应用有80%的数据是从服务器流向客户机,也就是用户的请求非常短,而服务器的回应非常大,对负载均衡器形成很大压力,成为了新的瓶颈。
    
    • IP Tunneling(IP隧道)
    director(分发器)分配请求到不同的real server。real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。IP Tunneling技术极大地提高了director的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过100个节点。real server可以在任何LAN或WAN上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式的IP地址用于与客户机直接通信,并且所有服务器必须支持IP隧道协议。
    
    • Direct Routing(直接路由)
    与IP Tunneling类似,负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。Direct Routing与IP Tunneling相比,没有IP封装的开销,但由于采用物理层(修改MAC地址)技术,所有服务器都必须在一个物理网段
    
  • 通过NAT实现虚拟服务器

    1. 负载调度器,:分发器(Load Balancer, Director): 整个集群对外的最前端机, 负责接收用户请求, 并且根据自己的调度算法, 将请求转发到后端真实服务器上的动作,而客户认为服务是来自一个IP地址(我们可称之为VIP虚拟IP地址)上的。

    2. 服务器池: Server Pool 真正为用户提供服务的服务器, 每一台服务器就是一台RS[RealServer],执行的服务有WEB、MAIL、FTP和DNS等。

    3. 共享存储: Shared Storaged 为RS保持相同内容, 提供数据的一致性,也就是说,它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

VS/NAT的体系结构如图所示。在一组服务器前有一个调度器,它们是通过Switch/HUB相连接的。这些服务器提供相同的网络服务、相同的内容,即不管请求被发送到哪一台服务器,执行结果是一样的。服务的内容可以复制到每台服务器的本地硬盘上,可以通过网络文件系统(如NFS)共享,也可以通过一个分布式文件系统来提供。

在这里插入图片描述

客户通过Virtual IP Address(虚拟服务的IP地址)访问网络服务时,请求报文到达调度器,调度器根据连接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址Virtual IP Address改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器。同时,调度器在连接Hash表中记录这个连接,当这个连接的下一个报文到达时,从连接Hash表中可以得到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务器。当来自真实服务器的响应报文经过调度器时,调度器将报文的源地址和源端口改为Virtual IP Address和相应的端口,再把报文发给用户。我们在连接上引入一个状态机,不同的报文会使得连接处于不同的状态,不同的状态有不同的超时值。在TCP连接中,根据标准的TCP有限状态机进行状态迁移;在UDP中,我们只设置一个UDP状态。不同状态的超时值是可以设置的,在缺省情况下,SYN状态的超时为1分钟,ESTABLISHED状态的超时为15分钟,FIN状态的超时为1分钟;UDP状态的超时为5分钟。当连接终止或超时,调度器将这个连接从连接Hash表中删除。

这样,客户所看到的只是在Virtual IP Address上提供的服务,而服务器集群的结构对用户是透明的。对改写后的报文,应用增量调整Checksum的算法调整TCP Checksum的值,避免了扫描整个报文来计算Checksum的开销。


配置LVS-NAT

打开路由转发功能

[root@balancer ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
生效配置
[root@balancer ~]# sysctl -p
net.ipv4.ip_forward = 1

安装lvs管理工具

[root@balancer ~]# yum install ipvsadm -y

添加规则


[root@balancer ~]# ipvsadm -A -t 192.168.220.130:80 -s rr
选项:
-A 添加虚拟服务器
-t 表示TCP的服务  VIP:PORT
-s 指定调度算法  rr表示round-robin 轮循

[root@balancer ~]# ipvsadm -a -t 192.168.220.130:80 -r 192.168.100.20 -m 
[root@balancer ~]# ipvsadm -a -t 192.168.220.130:80 -r 192.168.100.30 -m
选项:
 -a 表示添加real server的地址
 -r 指定real server的IP地址
 -m 表示masquerade 也就是NAT方式的LVS

查看规则
[root@balancer ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.220.130:80 rr
  -> 192.168.100.20:80            Masq    1      0          0         
  -> 192.168.100.30:80            Masq    1      0          0 
 
保存规则 
[root@balancer ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@balancer ~]# cat /etc/sysconfig/ipvsadm
-A -t proxy:http -s rr
-a -t proxy:http -r 192.168.100.20:http -m -w 1
-a -t proxy:http -r 192.168.100.30:http -m -w 1


[root@balancer ~]# yum install squid -y
[root@balancer ~]#  vim /etc/squid/squid.conf
 56 http_access deny all==>http_access allow all
[root@balancer ~]# systemctl start squid
[root@balancer ~]# lsof -i:3128
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
squid   12135 squid   11u  IPv6  71743      0t0  TCP *:squid (LISTEN)

Server端配置

这里我的Server是仅主机,通过代理上网
server1:
[root@server1 ~]# vim /etc/profile
export http_proxy=http://192.168.100.10:3128
export https_proxy=http://192.168.100.10:3128
[root@server1 ~]# source /etc/profile
[root@server1 ~]# yum install httpd
[root@server1 ~]# echo "server1" >> /var/www/html/index.html
[root@server1 ~]# systemctl restart httpd

server2:
[root@server1 ~]# vim /etc/profile
export http_proxy=http://192.168.100.10:3128
export https_proxy=http://192.168.100.10:3128
[root@server1 ~]# source /etc/profile
[root@server1 ~]# yum install httpd
[root@server1 ~]# echo "server2" >> /var/www/html/index.html
[root@server1 ~]# systemctl restart httpd

测试

[root@balancer ~]# for i in `seq 1 3`;do curl 192.168.220.130;done
server1
server2
server1
查看连接次数
[root@balancer ~]#  ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.220.130:80                  3       18       12     1197     1411
  -> 192.168.100.20:80                   1        6        4      399      463
  -> 192.168.100.30:80                   2       12        8      798      948

附录:ipvsadm命令选项解释:


-A --add-service    在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。  
-E --edit-service      编辑内核虚拟服务器表中的一条虚拟服务器记录。  
-D --delete-service  删除内核虚拟服务器表中的一条虚拟服务器记录。  
-C --clear                 清除内核虚拟服务器表中的所有记录。  
-R --restore             恢复虚拟服务器规则  
-S --save                 保存虚拟服务器规则,输出为-R 选项可读的格式  
-a --add-server       在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器  
-e --edit-server       编辑一条虚拟服务器记录中的某条真实服务器记录  
-d --delete-server    删除一条虚拟服务器记录中的某条真实服务器记录  
-L|-l --list                  显示内核虚拟服务器表  
-Z --zero                  虚拟服务表计数器清零(清空当前的连接数量等)  
--set tcp tcpfin udp  设置连接超时值  
--start-daemon        启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived的VRRP 功能。  
--stop-daemon        停止同步守护进程  
-h --help                  显示帮助信息  
其他的选项:  
-t --tcp-service service-address        说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]  
-u --udp-service service-address      说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]  
-f --fwmark-service fwmark               说明是经过iptables 标记过的服务类型。  
-s --scheduler scheduler                   使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.  
-p --persistent [timeout]                   持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。  
-M --netmask                                    netmask persistent granularity mask  
-r --real-server server-address         真实的服务器[Real-Server:port]  
-g --gatewaying                                指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)  
-i --ipip                                              指定LVS 的工作模式为隧道模式  
-m --masquerading                           指定LVS 的工作模式为NAT 模式  
-w --weight weight                           真实服务器的权值  
--mcast-interface interface              指定组播的同步接口  
-c --connection                                  显示LVS 目前的连接 如:ipvsadm -L -c  
--timeout                                        显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout  
--daemon                                          显示同步守护进程状态  
--stats                                              显示统计信息  
--rate                                                显示速率信息  
--sort                                                对虚拟服务器和真实服务器排序输出  
--numeric -n                                      输出IP 地址和端口的数字形式
发布了65 篇原创文章 · 获赞 48 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/DoloresOOO/article/details/100014606