linux学习第十二周总结(代码片段)

author author     2022-12-13     635

关键词:

linux学习第十二周总结

本周学习两个内容 Linux防火墙和企业级调度LVS

一、Linux防火墙

一、防火墙的分类

(一)、包过滤防火墙。
数据包过滤(packet Filtering)技术是在网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,称为访问控制表(access control lable,ACL)。通过检查数据流中每个数据包的源地址和目的地址,所用的端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过。
包过滤防火墙的优点是它对用户来说是透明的,处理速度快且易于维护。缺点是:非法访问一旦突破防火墙,即可对主机上的软件和配置漏洞进行***;数据包的源 地址、目的地址和IP的端口号都在数据包的头部,可以很轻易地伪造。“IP地址欺骗”是***针对该类型防火墙比较常用的***手段。

(二)、代理服务型防火墙
代理服务(proxy service)也称链路级网关或TCP通道。它是针对数据包过滤和应用网关技术存在的缺点而引入的防火墙技术,其特点是将所有跨跃防火墙的网络通信链路 分为两段。当代理服务器接收到用户对某个站点的访问请求后就会检查请求是否符合控制规则。如果规则允许用户访问该站点,代理服务器就会替用户去那个站点取 回所需的信息,再转发给用户,内外网用户的访问都是通过代理服务器上的“链接”来实现的,从而起到隔离防火墙内外计算机系统的作用。
此外,代理服务也对过往的数据包进行分析和注册登记,并形成报告,同时当发现有被***迹象时会向网络管理员发出警告,并保留***记录,为证据收集和网络维护提供帮助。

二、防火墙的工作原理
(一)、包过滤防火墙的工作原理
包过滤是在IP层实现的,因此,它可以只用路由器来完成。包过滤根据包的源IP地址、目的IP地址、源端口、目的端口及包传递方向等报头信息来判断是否允 许包通过,过滤用户定义的内容,如IP地址。其工作原理是系统在网络层检查数据包,与应用层无关。包过滤器的应用非常广泛,因为CPU用来处理包过滤的时 间可以忽略不计。而且这种防护措施对用户透明,合法用户在进出网络时,根本感觉不到它的存在,使用起来很方便。这样系统就具有很好的传输性能,易扩展。
但是这种防火墙不×××全,因为系统对应用层信息无感知--也就是说,它们不理解通信的内容,不能在用户级别上进行过滤,即不能识别不同的用户和防止地址的 盗用。如果***者把自己主机的IP地址设成一个合法主机的IP地址,就可以很轻易地通过包过滤器,这样更容易被***攻破。基于这种工作机制,包过滤防火墙 有以下缺陷:
1、通信信息:包过滤防火墙只能访问部分数据包的头信息。
2、通信和应用状态信息:包过滤防火墙是无状态的,所以它不可能保存来自于通信和应用的状态信息。
3、信息处理:包过滤防火墙处理信息的能力是有限的。

(二)、代理服务型防火墙工作原理
代理服务型防火墙在应用层上实现防火墙功能。它能提供部分与传输有关的状态,能外圈提供与应用相关的状态和部分传输的信息,它还能处理和管理信息。

三、使用iptables实现包过滤防火墙

(一)、iptables概述及原理
从内核2.4之后使用全新的内核包过虑管理工具--iptables,这个工具使用户更易于理解其工作原理,更容易被使用,也具有更强大的功能。
iptables只是一个管理内核包过滤的工具,可以加入、插入或删除核心包过滤表格(链)中的规则。实际上真正执行这些过滤规则的是netfilter(linux核心中一个通用架构)及其相关模块(如iptables模块和nat模块)。
netfilter是linux核心中一个通用架构,它提供一系列的“表”(tables),每个表由若干“链”(chains)组成,而每条链中可以由一条或数条规则(rule)组成。可以这样理解,netfilter是表的容器,表是链的容器,链是规则的容器。
系统缺省的表为“filter”,该表中包含了INPUT、FORWARD和OUTPUT 3个链。每一条链中可以有一条或数条规则,每一条规则都是这样定义的:“如果数据包头符合这样的条件,就这样处理这个数据包”。当一个数据包到达一个链 时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件,如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条 规则;最后,如果数据包不符合该链中任何一条规则,系统就会根据该链预先定义的策略(policy)来处理该数据包。

