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

时间:2022-09-08 19:18:46
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

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

将来自于一个主机的很多请求分发到不同的主机,只要目标不同,但二层分发设备只能基于目标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之间网络互通即可。
 

1-2、LVS之Linux集群系统基础的更多相关文章

  1. Linux服务器集群系统(LVS)

    from:http://www.linuxvirtualserver.org/zh/lvs1.html#5 本文介绍了Linux服务器集群系统--LVS(Linux Virtual Server)项目 ...

  2. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

  3. Linux服务器集群系统(一)--转

    引用地址:http://www.linuxvirtualserver.org/zh/lvs1.html LVS项目介绍 章文嵩 (wensong@linux-vs.org)2002 年 3 月 本文介 ...

  4. Linux服务器集群系统&lpar;一&rpar;(转)

    add by zhj:虽然是2002年的文章,但读来还是收益良多.在 章文嵩:谈LVS及阿里开源背后的精彩故事 中LVS发起人及主要贡献者谈了LVS的开发过程及阿里开源的一些故事 原文:http:// ...

  5. Linux服务器集群系统(一)

    Reference: http://www.linuxvirtualserver.org/zh/lvs1.html LVS项目介绍 章文嵩 (wensong@linux-vs.org)2002 年 3 ...

  6. 官方文档-Linux服务器集群系统(一)

    转载-Linux服务器集群系统(一) LVS项目介绍 章文嵩 (wensong@linux-vs.org)2002 年 3 月 本文介绍了Linux服务器集群系统--LVS(Linux Virtual ...

  7. 实现基于LVS负载均衡集群的电商网站架构

    背景 上一期我们搭建了小米网站,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法 ...

  8. 转载-lvs官方文档-Linux服务器集群系统(二)

    Linux服务器集群系统(二) LVS集群的体系结构 章文嵩 (wensong@linux-vs.org) 2002 年 4 月 本文主要介绍了LVS集群的体系结构.先给出LVS集群的通用体系结构,并 ...

  9. 通过LVS&plus;Keepalived搭建高可用的负载均衡集群系统

    1. 安装LVS软件      (1)安装前准备操作系统:统一采用Centos6.5版本,地址规划如下: 服务器名 IP地址 网关 虚拟设备名 虚拟ip Director Server 192.168 ...

随机推荐

  1. &lbrack;LeetCode&rsqb; Longest Absolute File Path 最长的绝对文件路径

    Suppose we abstract our file system by a string in the following manner: The string "dir\n\tsub ...

  2. Memcached使用

    一.Memcached简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网 ...

  3. 从app里跳到appstore评论页面的实现

    // 如果要实现在应用里面跳到appstore的对应评论页面里面的话,只要将下面地址中App_ID替换成自己的id就可以了,其他的地方都不用管. // 如果要用Safari浏览器做实验的话可以将地址中 ...

  4. git bash【初级入门篇】

    最近公司打算使用git代替之前的svn版本控制工具,趁此机会打算好好学学git,这个号称当今世界最牛的分布式版本控制工具. 一.[git和svn的主要区别] 1.去中心化 svn以及微软的TFS均采用 ...

  5. NPOI扩展--判断指定单元格是否为合并单元格和输出该单元格的行列跨度&lpar;维度&rpar;

    因工作需要用到跨合并单元格获取数据,所以写了个NPOI扩展类. 主要方法如下: 1.判断指定行/列索引(单元格)是否为合并单元格. 2.获取指定列索引的实际含有数据的单元格. 3.返回指定行/列索引的 ...

  6. nacos 使用记

    本文记录SpringBoot和SpringCloud与Nacos作为配置中心的整合过程及问题 Nacos官方使用文档:https://nacos.io/zh-cn/docs/what-is-nacos ...

  7. HDU4625 JZPTREE 【树形DP】【第二类斯特林数】

    题目大意: 对1到n求题目中描述的那个式子. 题目分析: 幂不好处理,转化为斯特林数. 根据$ n^k= \sum_ { i=0 }^k S(k,i)×i!×C(n,i) $. 我们可以将问题转化为对 ...

  8. &period;net core Jenkins持续集成Linux、Docker、K8S

    jenkins插件 系统管理 -> 管理插件,安装如下插件. #如果搜索不到去掉Plugin在搜索 GitLab Plugin Gitlab Hook Plugin #使用Gitlab账号做用户 ...

  9. 51Nod 1069 Nim游戏 (位运算)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1069 有N堆石子.A B两个人轮流拿,A先拿.每次只能从一堆 ...

  10. JS DOM节点

    html代码: <body onload ="loaded12()"> <form name="form1" action="htt ...