集群就是一组各自相互独立且又相互依赖的通过高速网络互联的计算机组成的一个计算机组,以单一的系统模式加以管理为用户提供服务,在一个集群里面一台计算机就是集群的一个节点,集群有三个特性:可靠性、可伸缩性和可管理性。比如一台服务器能响应10000个并发,随着业务量的增大用户增多现在有200000个并发,那这台服务器很明显已经达到瓶颈,解决这个问题一般有两个办法:第一个就是升级CPU、内存、带宽、加SSD,这种办法称为向上扩展(scale up),另外一个办法是增加服务器,使用多台服务器同时为用户提供服务,这种办法称之为向外扩展(scale out),也就是集群。
集群的类型又分为下三种:
实现LB集群通常有种手段:在硬件方面代表的厂家有F5、Citrix、A10等;软件方面有LVS、nginx、haproxy、ats(apache traffic server)、perlbal、pound等
LVS(Linux Virtual Server)即linux虚拟服务器,是一个虚拟的服务器系统,它是由我国的张文嵩博士成立的自由软件项目,根据iptables的实现来开发。lvs的工作模式如下图:
LVS相当于负载调度器,它位于整个集群对面最前端的服务器,负责接收用户请求并根据自己的调度算法将请求转发到后端真正为用户提供服务的服务器,而客户认为服务是来自一个IP地址;共享存储则为RS保持用户访问的数据的相同内容,提供数据的一致性,包括session的问题。
lvs集群四种类型:
lvs-nat
:修改请求报文的目标IP;多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为经过自身算法后到达的RS的RIP和端口实现转发;
注意事项:
lvs-dr
:直接路由。基于数据链路层的转发,在lvs所有的模式中效率最好。
通过封装新的MAC头部再实现网络转发。
确保前端路由器将目标IP为VIP请求报文发往Director有以下三种方法:
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
0:默认值,把本机上的所有接口的所有信息向每个接口上的网络进行通告
1:尽量避免向非直连网络进行通告
2:必须避免向非本地网络通告
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
0:默认值,可使用本地任意接口上配置的任意地址进行响应
1:仅在请求的目标IP配置在本地主机的接收到请求报文接口上时才响应。
2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。
3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。
4~7:保留未使用
8:不回应所有的arp请求
sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。
注意事项:
lvs-tun
:在原请求IP报文之外新加一个IP头部,不修改请求报文的IP头部信息;
注意事项:
lvs-fullnat
:修改请求报文的源IP和目标IP进行转发;
注意事项:
lvs根据其调度是是否考虑各RS当前的负载状态,可分为静态方法和动态方法两种。
静态方法:(仅根据算法本身进行调度)
RR
:轮询
WRR
:加权重的轮询
SH
:将源地址做哈希,将来自同一个IP的请求始终发往第一次挑中的RS,从而实现会话绑定(session sticky)
DH
:将目标地址做哈希,将发往同一个目标地址的请求始终发至第一次挑中的RS,一般用在正向代理缓存场景中的负载均衡
动态方法:(主要根据每台RS当前的负载状态及调度算法进行调度)
LC
:最少连接数,根据算法将请求发往连接数最少的RS
WLC
加权重的最少连接数,director可以自动获取RS的负载情况并动态调整权重
SED
:最短预期延迟
NQ
:无需队列
LBLC
:基于局部性的最少连接
LBLCR
:复制功能的LBLC
net.ipv4.ip_forward = 1
安装lvs管理工具:
yum install -y ipvsadm
设置规则:
ipvsadm -A -t 192.168.1.1:80 -s rr
ipvsadm -a -t 192.168.1.1:80 -r 172.16.1.10 -m
ipvsadm -a -t 192.168.1.1:80 -r 172.16.1.20 -m
选项:
-a:添加真实服务器
-A:添加虚拟服务器
-r:指定RS的IP地址
-m:nat方式的lvs
-t:表示TCP的服务
-s:调度算法 ,rr表示轮询
更多参数含义见 ipvsadm -h
保存及重载配置:
//保存
ipvsadm --save >/etc/sysconfig/file
ipvsadm -S >/etc/sysconfig/file
//重载
ipvsadm -R </etc/sysconfig/file
ipvsadm-restore </etc/sysconfig/file
查看配置的规则:
接着在两台RS配置httpd的web界面内容
echo "172.16.1.10" > /var/www/html/index.html
echo "172.16.1.20" > /var/www/html/index.html
到此lvs-nat模式已经全部配置完成了,测试一下:
访问VIP能正常根据我们配置的轮询算法进行负载均衡,成功!
在nat模式很明显的弊端就是所有的报文都需要经过director,造成director的瓶颈,很容易造成单点故障,如果该服务器宕机对整个集群造成的伤害是毁灭性的;ipvs在低版本中是不具有健康检查的,即使是高版本,监测功能也不成熟,因此不适合在生产环境使用。
实验拓扑图:
在lvs管理主机配置规则:
在两台RS关闭RP响应:
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
注意
:RS上必须在looback接口上配置VIP,否则会响应客户端的ARP请求。
在RS添加web内容:
#RS1
echo “192.168.8.50” >/var/www/html/index.html
#RS2
echo “192.168.8.60” >/var/www/html/index.html
在浏览器为访问192.168.8.10会显示两个内容表示测试成功!
小结:
会话同步的方法:把所有自己的会话信息保存到数据库中(Redis)
预防director单点故障:高可用(keepalived、heartbeat)
对RS做健康监测:端口探测(传输层)、请求网页(应用层)