LVS的工作模型与配置

一、集群的概念
  集群是一种计算机系统,它通过一组分散集成的计算机软件或者硬件进行连接起来,高度紧密的协作完成计算工作。在某种意义上,他们可以被看做是一台虚拟服务计算机。集群系统中的单个计算机通常被称作为节点,一般是通过局域网进行连接工作,但也还有其他连接方式。集群计算机通常用来改进单个计算机的处理速度或者是系统服务器的可靠性。对于Linux一般来说,集群就是一组计算机通过网络连接来组合完成一个任务或是服务。
  当我们的系统到达瓶颈是,一般有两种扩展方式,向上扩展(纵向扩展)或者是向下扩展(横向扩展),向上扩展是为单个服务器更换添加更好的硬件资源来提高系统服务性能,但是这种扩展方式所花费的资金与所提高的服务性能并成正比;还有一种是向下扩展,即为添加多个计算机节点来提供服务,一般这种扩展方式是我们所能接收和与达到目标效果相符的。
  
系统可用性=平均无故障时间/平均无故障时间+平均修复时间

集群的类型:
  LB:Load Balance,负载均衡集群;
  HA:High Availability,高可用集群;
  HP:High Performancing,高性能集群;

LB集群的实现类型:
  通过硬件实现:F5、BIG-IP、Citrix NetScaler、A10、Redware
  通过软件实现:Lvs、HAproxy、Nginx、Ats

二、LVS简介和工作原理
  LVS是Linux Virtual Server的简写,即意思为Linux虚拟服务器,是一个虚拟的服务器集群系统。是由章文嵩博士主导开发的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中了。它可以根据客户端请求报文的目标ip和port根据其调度算法转发至后端主机集群中的某一台主机。

LVS工作在内核中的第四层即TCP/UDP层,能够根据ip、端口快速的处理用户请求的套接字,而后把用户请求调度到后端集群服务器中。LVS工作在内核空间的Netfilter防火墙中的INPUT链上,当用户请求进入本机时,先进过Prerouting规则链,如果不是做DNAT转发的话,该请求报文就进入INPUT链上,而LVS就工作于此,它随时监控着通过INPUT链随时发往本机的应用请求,而后通过其工作模式来修改请求报文字段,所以该请求报文不会进入用户空间,修改完成后根据调度算法便直接发往POSTROUTING链发往到后端所挑选的集群主机中。所以LVS和IPTABLES的机制不能同时使用。

在这里插入图片描述

三、LVS的工作模式
我们想了解LVS的工作模式,首先要知道LVS的专业术语。
调度器:Director、Load Balance
后端集群主机:Real Server
客户端IP:CIP
调度器IP:VIP与DIP(DIP是公开于互联网中接收请求的IP、DIP一般是用来和内部局域网后端Real Server通信的IP地址)
后端服务器IP:RIP
其工作的流程走向是:CIP - -> VIP - -> DIP - -> RIP - -> CIP

1、NAT工作模式:
  NAT(Network Address Translation)即网络地址转换,此类型的作用是修改客户端的请求报文中的CIP,把CIP转换为自己的DIP再封装报文,根据调度算法调度到后端Real Server中,Real Server发现请求者是拥有DIP的这个主机,于是便根据其请求的资源,封装响应报文,返回给DIP主机,因为拥有DIP的是调度器自己,所有它再根据之前所修改的信息的记录Hash表,再把响应报文中发送者中的RIP替换为自己的VIP,接受者修改为CIP返回给客户端,所以在客户端看来,其请求的目标主机就是拥有VIP的服务器。这样可以隐藏后端服务器,加大安全性,也达到了负载均衡的效果。
NAT工作模型的特点和缺点:
特点:
(1)RS应该和DIP应该使用私网地址,且RS的网关指向DIP;
(2)请求和响应报文都要经由director转发;director可能会成为系统瓶颈;
(3)支持端口映射;
(4)RS可以使用任意OS;
(5)RS的RIP和Director的DIP必须在同一IP网络;

缺点:
  请求报文和响应报文都需要调度器进行修改,当用户访问量巨大时,调度器主机可能成为瓶颈。

在这里插入图片描述

2、DR工作模型
  DR工作模型又称为为直连路由模型,DR模型的工作原理是通过调度器修改客户端请求报文的目标MAC地址,此时源MAC地址是调度器修改报文后的自己当前的MAC地址,目标MAC地址是根据调度算法所挑选出来的Real Server后端主机的MAC地址,而后将请求报文发送给后端Real Server。而Real Server服务器可以直接对处理的结果返回给客户端主机,不再需要经过调度器。
