1-2、LVS之Linux集群系统基础

Linux Cluster:

为了满足同一目的的需要,将多台主机组织起来解决统一问题的计算机的集合叫集群

Web Arch

虚拟化和云计算

自动化运维工具:ansible, puppet, zabbix

大数据处理平台:hadoop 2, storm, spark, zookeeper

PaaS, ELK

系统扩展的方式:

scale up:向上扩展   提供性能更好的服务器替代现有的服务器;

scale out:向外扩展   提供更多的服务器来满足同一个需求;

集群类型:

LB:负载均衡集群,Load Balancing

HA:高可用集群,High Availability    

HP:高性能集群,High Performancing

Availability=90%,95%, 99%, 99.5%, 99.9%, 99.99%, 99.999%

可用性=所有无故障时间/所有无故障时间+所有修复时间

系统衡量指标:

可扩展性

可用性:服务器是不是随时可用

容量:一定时间内完成的工作量(单位时间内完成的总量)

性能:响应时间,一个请求大概在多长时间内完成

 

系统运维:可用 --> 标准化 --> 自动化

超级计算机排名:www.top500.org

 

构建高可扩展性系统的重要原则:

在系统内部尽量避免-->串行化和交互:后层服务器不能等上层服务器完成工作再执行任务,这样会导致性能大部分下降

GSLB: Global Service Load Balancing  全局负载均衡

 SLB: Service Load Balancing  服务负载均衡调度

HA集群的实现:

keepalived:通过实现vrrp协议来实现地址漂移;

AIS:

heartbeat

cman+rgmanager (RHCS: redhat cluster suite)

corosync+pacemaker

 

HP:High Performance

DS:Distributed System

hadoop:

mapreduce

hdfs

 

总结:

分层:负载均衡层,静态内容层,动态内容层,数据存储层(结构化数据、非结构化数据),

分割:把各个应用分别用不同的服务器组上实现

分布式:无法分割的就用分布式

分布式应用:

分布式静态资源

分布式数据和存储

分布式计算:Hadoop




2、LVS集群基础

Linux 虚拟服务器(Linux Virtual Servers)

LB负载均衡集群的实现:

硬件:

F5 BIG-IP

Citrix NetScaler

A10 A10

Array

Redware

软件:https://www.jianshu.com/p/16e9c84fdb3c

lvs

haproxy

nginx

ats (apache traffic server)

perlbal

 

基于工作的协议层次划分:

传输层:

lvs:不需要监听在套接字上(负载均衡入门)

haproxy(mode tcp)(haproxy只是模拟tcp层,因为tcp层是在内核中,而haproxy是监听在某个套接字上的应用层序)

应用层(反向代理):

haproxy, nginx, ats, perlbal

 

lvs:

链接文章:https://www.jianshu.com/p/8a61de3f8be9     http://www.178linux.com/13570

章文嵩:正明;

LVS:Linux Virtual Server

 

将来自于一个主机的很多请求分发到不同的主机,只要目标不同,但二层分发设备只能基于目标mac地址进行工作。

路由器是基于目标IP,是三层设备;

LVS所在的主机是四层设备即传输层,它根据请求哪一个协议的哪个目标端口来做分发,比如请求时3306,就把对3306的请求分发到一组3306的服务器上去,不是3306的就不分发。

l4: 四层交换,四层路由;

根据请求报文的目标IP和PORT将其转发至后端主机集群中的某一台主机(根据挑选算法);

 

LVS如何利用netfilter工作? 

LVS工作在INPUT上,如果用户请求的目标是本机即director,那么报文经由PREROUTING链后直接进入INPUT链,由于LVS自身就在INPUT链上定义了集群规则,此时LVS如果发现用户请求的是LVS定义的集群服务的端口的话,按常理报文到达INPUT接着会到达用户空间,但是LVS在此时会强行改变报文经过的流程,直接把报文从INPUT链扔到POSTROUTING链上,因此基于LVS工作,流程就变成了PREROUTING-->INPUT-->POSTROUTING。

netfilter:    

参考链接:https://segmentfault.com/a/1190000009043962

PREROUTING --> INPUT

PREROUTING --> FORWARD --> POSTROUTING

OUTPUT --> POSTROUTING

 

lvs组成部分:

