1. lvs有几种模式,他们的区别是什么?
DR模型 – (Director Routing-直接路由)
原理: DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。 DR模式是互联网使用比较多的一种模式。
NAT模型 – (NetWork Address Translation-网络地址转换)
原理 这个是通过网络地址转换的方法来实现调度的。首先调度器(LB)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后调度就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就能够接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(NAT模式下我们需要把RS的默认路由设置为LB服务器。)把响应后的数据包发送给LB,LB再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。
fullNAT – (full NAT,双向数据包都进行SNAT与DNAT)
原理: FULLNAT转发数据包是类似NAT模式,IN和OUT数据包都是经过LVS;唯一的区别:后端RealServer 或者交换机不需要做任何配置。 FULLNAT的主要原理是引入local address(内网ip地址),cip-vip转换为lip->rip,而 lip和rip均为IDC内网ip,可以跨vlan通讯。
IP TUN模型 – (IP Tunneling - IP隧道)
原理 virtual server via ip tunneling模式:采用NAT模式时,由于请求和响应的报文必须通过调度器地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。为了解决这个问题,调度器把请求的报文通过IP隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。这样调度器就只处理请求入站报文,由于一般网络服务应答数据比请求报文大很多,采用VS/TUN模式后,集群系统的最大吞吐量可以提高10倍。
ENAT --(enhence NAT 或者叫三角模式/DNAT)–(算是私有的吧)
阿里云的ENAT模式(enhence NAT)
官方三种负载均衡技术比较总结表:
参考文档: https://developer.aliyun.com/article/707077 https://blog.csdn.net/weixin_44214830/article/details/89344829 https://blog.csdn.net/u010563833/article/details/78047036
2. 简述lvs、nginx和haproxy有什么区别和各自的特点
LVS优缺点
LVS的优点:
1、抗负载能力强、工作在第4层仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;无流量,同时保证了均衡器IO的性能不会受到大流量的影响; 2、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat; 3、应用范围比较广,可以对所有应用做负载均衡; 4、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
LVS的缺点:
1、软件本身不支持正则处理,不能做动静分离,这就凸显了Nginx/HAProxy+Keepalived的优势。 2、如果网站应用比较庞大,LVS/DR+Keepalived就比较复杂了,特别是后面有Windows Server应用的机器,实施及配置还有维护过程就比较麻烦,相对而言,Nginx/HAProxy+Keepalived就简单多了。
Nginx优缺点
Nginx的优点:
1.工作在OSI第7层,可以针对http应用做一些分流的策略。比如针对域名、目录结构。它的正则比HAProxy更为强大和灵活; 2.Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在; 3.Nginx安装和配置比较简单,测试起来比较方便; 4.可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量; 5.Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点; 6.Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web环境,大有和LAMP环境分庭抗礼之势,Nginx在处理静态页面、特别是抗高并发方面相对apache有优势; 7.Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,有需求的朋友可以考虑用其作为反向代理加速器;
Nginx的缺点: 1、Nginx不支持url来检测。 2、Nginx仅能支持http和Email,这个它的弱势。 3、Nginx的Session的保持,Cookie的引导能力相对欠缺。
HAProxy优缺点
HAProxy的优点: 1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段); 2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作; 3、支持url检测后端的服务器; 4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的; 5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS; 6、HAProxy的算法较多,达到8种; ① roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的; ② static-rr,表示根据权重,建议关注; ③ leastconn,表示最少连接者先处理,建议关注; ④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注; ⑤ ri,表示根据请求的URI; ⑥ rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name; ⑦ hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求; ⑧ rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。 HAPorxy缺点: 1.不支持POP/SMTP协议 2.不支持SPDY协议 3.不支持HTTP cache功能。现在不少开源的lb项目,都或多或少具备HTTP cache功能。 4.重载配置的功能需要重启进程,虽然也是soft restart,但没有Nginx的reaload更为平滑和友好。 5.多进程模式支持不够好
三者对比: LVS: 是基于四层的转发 HAproxy: 是基于四层和七层的转发,是专业的代理服务器 Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发 区别: LVS由于是基于四层的转发所以只能做端口的转发 而基于URL的、基于目录的这种转发LVS就做不了
工作选择: HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做 在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大 选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器 配置简单,所以中小型企业推荐使用HAproxy
参考文档: https://blog.csdn.net/qlj324513/article/details/81541282 https://www.cnblogs.com/strugger-0316/p/14492865.html http://www.blogjava.net/ivanwan/archive/2013/12/25/408014.html
3. 高可用和负载均衡分别可以采用哪些方案来实现,请简述
1.负载均衡(load balance)
在互联网高速发展的时代,大数据量、高并发等是互联网网站提及最多的。如何处理高并发带来的系统性能问题,最终大家都会使用负载均衡机制。它是根据某种负载策略把请求分发到集群中的每一台服务器上,让整个服务器群来处理网站的请求。 公司比较有钱的,可以购买专门负责负载均衡的硬件(如:F5),效果肯定会很好。对于大部分公司,会选择廉价有效的方法扩展整个系统的架构,来增加服务器的吞吐量和处理能力,以及承载能力。
2.集群(Cluster)
用N台服务器构成一个松耦合的多处理器系统(对外来说,他们就是一个服务器),它们之间通过网络实现通信。让N台服务器之间相互协作,共同承载一个网站的请求压力。
3.高可用(HA)
在集群服务器架构中,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。ps:这里我感觉它跟故障转移(failover)是一个意思,看到的网友给个解释,谢谢?
4.session复制/共享
在访问系统的会话过程中,用户登录系统后,不管访问系统的任何资源地址都不需要重复登录,这里面servlet容易保存了该用户的会话(session)。如果两个tomcat(A、B)提供集群服务时候,用户在A-tomcat上登录,接下来的请求web服务器根据策略分发到B-tomcat,因为B-tomcat没有保存用户的会话(session)信息,不知道其登录,会跳转到登录界面。 这时候我们需要让B-tomcat也保存有A-tomcat的会话,我们可以使用tomcat的session复制实现或者通过其他手段让session共享。
使用lvs+keepalive实现集群高可用,达到更健壮的LB。我们可以做前端使用lvs来做负载均衡,根据lvs的8种调度算法(可设置),分发请求到对应的web服务器集群上。lvs做双机热备,通过keepalived模块能够达到故障自动转移到备份服务器,不间断提供服务。 一般在WEB端使用的负载均衡比较多的是HAProxy+keepalived+nginx;数据库mySQL集群使用Lvs+keepalived+mysql实现。因为HAProxy和nginx一样是工作在网络7层之上,并且前者弥补了nginx的一些缺点如session的保持,cookie的引导等,且它本身是个负责均衡软件,处理负载均衡上面必然优于nginx;lvs比较笨重,对于比较庞大的网络应用实施比较复杂,虽然它运行在网络4层之上,仅做分发没有流量产生,但是它不能做正则处理也不能也不能做动静分离,所以一般用lvs+keepalived或heatbeat做数据库层的负载均衡。
参考文档: https://baijiahao.baidu.com/s?id=1662035038035410429&wfr=spider&for=pc https://blog.csdn.net/qq_37651267/article/details/93368908
4. 简述数据包在iptables链表中是如何传播的
Iptables的5条链分别是: PREROUTING 路由前 INPUT 发到本机某进程的报文 OUTPUT 本机某进程发出的报文 FORWARD 转发 POSTROUTING 路由后
Iptables的4张表: filter 负责过滤工程,防火墙 nat 网络地址转换功能 network address translate mangle 拆解报文,做出修改,并重新封装 raw 关闭nat表上启用的连接追踪机制
链表关系 PREROUTING 的规则可存在于:nat表、mangle表、raw表 INPUT 的规则可存在于:mangle表、filter表(nat表centos6没有,centos7有) FORWARD 的规则可存在于:mangle表、filter表 OUTPUT 的规则可存在于:raw表、mangle表、nat表、filter表 POSTROUTING 的规则可存在于:mangle表、nat表
iptables各链表之间的关系图 iptables命令的语法规则:
- iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
-t table,是指操作的表,filter、nat、mangle或raw, 默认使用filter COMMAND,子命令,定义对规则的管理 chain, 指明链路 CRETIRIA, 匹配的条件或标准 ACTION,操作动作 链管理 -N, --new-chain chain:新建一个自定义的规则链; -X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链; -F, --flush [chain]:清空指定的规则链上的规则; -E, --rename-chain old-chain new-chain:重命名链; -Z, --zero [chain [rulenum]]:置零计数器; -P, --policy chain target, 设置链路的默认策略 规则管理 -A, --append chain rule-specification:追加新规则于指定链的尾部; -I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部; -R, --replace chain rulenum rule-specification:替换指定的规则为新的规则; -D, --delete chain rulenum:根据规则编号删除规则; 查看规则 -L, --list [chain]:列出规则; -v, --verbose:详细信息; -vv, -vvv 更加详细的信息 -n, --numeric:数字格式显示主机地址和端口号; -x, --exact:显示计数器的精确值; --line-numbers:列出规则时,显示其在链上的相应的编号; -S, --list-rules [chain]:显示指定链的所有规则; 匹配条件 匹配条件包括通用匹配条件和扩展匹配条件。 通用匹配条件是指针对源地址、目标地址的匹配,包括单一源IP、单一源端口、单一目标IP、单一目标端口、数据包流经的网卡以及协议。 扩展匹配条件指通用匹配之外的匹配条件。
参考文档: https://www.cnblogs.com/xiaoyaojinzhazhadehangcheng/p/11606156.html https://www.cnblogs.com/yum777/articles/8514636.html
5. https对比http有什么区别解决了什么问题?
基本概念
HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。
HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。
HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
HTTPS 默认工作在 TCP 协议443端口,它的工作流程一般如以下方式:
1.TCP 三次同步握手 2.客户端验证服务器数字证书 3.DH 算法协商对称加密算法的密钥、hash 算法的密钥 4.SSL 安全加密隧道协商完成 5.网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。
HTTP 与 HTTPS 的区别 HTTP 是明文传输协议,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。 HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页。 HTTPS需要用到SSL证书,而HTTP不用。 HTTPS标准端口443,HTTP标准端口80。 HTTPS基于传输层,HTTP基于应用层。 HTTPS在浏览器显示绿色安全锁,HTTP没有显示。
HTTPS解决HTTP哪些问题 1.解决内容可能被窃听的问题——加密 2.解决报文可能遭篡改问题——数字签名 3.解决通信方身份可能被伪装的问题——数字证书
参考文档: https://www.runoob.com/w3cnote/http-vs-https.html https://www.cnblogs.com/fundebug/p/10773136.html https://blog.csdn.net/qq32933432/article/details/87001425
6. 简述在从浏览器里输入https://www.baidu.com到展示出内容中间经历的过程
1、客户端发起 HTTPS 请求 用户在浏览器里输入一个 https://www.baidu.com 网址,然后连接到 server 的 443 端口。
2、服务端的配置 验证通过,才可以继续访问。
3、传送证书 这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
4、客户端解析证书 这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。 如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。
5、传送加密信息 这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
6、服务端解密信息 服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
7、传输加密后的信息 这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。
8、客户端解密信息 客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。
7. 线上的一个http服务突然无法访问,你要如何排查解决问题?
1、DNS域名是否有问题。使用内网IP访问测试。 2、集群,切换到其他正常备份或是负载设备,停掉这台不正常映射。 3、检查Nginx、Apache、IIS等是否正常启动,查看日志。 4、查看HTTP配置,查看端口是否被占用。 5、查看访问日志。 6、查看负载或是防火墙规则是否放行。
|