(二)、iptables传输数据包的过程
当数据包进入系统时,系统首先根据路由表决定将数据包发给哪一条链,则可能有以下3种情况:
1、数据包的目的地址是本机,则系统将数据包送往INPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没有通过规则检查,系统将丢弃该包。
2、数据包的上的地址不是本机,也就是说这个包将被转发,则系统将数据包送往FORWARD链,如果通过规则检查,该包被发给相应的本地进程处理;如果没有通过规则检查,系统将丢弃该包。
3、数据包是由本地系统进程产生的,则系统将其送往OUTPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没有通过规则检查,系统将丢弃该包。
用户可以给各链定义规则,当数据包到达其中的每一条链,iptables就会根据链中定义的规则来处理这个包。iptables将数据包的头信息与它所传 递到的链中的每条规则进行比较,看它是否和每条规则完全匹配。如果数据包与某条规则匹配,iptables就对该数据包执行由该规则指定的操作。例如某条 链中的规则决定要丢弃(DROP)数据包,数据包就会在该链处丢弃;如果链中规则接受(ACCEPT)数据包,数据包就可以继续前进;但是,如果数据包与 这条规则不匹配,那么它将与链中的下一条规则进行比较。如果该数据包不符合该链中的任何一条规则,那么iptables将根据该链预先定义的默认策略来决 定如何处理该数据包,理想的默认策略应该告诉iptables丢弃(DROP)该数据包。

(三)、iptables的优点
netfilter/iptables的最大优点是它可以配置有状态的防火墙,这是ipfwadm和ipchains等以前的工具都无法提供的一种重要功 能。有状态的防火墙能够指定并记住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的连接跟踪状态获得该信息。在决定新的信息包过滤时,防火墙 所使用的这些状态信息可以增加其效率和速度。这里有4种有效状态,名称分别为ESTABLISHED、INVALID、NEW和RELATED。
状态ESTABLISHED指出该信息包属于已经建立的连接,该连接一直用于发送和接收信息包并且完全有效。INVALID状态指出该信息包与任何已知的 流或连接都不相关联,它可能包含错误的数据或头。状态NEW表示该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。最 后,RELATED表示该信息包正在启动新连接,以及它与已建立的连接想关联。
netflter/iptables的另一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。可以定制自己的规则来满足特定需求,从而只允许想要的网络流量进入系统。

(四)、iptables的基础知识
1、规则(rule)
规则(rule)就是网络管理员预定的条件,规则一般定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表 中,这些规则分别指定了源地址、目的地址、传输协议(TCP、UDP、ICMP)和服务类型(如HTTP、FTP、SMTP)。当数据包与规则匹配 时,iptables就根据规则所定义的方法来处理这些数据包,如放行(ACCEPT)、拒绝(REJECT)、或丢弃(DROP)等。配置防火墙的主要 规则就是添加、修改和删除这些规则。
2、链(chains)
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链 时,iptables就会从链中的第一条规则开始检查,看该数据包是否满足规则所定义的条件,如果满足,系统就会根据该条规则所定义的方法处理该数据包, 否则iptables将继续检查下一条规则。如果该数据包不符合链中任何一何况规则,iptables就会根据该链预先定义的默认策略来处理该数据包。
3、表(tables)
表(tables)提供特定的功能,iptables内置3个表,即filter表、nat表和mangle表,分别用于实现包过滤,网络地址转换和包重构的功能。
(1)filter表。filter表主要用于过滤数据包,该表根据系统管理员预定义的一组规则过滤符合条件的数据包。对防火墙而言,主要利用filter表中指定一系列规则来实现对数据包进行过滤操作。
filter表是iptables默认的表,如果没有指定使用哪个表,iptables就默认使用filter表来执行所有的命令。filter表包含了 INPUT链(处理进入的数据包)、FORWARD链(处理转发的数据包)和OUTPUT链(处理本地生成的数据包)。在filter表中只允许对数据包 进行接受或丢弃的操作,而无法对数据包进行更改。
(2)nat表。nat青主要用于网络地址转换NAT,该表可以实现一对一、一对多和多对多的NAT工作,iptables就是使用该表实现共享上网功能 的。nat表包含了PREROUTING链(修改即将到来的数据包)、OUTPUT链(修改在路由之前本地生成的数据包)和POSTROUTING链(修 改即将出去的数据包)。
(3)mangle表。mangle表主要用于对指定的包进行修改,因为某些特殊应用可能去改写数据包的一些传输特性,例如理性数据包的TTL和TOS等,不过在实际应用中该表的使用率不高。