ipvsadm/ipvs

 

ipvsadm: 用户空间的命令行工具,用于管理集群服务(增删查改);

ipvs: 工作内核中netfilter INPUT钩子上;

 

支持TCP, UDP, AH, EST, AH_EST, SCTP等诸多协议;

# grep -i -A 10 'IPVS' /boot/config-3.10.0-693.el7.x86_64 

CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y  //流式传输协议

 

lvs arch   lvs架构:

调度器:director, dispatcher, balancer

RS: Real Server

 

Client IP: CIP   用户请求IP

Director Virutal IP: VIP  

Director IP: DIP

Real Server IP: RIP

 

lvs type(lvs类型):取决于LVS的构建架构

http://www.178linux.com/13570

lvs-nat:修改请求报文的目标IP,多目标IP的DNAT

lvs-dr(direct routing):操纵封装新的MAC地址

lvs-tun(ip tunneling):在原请求IP报文之外新加一个IP首部

lvs-fullnat:修改请求报文的源和目标IP   (同时改变请求报文的源IP和目标IP)

注意:前三种为标准类型;fullnat为后来添加的类型,内核默认可能不支持;

 

lvs-nat:

多目标的DNAT(iptables);它通过修改请求报文的目标IP地址(同时可能会修改目标端口)至挑选出某RS的RIP地址实现转发;

(1) RS应该和DIP应该使用私网地址且RS的网关要指向DIP

    当真实主机响应报文时,源IP是RIP,目标IP是CIP,因为最初的请求者是CIP,但响应报文必然会经过director,因为不经过director就无法把源地址改为VIP,

    因为最初CIP请求是VIP,而不是RIP,因此真实主机上的网关应该指向DIP;

(2) 请求和响应报文都要经由director转发;极高负载的场景中,director可能会成为系统瓶颈;

(3) 支持端口映射,这里响应报文要经过director;

(4) RS可以使用任意OS;

(5) RS的RIP和Director的DIP必须在同一IP网络(因为RIP要指向DIP的网关);

 


lvs-dr: direct routing(大规模场景使用,默认)

它通过修改请求报文的目标MAC地址进行转发;

Director: VIP, DIP

RS: RIP, VIP

(1) 保证前端路由器将目标IP为VIP的请求报文发送给director;

解决方案:

1 静态绑定:把路由器和director进行静态绑定,缺陷是director宕机,那么高可用是不起作用的

2 arptables规则

3 修改RS主机内核的参数(必须是Linux主机)

(2) RS的RIP可以使用私有地址;但也可以使用公网地址;

(3) RS跟Director必须在同一物理网络中(同一个交换机网络上,可以不在同一网段中,因为当director发出arp广播地址请求时,

                                 需要能够正常取得各real server的MAC地址,才能对real server进行调度);

(4) 请求报文经由Director调度,但响应报文一定不能经由Director;

(5) 不支持端口映射;因为客请求的是80,director调度改为8080,real server就会有8080端口响应,会出问题

(6) RS可以大多数OS;

(7) RS的网关不能指向DIP,因为网关指向DIP,那么RS就不能直接把数据包发往CIP了,而dr模型的目标就是让director从响应报文中解脱出来;

dr模型中,director要和RS在同一个物理网络中,中间不能隔路由器,因为中间有路由隔开,arp广播解析就不起作用了,即director和RS都可直接链接在交换机上,各自都有一块网卡。但互联网上的用户都是经过层层路由到达服务器的。

用户的请求被送达到本地某个主机的过程?

互联网上某两个主机通信时,IP是主机到主机的通信,不考虑NAT的话,那么源IP和目标IP是不会改变的,但是中间如果经过多个路由器或网关做转发,报文的二层MAC地址,源MAC和目标MAC都会改变,中间会经过多少了路由,可能MAC就要改变多少次,但是到达最后一个路由和director时,那么源MAC是路由器发出请求报文接口的MAC地址,目标MAC是接收报文的主机的网卡MAC地址,但是源IP和目标IP是不会改变的,假如源IP和目标IP是CIP:VIP,那么路由器如何将报文发送到服务器呢?本地通信靠MAC地址,但是路由器现在只知道目标IP,这是就要转化为本地通信了,就是要在源IP和目标IP上再加一层源MAC和目标MAC,目标MAC是VIP主机所在的MAC,所以接下来路由器就会做arp广播(地址解析协议),因此director就会作回应。

