网络TCP-IP基础
OSI 七层参考模型:
7)应用层(nginx软件):http、smtp、ssh
6)表示层
5)会话层
4)传输层控制(lvs 内核):三次握手 >> (传输数据) >> 四次分手
协议:tcp(面向连接、可靠)、udp,连接唯一性通过ip+端口号,保证每个连接互不干扰
Linux端口号查询:netstat -natp
3)网络层:找到下一跳
协议:ip,icmp
LInux路由查看:route -n
2)链路层:ARP,全F,两点通信,交换机学习
协议:以太网,Ethernet,MAC
Linux物理地址查看:arp -a
1)物理层
总结:
1)整个互联网建立在下一跳的模式下
—— IP是逻辑上的两个端点(客户端,服务端)
—— MAC是物理上连接的两个节点
2)端点间TCP传输过程中:确认机制,状态机制,不可分割
3)解析数据包需要成本
——交换机:两层,只关心MAC地址
——路由器:三层,只关心IP和路由表
——LVS服务器:四层,只关心PORT,状态
——nginx:七层,关心socket对应关系
负载均衡LVS(Linux Virtual Server)
Linux虚拟服务器,是一个虚拟的服务器集群系统。
ipvs:嵌入到linux的内核
ipvsadm:管理应用程序
类型:NAT地址转换;DR直接路由;TUN隧道
调度方法
四种静态方法:
rr轮询;wrr;dh;sh
动态调度方法:
lc最少连接;wlc:加权最少连接;sed最短期望延迟 等等
缺点:
LVS服务器挂掉就不能访问了,单点故障问题;
Real Server挂掉会造成一部分人可以访问一部分不可以访问
Keepalived
为LVS做服务的,用户空间的程序;是集群管理中保证集群高可用的服务软件。
1)需要心跳机制探测后端RS是否提供服务:探测down,需要从lvs中删除该RS;探测发送从down到up,需要从lvs中再次添加RS
2)LVS DR,需要主备(HA)
Keepalived原理:VRRP协议(虚拟路由冗余协议);IP漂移
Nginx
Nginx(engine x)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。第一个公开版本发布于2004.10.4。Nginx因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。官方测试nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。
Nginx和apache(httpd)的比较
1)nginx相对于apache的优点:轻量级,同样起web服务,比apache占用更少的内存及资源。抗并发,nginx处理请求是异步非阻塞的,而apache则是阻塞型的,在高并发下nginx能保持低资源低消耗高性能。高度模块化的设计,编写模块相对简单。社区活跃,各种高性能模块出品迅速。
2)apache相对与nginx的优点:rewrite比nginx的rewrite强大。模块超多,少bug,nginx的bug相对较多。
3)Nginx配置简洁,Apache复杂
4)最核心区别在于apche是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程。
Session一致性问题
session的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间,主要关闭浏览器窗口,cookie就消失了。实现机制是当用户发起一个请求的时候,服务器会检查该请求中是否包含sessionid,如果未包含,则系统会创造一个名为JSESSIONID的输出cookie返回给浏览器(只放入内存,并不存在硬盘中),并将其以HashTable的形式写道服务器的内存里面;当已经包含sessionid时,服务端会检查找到与该session相匹配的信息,如果存在则直接使用该sessionid,若不存在则重新生成新的session。需要注意session始终是由服务端创建的,并非浏览器自己生成。但是浏览器的cookie被禁止后session就需要用get方法的URL重写的机制或者使用POST方法提交隐藏表单的形式实现。
Session为什么要共享
首先我们应该明白,为什么要实现共享,如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话数据就在这台机器,但是如果使用了负载均衡把请求分发到不同的机器呢?这个时候会话id在客户端是没有问题的,但是如果用户的两次请求到了两台不同的机器,而它的session数据可能存在其中一台机器,这个适合就会出现取不到session数据的情况,于是session的共享就成了一个问题。
Session一致性解决方案
1)session复制:tomcat本身带有复制session的功能
2)共享session:需要专门管理session的软件;memcached缓存服务,可以和tomcat整合,帮助tomcat共享管理session
注意Session共享必须所有服务器时间保持一致性。