(五)、关闭系统防火墙
由于系统的防火墙功能也是使用iptables实现的,如果用户在系统的iptables之上设置规则,很容易发生冲突,所以在进行iptables学习之前,建议关闭系统的防火墙功能。

(六)、iptables命令格式
iptables的命令格式较为复杂,一般格式如下:
#iptables [-t 表] -命令 匹配 操作
注:iptables对所有选项和参数都区分大小写!
1、表选项
表选项用于指定命令应用于哪个iptables内置表。iptables内置表包括filter表、nat表和mangle表。
2、命令选项
命令选项用于指定iptables的执行方式,包括插入规则、删除规则和添加规则等:
-P 或--policy 定义默认策略
-L 或--list 查看iptables规则列表
-A 或--append 在规则列表的最后增加一条规则
-I 或--insert 在指定的位置插入一条规则
-D 或--delete 在规则列表中删除一条规则
-R 或--replace 替换规则列表中的某条规则
-F 或--flush 删除表中的所有规则
-Z 或--zero 将表中所有链的计数和流量计数器都清零
3、匹配选项
匹配选项指定数据包与规则匹配所应具有的特征,包括源地址、目的地址、传输协议(如TCP、UDP、ICMP)和端口号(如80、21、110)等:
-i 或--in-interface 指定数据包是从哪个网络接口进入
-o 或--out-interface 指定数据包是从哪个网络接口输出
-p 或--porto 指定数据包匹配的协议,如TCP、UDP
-s 或--source 指定数据包匹配的源地址
--sport 指定数据包匹配的源端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口
-d 或--destination 指定数据包匹配的目标地址
--dport 指定数据包匹配的目标端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口
4、动作选项
动作选项指定当数据包与规则匹配时,应该做什么操作,如接受或丢弃等。
ACCEPT 接受数据包
DROP 丢弃数据包
REDIRECT 将数据包重新转向本机或另一台主机的某个端口,通常用此功能实现透明代理或对外开放内网的某些服务
SNAT 源地址转换,即改变数据包的源地址
DNAT 目标地址转换,即改变数据包的目的地址
MASQUERADE IP伪装,即常说的NAT技术。MASQUERADE只能用于ADSL等拨号上网的IP伪装,也就是主机的IP地址是由ISP动态分配的;如果主机的IP地址是静态固定的,就要使用SNAT
LOG 日志功能,将符合规则的数据包的相关信息记录在日志中,以便管理员进行分析和排错

