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之间网络互通即可。
 

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服务器集群系统(一)(转)

    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+Keepalived搭建高可用的负载均衡集群系统

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

随机推荐

  1. 集合运算—union(并集)、intersect(交集)和except(差集)

    一.集合运算的基本格式是: 集合查询1 <集合运算> 集合查询2 [order by ...] 二.集合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐 ...

  2. 区块链3.0 ada Cardano卡尔达诺如何获得一致好评?

    区块链3.0 ada Cardano卡尔达诺如何获得一致好评? EOS 的直接竞争对手是以太坊.文章介绍的卡尔达诺(Cardano)的目标就更加远大了,他要同时锁定比特币和以太坊.但大家去网上搜索卡尔 ...

  3. es6基本语法

    //let和const申明变量和常量 //作用域只限于当前代码块 //使用let申明的变量作用域不会提升 //在相同的作用域下不能申明相同的变量 //for循环体现let的父子作用域 二.es6的解构 ...

  4. Caddy – 方便够用的 HTTPS server 新手教程

    最近发现了一个 golang 开发的 HTTP server,叫做 Caddy,它配置起来十分简便,甚至可以 28 秒配置好一个支持 http2 的 server ,而且对各种 http 新特性都支持 ...

  5. MySql安装和基本管理

    一.什么是数据库? mysql就是一个基于socket编写的C/S架构的软件 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流 ...

  6. OpenStack平台上,windows云主机可以ping通百度但是无法打开网页,部分其它网页可以打开

    问题描述: 在OpenStack平台上的64位Windows7虚拟机,可以ping通百度,但是却无法打开百度网页. 于是,笔者又对其它网址进行的测试,发现淘宝.京东.携程部分网页可以打开,而新浪等等网 ...

  7. 八大排序算法之七—堆排序(Heap Sort)

    堆排序是一种树形选择排序,是对直接选择排序的有效改进. 基本思想: 堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足 时称之为堆.由堆的定义可以看出,堆顶元素(即第一个元素) ...

  8. Spring/SpringMVC/MyBatis(持久层、业务层、控制层思路小结)

    准备工作: ## 7 导入省市区数据到数据库中 1. 从FTP下载SQL脚本文件 2. 把脚本文件移动到易于描述绝对路径的位置 3. 进入MySQL控制台 4. 使用`xxx_xxx`数据库 5. 运 ...

  9. P3380 【模板】二逼平衡树(树套树)(线段树套平衡树)

    P3380 [模板]二逼平衡树(树套树) 前置芝士 P3369 [模板]普通平衡树 线段树套平衡树 这里写的是线段树+splay(不吸氧竟然卡过了) 对线段树的每个节点都维护一颗平衡树 每次把给定区间 ...

  10. 【题解】Luogu CF915E Physical Education Lessons

    原题传送门:CF915E Physical Education Lessons 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 这道题很简单啊 每个操作就是区间赋值,顺带把总和修 ...