director如何知道RS?

ipvsadm会定义RS集群服务,知道RS的RIP,知道RIP后就会做本地ARP广播,让后找到响应的RS,然后RS收到报文后,才开发现目标IP是VIP,正好本地也有,就会接受下来。

director上配置有VIP和DIP,只有请求报文经由director,响应报文是不会经由director的,ipvsadm会定义RS集群服务。


 


lvs-tun:ip tunneling,ip隧道;

转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原有的IP首部这外再次封装一个IP首部(源IP为DIP,目标IP为RIP);

(1) RIP,DIP,VIP全都是公网地址,

    VIP需要在网络中被请求(路由)到,director跟各real server 可以不在同一机房,甚至同一地域,各real server也可以放置在各个地方,因此real server的RIP      必须是公网地址,在互联网上可以访问到,因此当客户端请求报文发给director时,源IP:CIP,目标IP:VIP,因为报文要通过DIP进行转发,所以DIP必须是公网地址;

(2) RS的网关不能也不可能指向DIP;

(3) 请求报文经由Director调度,但响应报文将直接发给CIP;

(4) 不支持端口映射;

(5) RS的OS必须支持IP隧道功能;

隧道技术的实质是用一种网络层的协议来传输另一种网络层协议,其基本功能是封装和加密,主要利用网络隧道来实现。

最大传输单元(英语:Maximum Transmission Unit,缩写MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。

lvs-fullnat:跨地址部署   https://blog.csdn.net/legend_host/article/details/79006825

full表示source Ip和destination ip同时发生改变

通过同时修改请求报文的源IP地址(cip-->dip)和目标IP地址(vip --> rip)实现转发;

(1) VIP是公网地址;RIP和DIP是私网地址,且可以不在同一IP网络中,但需要通过路由互相通信;

(2) RS收到的请求报文的源IP为DIP,因此其响应报文将发送给DIP,RS的网关无需指向DIP;

(3) 请求报文和响应报文都必须经由director;

(4) 支持端口映射;

(5) RS可使用任意OS;

FULLNAT模式下,LB会对请求包和响应包都做SNAT+DNAT。

无论是DR还是NAT模式,不可避免的都有一个问题:LVS和RS必须在同一个VLAN下,否则LVS无法作为RS的网关。

这引发的两个问题是:
1、同一个VLAN的限制导致运维不方便,跨VLAN的RS无法接入。
2、LVS的水平扩展受到制约。当RS水平扩容时,总有一天其上的单点LVS会成为瓶颈。

Full-NAT由此而生,解决的是LVS和RS跨VLAN的问题,而跨VLAN问题解决后,LVS和RS不再存在VLAN上的从属关系,可以做到多个LVS对应多个RS,解决水平扩容的问题。

(1)、首先client 发送请求package给VIP;
(2)、VIP收到package后,会根据LVS设置的LB算法选择一个合适的realserver,然后把package 的DST IP 修改为realserver IP;把sorce ip 改成lvs集群的LB IP
(3)、realserver 收到这个package后判断dst ip 是自己,就处理这个package ,处理完后把这个包发送给LVS LB IP。
(4)、LVS 收到这个package 后把sorce ip改成VIP的IP,dst ip改成 client ip然后发送给client

FULL NAT 模式的注意事项:
FULL NAT 模式也不需要LBIP和realserver ip在同一个网段;
full nat 跟nat相比的优点是:保证RS回包一定能够回到LVS;因为源地址就是LVS-->不确定
full nat 因为要更新sorce ip所以性能正常比nat模式下降10%

FULLNAT模式的特点:
• LB完全作为一个代理服务器
  FULLNAT下,客户端感知不到RS,RS也感知不到客户端,它们都只能看到LB。此种模式和七层负载均衡有点相似,只不过不会去解析应用层协议,而是在TCP层将消息转发

• LB和RS对于组网结构没有要求
  不同于NAT和DR要求LB和RS位于一个子网,FULLNAT对于组网结构没有要求。只需要保证客户端和LB、LB和RS之间网络互通即可。

 

 

原文地址:https://www.cnblogs.com/hanshanxiaoheshang/p/9599562.html