(七)、iptables命令的使用
1、查看iptables规则
初始的iptables没有规则,但是如果在安装时选择自动安装防火墙,系统中会有默认的规则存在,可以先查看默认的防火墙规则:
#iptables [-t 表名]
[-t 表名]:定义查看哪个表的规则列表,表名可以使用filter、nat和mangle,如果没有定论表名,默认使用fliter表
:列出指定表和指定链的规则
:定义查看指定表中哪个链的规则,如果不指明哪个链,将查看某个表中所有链的规则
#iptables -L -n (查看filter表所有链的规则)
注:在最后添加-n参数,可以不进行IP与HOSTNAME的转换,显示的速度会快很多。
#iptables -t nat -L OUTPUT (查看nat表OUTPUT链的规则)
2、定义默认策略
当数据包不符合链中任何一条规则时,iptables将根据该链默认策略来处理数据包,默认策略的定义方法如下
#iptables [-t 表名]
[-t 表名]:定义查看哪个表的规则,表名可以使用filter、nat和mangle,如果没有宝,默认使用filter表
:定义默认策略
:定义查看指定表中哪个链的规则,如果不指明,将查看某个表中所有链的规则
:处理数据包的动作,可以使用ACCEPT(接受)和DROP(丢弃)
#iptables -P INPUT ACCEPT (将filter表INPUT链的默认策略定义为接受)
#iptables -t nat -P OUTPUT DROP (将nat表OUTPUT链的默认策略定义为丢弃)
创建一个最简单的规则范例。对于没有经验和时间的用户而言,设置一个简单而又实用的规则是必要的,最基本的原则是“先拒绝所有数据包,然后再允许需要的数 据包”,也就是说通常为filter表的链定义。一般都将INPUT定义为DROP,这样就可以阻止任何数据包进入,其他项目定义为ACCEPT,这样对 外发送的数据就可以出去。
#iptables -P INPUT DROP
#iptables -P FORWARD ACCEPT
#iptables -P OUTPUT ACCEPT
3、增加、插入、删除和替换规则
#iptables [-t 表名] 链名 [规则编号] [-i | o 网卡] [-p 协议类型] [-s 源IP | 源子网] [--sport 源端口号] [-d 目标IP | 目标子网] [--dport 目标端口号]
[-t 表名]:定义查看哪个表的规则,表名可以使用filter、nat和mangle,如果没有定义,默认使用filter表
-A:新增一条规则,该规则将增加到规则列表的最后一行,该参数不能使用规则编号
-I:插入一条规则,原来该位置上的规则就会身后顺序移动,如果没有指定规则编号,则在第一条规则前插入
-D:删除一条规则,可以输入完整规则,或直接指定规则编号
-R:替换某条规则,规则被替换并不会改变顺序,必须要指定替换的规则编号
:指定查看指定表中某条链的规则,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT、POSTROUTIN
[规则编号]:规则编号是在插入、删除和替换规则时用,编号是按照规则列表的顺序排列,第一条规则编号为1
[-i | o 网卡名称]:i是指数据包从哪块网卡输入,o是批数据包从哪块网卡输出
[-p 协议类型]:可以指定规则应用的协议,包含TCP、UDP、ICMP等
[-s 源IP | 源子网]:数据包的源IP或子网
[--sport 源端口号]:数据包的源端口号
[-d 目标IP | 目标子网]:数据包的目标IP或子网
[--dport 目标端口号]:数据包的目标端口号
:处理数据包的动作
#iptables -A INPUT -i lo -j ACCEPT (追加一条规则,接受所有来自lo接口的数据包)
#iptables -A INPUT -s 192.168.0.44 -j ACCEPT (追加一条规则,接受所有来自192.168.0.44的数据包)
#iptables -A INPUT -s 192.168.0.44 -j DROP (追加一条规则,丢弃所有来自192.168.0.44的数据包)
注:iptables的按照顺序读取规则的,如果两条规则冲突,以排在前面的规则为准。
#iptables -I INPUT 3 -s 192.168.1.0/24 -j DROP (在INPUT链中的第3条规则前插入一条规则,丢弃所有来自192.168.1.0/24的数据包)
注:-I参数如果没有指定插入的位置,将插入到所有规则的最前面
#iptables -D INPUT 2 (删除filter表中INPUT链中的第2条规则)
#iptables -R INPUT 2 -s 192.168.10.0/24 -p tcp --dport 80 -j DROP (替换filter表INPUT链中第2条规则为,禁止192.168.10.0/24访问TCP的80端口)
4、清除规则和计数器
在新建规则时,往往需要清除原有的或旧的规则,以免影响新规则。如果规则较多,逐条删除比较麻烦,可以使用清除规则参数快速删除所有规则。
#iptables [-t 表名]
[-t 表名]:指定策略将应用于哪个表,可以使用filter、nat和mangle,如果没有指定,默认为filter表
-F:删除指定表中所有规则
-Z:将指定表中数据包计数器和流量计数器归零
#iptables -Z (将filter表中数据包计数器和流量计数器请零)
#iptables -F (删除filter表中的所有规则)
5、记录与恢复防火墙规则
可以使用记录与恢复防火墙规则命令,将现有防火墙机制复制下来,在需要恢复时直接恢复即可。
#iptables-save > 文件名 (记录当前防火墙规则)
#iptables-restore > 文件名 (将防火墙规则恢复到当前主机环境)

