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之间网络互通即可。
1-2、LVS之Linux集群系统基础的更多相关文章
- Linux服务器集群系统(LVS)
from:http://www.linuxvirtualserver.org/zh/lvs1.html#5 本文介绍了Linux服务器集群系统--LVS(Linux Virtual Server)项目 ...
- 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群
高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...
- Linux服务器集群系统(一)--转
引用地址:http://www.linuxvirtualserver.org/zh/lvs1.html LVS项目介绍 章文嵩 (wensong@linux-vs.org)2002 年 3 月 本文介 ...
- Linux服务器集群系统(一)(转)
add by zhj:虽然是2002年的文章,但读来还是收益良多.在 章文嵩:谈LVS及阿里开源背后的精彩故事 中LVS发起人及主要贡献者谈了LVS的开发过程及阿里开源的一些故事 原文:http:// ...
- Linux服务器集群系统(一)
Reference: http://www.linuxvirtualserver.org/zh/lvs1.html LVS项目介绍 章文嵩 (wensong@linux-vs.org)2002 年 3 ...
- 官方文档-Linux服务器集群系统(一)
转载-Linux服务器集群系统(一) LVS项目介绍 章文嵩 (wensong@linux-vs.org)2002 年 3 月 本文介绍了Linux服务器集群系统--LVS(Linux Virtual ...
- 实现基于LVS负载均衡集群的电商网站架构
背景 上一期我们搭建了小米网站,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法 ...
- 转载-lvs官方文档-Linux服务器集群系统(二)
Linux服务器集群系统(二) LVS集群的体系结构 章文嵩 (wensong@linux-vs.org) 2002 年 4 月 本文主要介绍了LVS集群的体系结构.先给出LVS集群的通用体系结构,并 ...
- 通过LVS+Keepalived搭建高可用的负载均衡集群系统
1. 安装LVS软件 (1)安装前准备操作系统:统一采用Centos6.5版本,地址规划如下: 服务器名 IP地址 网关 虚拟设备名 虚拟ip Director Server 192.168 ...
随机推荐
- python 某个目录下的所有文件列表
使用os.listdir() 函数来获取某个目录中的文件列表 import os names = os.listdir('somedir') 结果会返回目录中所有文件列表,包括所有文件,子目录,符号链 ...
- numpy高级应用
reshape重塑数组 ravel 拉平数组 concatenate 最一般化的连接,沿一条轴连接一组数组 # print(np.concatenate([arr1,arr2],axis = 0)) ...
- windows环境下 curl 安装和使用
curl下载地址:https://curl.haxx.se/download.html,拉到页面最底下,选择红色选中的那个CAB的进行下载,如下图所示: 下载完成后,解压. 解决windows控制台c ...
- 3、CentOS 6.5系统安装配置Tomcat 8详细过程
安装环境:CentOS-6.5 安装方式:源码安装 软件:apache-tomcat-8.0.0.RC3.tar.gz 安装前提 安装tomcat 将apache-tomcat-8.0.0.RC3.t ...
- php中生成标准uuid(guid)的方法
);// "}" return $uuid; }}echo guid();?>
- flask框架----flask中的wtforms使用
一.简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 二.简单使用wtfo ...
- ID3和C4.5分类决策树算法 - 数据挖掘算法(7)
(2017-05-18 银河统计) 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来判断其可行性的决策分析方法,是直观运用概率分析的一种图解法.由于这种决策分支画 ...
- MyEclipse如何修改XML文件默认打开的编辑器
1.MyEclipse如何修改XML文件默认打开的编辑器 Windows--->Preferences--->General--->Editors--->File Associ ...
- ES6知识整理(5)--对象的扩展
个人开这个公众号的初心是为了积累知识,因此并没有做什么推广,再说自己也不知道怎么推广,推广之后又能干些什么.已经将近10天没发文章了,虽然每天都加班,但也不会一点时间都没有,有时还是会懒癌发作不想学习 ...
- nginx的gzip压缩功能
我们在开发网站的时候,应该要考虑到pv,因为pv比较大可能会造成服务器带宽不够用,进而导致用户体验变差. 这个时候我们就可以考虑用nginx的gzip功能. 在nginx中开启gzip压缩功能很简单, ...