DR工作模型的特性
它通过修改请求报文的目标MAC地址进行转发;
Director:VIP,DIP
RSs:RIP,VIP
(1)保证前端路由器将目标IP为VIP的请求报文发送给director;
(2)RS的RIP可以使用私网地址;但也可以使用公网地址;
(3)RS跟Director必须在同已无力网络中;
(4)请求报文经由Director调度,但响应报文一定不能经由Director;
(5)不支持端口映射;
(6)RS可以支持大多数OS;
(7)RS的网关不能指向DIP;

在这里插入图片描述

还有两种工作模式一般用的较少TUN和FFULLNAT工作模式。

四、LVS的常用调度算法
静态调度算法:
(1)RR:轮询调度;
(2)WRR:加权轮询;
(3)SH:源地址绑定,对同一个IP地址所访问的请求始终发往同一台后端服务器上;
(4)DH:请求目标绑定,对服务器端目标资源请求相同的主机,始终调度到同一主机;

动态调度算法:
(1)LC:最少连接数;
(2)WLC:加权的最少连接数(默认此种算法);
(3)SED:最短延迟调度;
(4)NQ:最少队列调度;

五、ipvsadm的使用
配置虚拟服务器的语法:

命令用法和格式:ipvsadm -A|E  -t|u|f  virutal-service-address:port [-s scheduler] [-p[timeout]] [-M netmask]	
#添加/编辑一条新的虚拟服务器记录。
ipvsadm -D -t|u|f virtual-service-address
#删除一条记录
ipvsadm -C
#清除所有记录
ipvsadm -R
#恢复虚拟服务器规则
ipvsadm -S [-n]
#保存虚拟服务器规则

命令选项解释:
-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也
就是增加一台新的虚拟服务器。
-E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
-C --clear 清除内核虚拟服务器表中的所有记录。
-R --restore 恢复虚拟服务器规则
-S --save 保存虚拟服务器规则,输出为-R 选项可读的格式
-s --scheduler scheduler 使用的调度算法,有这样几个选项
rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客
户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
-M --netmask netmask persistent granularity mask
--------------------- 

real server配置语法:

ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface]
ipvsadm --stop-daemon
ipvsadm -h

命令选项解释:
-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 标记过的服务类型。

-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 地址和端口的数字形式
--------------------- 

五、NAT模式的实验配置
环境说明:

服务器 地址
调度器 192.168.126.135
后端服务器1 192.168.126.133
后端服务器2 192.168.126.138

(1)对两台后端服务器配置web服务

web1

[root@web1 ~]# vim /var/www/html/index.html 
<h1>Test Page from web1</h1>



```"/var/www/html/index.html" 1L, 29C 已写入
[root@web1 ~]# service  httpd restart
停止 httpd:                                               [确定]
正在启动 httpd:httpd: apr_sockaddr_info_get() failed for web1
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                           [确定]
[root@web1 ~]# 

web2(因为是演示环境所以两端web页面不一样,但是生产环境中其页面资源要保持一致性)

[root@web2 ~]# vim /var/www/html/index.html 
<h1>Test  Page from  web2<h1/>


"/var/www/html/index.html" 1L, 31C 已写入
[root@web2 ~]# service httpd restart 
停止 httpd:                                               [确定]
正在启动 httpd:httpd: apr_sockaddr_info_get() failed for web2
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                           [确定]
[root@web2 ~]# 

(2)配置虚拟服务器

[root@proxy ~]# ipvsadm  -L -n 
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@proxy ~]# 
[root@proxy ~]# ipvsadm  -A -t 192.168.126.135:80   -s rr 
[root@proxy ~]# ipvsadm  -a -t 192.168.126.135:80  -r 192.168.126.133  -m
[root@proxy ~]# ipvsadm  -a -t 192.168.126.135:80  -r 192.168.126.138  -m
[root@proxy ~]# 
[root@proxy ~]# 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.126.135:80 rr
  -> 192.168.126.133:80           Masq    1      0          0         
  -> 192.168.126.138:80           Masq    1      0          0         
[root@proxy ~]# 

(3)请求虚拟服务器地址资源页面,查看是否为轮询
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Micky_Yang/article/details/89297506