三、企业级调度LVS

Cluster概念

Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务

Scale Out:水平扩展,向外扩展,增加设备,并行地运行多个服务调度分配问题,Cluster

Cluster:集群,为解决某个特定问题将多台计算机组合起来形成的单个系统

Linux Cluster类型:
LB:Load Balancing,负载均衡
HA:High Availiablity,高可用,SPOF(single Point Of failure)
MTBF:Mean Time Between Failure 平均无故障时间
MTTR:Mean Time To Restoration( repair)平均恢复前时间
A=MTBF/(MTBF+MTTR) (0,1):99%, 99.5%, 99.9%, 99.99%, 99.999%
HPC:High-performance computing,高性能 www.top500.org

分布式系统:
分布式存储:云盘
分布式计算:hadoop,Spark

集群:同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的

分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务

分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

对于大型网站,访问用户很多,实现一个群集,在前面放一个均衡服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成,并且一台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败

集群设计原则
可扩展性—集群的横向扩展能力
可用性—无故障时间(SLA)
性能—访问响应时间
容量—单位时间内的最大并发吞吐量(C10K 并发问题)

基础设施层面:
提升硬件资源性能—从入口防火墙到后端web server均使用更高性能的硬件资源
多域名—DNS 轮询A记录解析
多入口—将A记录解析到多个公网IP入口
多机房—同城+异地容灾
CDN(Content Delivery Network)—基于GSLB(Global Server Load Balance)实现全局负载均衡,如DNS

业务层面:
分层:安全层、负载层、静态层、动态层、(缓存层、存储层)持久化与非持久化
分割:基于功能分割大业务为小服务
分布式:对于特殊场景的业务,使用分布式计算

Cluster分类
LB Cluster的实现

硬件

F5 Big-IP
Citrix Netscaler
A10 A10

软件

lvs:Linux Virtual Server,阿里四层SLB (Server Load Balance)使用
nginx:支持七层调度,阿里七层SLB使用Tengine
haproxy:支持七层调度
ats:Apache Traffic Server,yahoo捐助给apache
perlbal:Perl 编写
pound

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

传输层(通用):DPORT
LVS:
    nginx:stream
    haproxy:mode tcp

应用层(专用):针对特定协议,自定义的请求模型分类
    roxy server:
        http:nginx, httpd, haproxy(mode http), ...
        fastcgi:nginx, httpd, ...
        mysql:mysql-proxy, ...

会话保持:负载均衡

(1) session sticky:同一用户调度固定服务器
Source IP:LVS sh算法(对某一特定服务而言)
Cookie
(2) session replication:每台服务器拥有全部session
session multicast cluster
(3) session server:专门的session服务器
Memcached,Redis

LVS介绍
LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩(花名 正明)
官网:http://www.linuxvirtualserver.org/
VS: Virtual Server,负责调度
RS: Real Server,负责真正提供服务
L4:四层路由器或交换机
阿里的四层LSB(Server Load Balance)是基于LVS+keepalived实现

工作原理:
VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS

iptables/netfilter:

iptables:用户空间的管理工具
netfilter:内核空间上的框架
流入:PREROUTING --> INPUT
流出:OUTPUT --> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
DNAT:目标地址转换; PREROUTING

lvs集群类型中的术语:

VS:Virtual Server,Director Server(DS)
    Dispatcher(调度器),Load Balancer
RS:Real Server(lvs), upstream server(nginx)

backend server(haproxy)
    CIP:Client IP
    VIP: Virtual serve IP VS外网的IP
    DIP: Director IP VS内网的IP
    RIP: Real server IP
访问流程:CIP <--> VIP == DIP <--> RIP

lvs: ipvsadm/ipvs

ipvsadm:用户空间的命令行工具,规则管理器
    用于管理集群服务及RealServer
ipvs:工作于内核空间netfilter的INPUT钩子上的框架

lvs集群的类型:

lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
lvs-dr:操纵封装新的MAC地址
lvs-tun:在原请求IP报文之外新加一个IP首部
lvs-fullnat:修改请求报文的源和目标IP

lvs-nat:
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统

LVS-DR模式

LVS-DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

(1) Director和各RS都配置有VIP
(2) 确保前端路由器将目标IP为VIP的请求报文发往Director
在前端网关做静态绑定VIP和Director的MAC地址
在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
在RS上修改内核参数以限制arp通告及应答级别
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce
(3)RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
(4)RS和Director要在同一个物理网络
(5)请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
(6)不支持端口映射(端口不能修败)
(7)RS可使用大多数OS系统

lvs-tun模式

转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)

(1) DIP, VIP, RIP都应该是公网地址
(2) RS的网关一般不能指向DIP
(3) 请求报文要经由Director,但响应不经由Director
(4) 不支持端口映射
(5) RS的OS须支持隧道功能

lvs-fullnat模式

lvs-fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP --> DIP
VIP --> RIP

(1) VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
(2) RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
(3) 请求和响应报文都经由Director
(4) 支持端口映射
注意:此类型kernel默认不支持

LVS工作模式总结

lvs-nat与lvs-fullnat:请求和响应报文都经由Director
lvs-nat:RIP的网关要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信

lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

ipvs scheduler

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
两种:静态方法和动态方法

静态方法:仅根据算法本身进行调度
1、RR:roundrobin,轮询
2、WRR:Weighted RR,加权轮询
3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度

1、LC:least connections 适用于长连接应用
Overhead=activeconns*256+inactiveconns
2、WLC:Weighted LC,默认调度方法
Overhead=(activeconns*256+inactiveconns)/weight
3、SED:Shortest Expection Delay,初始连接高权重优先
Overhead=(activeconns+1)*256/weight
4、NQ:Never Queue,第一轮均匀分配,后续SED
5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS

ipvsadm包构成

ipvsadm:
程序包:ipvsadm
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config

ipvsadm命令:

核心功能:
集群服务管理:增、删、改
集群服务的RS管理:增、删、改
查看

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
ipvsadm -D -t|u|f service-address 删除
ipvsadm –C 清空
ipvsadm –R 重载
ipvsadm -S [-n] 保存
ipvsadm -a|e -t|u|f service-address -r server-address [options]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]

管理集群服务:增、改、删

增、改:
    ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
删除:
    ipvsadm -D -t|u|f service-address
service-address:
    -t|u|f:
        -t: TCP协议的端口,VIP:TCP_PORT
        -u: UDP协议的端口,VIP:UDP_PORT
        -f:firewall MARK,标记,一个数字
[-s scheduler]:指定集群的调度算法,默认为wlc

管理集群上的RS:增、改、删

增、改:ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
删:ipvsadm -d -t|u|f service-address -r server-address
server-address:
    rip[:port] 如省略port,不作端口映射
选项:
lvs类型:
    -g: gateway, dr类型,默认
    -i: ipip, tun类型
    -m: masquerade, nat类型
    -w weight:权重
清空定义的所有内容:ipvsadm –C
清空计数器:ipvsadm -Z [-t|u|f service-address]
查看:ipvsadm -L|l [options]
    --numeric, -n:以数字形式输出地址和端口号
    --exact:扩展信息,精确值
    --connection,-c:当前IPVS连接输出
    --stats:统计信息
    --rate :输出速率信息
ipvs规则:/proc/net/ip_vs
ipvs连接:/proc/net/ip_vs_conn

保存及重载规则

保存:建议保存至/etc/sysconfig/ipvsadm
    ipvsadm-save > /PATH/TO/IPVSADM_FILE
    ipvsadm -S > /PATH/TO/IPVSADM_FILE
    systemctl stop ipvsadm.service
重载:
    ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
    ipvsadm -R < /PATH/FROM/IPVSADM_FILE
    systemctl restart ipvsadm.service

LVS

负载均衡集群设计时要注意的问题
(1) 是否需要会话保持
(2) 是否需要共享存储
共享存储:NAS, SAN, DS(分布式存储)
数据同步:
lvs-nat:
设计要点:
(1) RIP与DIP在同一IP网络, RIP的网关要指向DIP
(2) 支持端口映射
(3) Director要打开核心转发功能

LVS-DR

DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:
(1) 在前端网关做静态绑定
(2) 在各RS使用arptables
(3) 在各RS修改内核参数,来限制arp响应和通告的级别
?限制响应级别:arp_ignore
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
1: 仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别:arp_announce
0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告

201771010111李瑞红《第十二周学习总结》(代码片段)

实验十二 图形程序设计实验时间2018-11-14第一部分:理论知识总结1.Java的抽象口工具箱(AbstractWindowToolkit,AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类。2.AWT库处理用户界面元素的方法:把图形元素的创... 查看详情

201771010134杨其菊《面向对象程序设计java》第十二周学习总结(代码片段)

 第十二周学习总结 第一部分:理论知识     内容概要: AWT与Swing简介;框架的创建;图形程序设计; 显示图像;1.AWT组件:2.Swing组件层次关系3.AWT与Swing的关系:大部分AWT组件都有其Swing的等价组... 查看详情

王颖奇20171010129《面向对象程序设计(java)》第十二周学习总结(代码片段)

...ing简介10.2框架的创建10.3图形程序设计10.4显示图像(具体学习总结在最后)实验:实验时间 2018-11-141、实验目的与要求(1) 掌握Java GUI中框架创建及属性设置中常用类的API;(2) 掌握Java GUI中2D图形绘制常用类的API... 查看详情

王之泰201771010131《面向对象程序设计(java)》第十二周学习总结(代码片段)

第一部分:理论知识学习部分第10章图形程序设计10.1AWT与Swing简介1.用户界面(UserInterface)的概念:用户与计算机系统(各种程序)交互的接口2.图形用户界面(GraphicalUserInterface)的概念:以图形方式呈现的用户界面3.AWT:a.Java的抽象窗... 查看详情

徐思201771010132《面向对象程序设计(java)》第十二周学习总结(代码片段)

一、理论知识部分Java的抽象窗口工具箱(AbstractWindowToolkit,AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类。大部分AWT组件都有其Swing的等价组件,Swing组件的名字一般是在AWT组件名前面添加一个字母“J”。通... 查看详情

李晓菁201771010114《面向对象程序设计(java)》第十二周学习总结(代码片段)

一:理论部分1.(1)用户界面(UserInterface)用户与计算机系统(各种程序)交互的接口(2)图形用户界面(GraphicalUserInterface)以图形方式呈现的用户界面2.AWT:Java的抽象窗口工具箱(AbstractWindowToolkit,AWT)包含在java.awt包中,它提供了许多... 查看详情

201771010112罗松《面向对象程序设计(java)》第十二周学习总结(代码片段)

一、实验目的与要求(1) 掌握Java GUI中框架创建及属性设置中常用类的API;(2) 掌握Java GUI中2D图形绘制常用类的API;(3) 了解Java GUI中2D图形中字体与颜色的设置方法;(4) 了解Java GUI中2D图像的载入方法... 查看详情

201771010109焦旭超《面向对象程序设计(java)》第十二周学习总结(代码片段)

1、实验目的与要求(1)掌握JavaGUI中框架创建及属性设置中常用类的API;(2)掌握JavaGUI中2D图形绘制常用类的API;(3) 了解JavaGUI中2D图形中字体与颜色的设置方法;(4)了解JavaGUI中2D图像的载入方法。2、实验内容和步骤实验1: ... 查看详情

马凯军201771010116《面向对象与程序设计java》第十二周学习总结(代码片段)

一、理论与知识学习部分Java的抽象窗口工具箱(AbstractWindowToolkit,AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类。大部分AWT组件都有其Swing的等价组件,Swing组件的名字一般是在AWT组件名前面添加一个字母“J... 查看详情

201771010118马昕璐《面向对象程序设计java》第十二周学习总结(代码片段)

第一部分:理论知识学习部分用户界面:用户与计算机系统(各种程序)交互的接口图形用户界面:以图形方式呈现的用户界面AET:Java的抽象窗口工具箱包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类。Swing:用户界... 查看详情

《信息安全专业导论》第十二周学习总结

《信息安全专业导论》第十二周学习总结《计算机概论》在本周的概论学习中,我学习了信息安全的一些基本内容。学习了信息安全的保密性、完整性、可用性(缩写为CIA)。保密性就是让关键数据被妥善保护、完整性就是让数... 查看详情

第十二周测试(代码片段)

第十二周测试MySort注意:研究sort的其他功能,要能改的动代码,需要答辩模拟实现Linux下Sort-t:-k2的功能。要有伪代码,产品代码,测试代码(注意测试用例的设计)参考Sort的实现。提交博客链接。1importjava.util.*;23publicclassMySort14... 查看详情

2017-2018-220179204《网络攻防实践》第十二周学习总结免杀技术

第1节实践内容1.理解免杀技术原理2.正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧;(成功实现了免杀的。如何做成功的简单语言描述即可,不要截图、指令。与杀软共生的结果验证要截图。)3.通过组... 查看详情

张季跃201771010139《面向对象程序设计(java)》第十二周学习总结

张季跃201771010139《面向对象程序设计(java)》第十二周学习总结第二部分:实验部分1、实验目的与要求(1)掌握JavaGUI中框架创建及属性设置中常用类的API;(2)掌握JavaGUI中2D图形绘制常用类的API;(3)了解JavaGUI中2D图形中字体与颜色... 查看详情

第十二周(mysort)(代码片段)

注意:研究sort的其他功能,要能改的动代码,需要答辩模拟实现Linux下Sort-t:-k2的功能。要有伪代码,产品代码,测试代码(注意测试用例的设计)参考Sort的实现。提交博客链接。1importjava.util.*;23publicclassMySort14publicstaticvoidmain(Str... 查看详情

第十二周学习进度表

第十二周学习进度表时间第十二周所花时间8个小时左右代码量400行左右博客量6篇了解到的知识点开始团队软件的开发,安卓开发系统。以及网页版编写 查看详情

冯志霞201771010107《面向对象程序设计(java)》第十二周学习总结

                       实验十二  图形程序设计实验时间 2018-11-141、实验目的与要求(1) 掌握 查看详情

201771010113李婷华《面向对象程序设计(java)》第十二周总结(代码片段)

 一.理论知识部分1.Java的抽象口工具箱(AbstractWindowToolkit,AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类。2.AWT库处理用户界面元素的方法:把图形元素的创建和行为委托给本地GUI工具箱进行处理。3.Swing用... 查看详情