解决问题
单台服务器已经无法承担大量用户的并发访问,必须采用多台服务器协同工作,以提高计算机系统的处理能力和计算强度(集群),满足当前业务量的需求。如何完成同样功能的多个网络设备之间实现合理的业务量分配——负载均衡。
负载均衡策略/算法
- 轮询:依次分发到每台应用服务器上,所以每台处理请求数相同
- 加权轮询:按照配置的权重将请求分发,高性能的服务器分配更多请求。
- 随机:随机分配
- 加权随机:
- 最少连接:记录每个应用服务器正在处理的连接数,将新的请求分发到最少连接的服务器上。
- 加权最少连接
- 源地址散列:根据来源的IP地址进行Hash计算得到应用服务器,这样来自同一个IP地址的请求总在同一个服务器上处理。该请求的上下文信息可以存储在这台服务器上
负载均衡的实现方法
步骤
1.根据负载均衡算法和Web服务器列表计算得到集群中一台Web服务器的地址。
2.将请求数据发送到该地址对应的Web服务器上。
方案
【1】.网页上提供不同线路,不同服务器连接的方式
【2】.DNS轮询
对同一主机名添加多条A记录,DNS服务器将解析请求按照A记录的顺序,随机分配到不同的IP。
缺点:
可靠性不高,DNS轮询的服务器发生故障,不会及时响应,继续接收请求。即使在记录中去掉,也会有缓存。
负载分配不均衡,简单轮询,不能做到性能好的多分配请求;本地DNS缓存已解析的域名到IP的映射,使一段时间内一直访问同一台。
场景:可靠性要求不高的服务器集群。图片服务器集群等。
【3】.四/七层负载均衡设备(硬件和软件)
开放系统互联模型(OSI):用于不同机型,操作系统或公司的网络体系结构能够互连。
硬件四/七层负载均衡交换机: F5
软件四层负载均衡:LVS (Linux Virtual Server)
采用IP负载均衡技术和基于内容请求分发技术
软件七层负载均衡
大多基于HTTP反向代理方式,Nginx
Nginx可以按轮询、IP哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,还支持后端服务器的健康检查。
【4】.多线多地区智能DNS解析和混合负载均衡*
“线”:网通、电信……
应用场景
1、http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
2、虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
修改/usr/local/nginx/conf/nginx.conf文件,添加两个虚拟主机,如下:
#配置虚拟主机aaa.test.com
server {
#监听的ip和端口,配置本机ip和端口
listen 192.168.101.3:80;
#虚拟主机名称是aaa.test.com,请求域名aaa.test.com的url将由此server配置解析
server_name aaa.test.com;
#所有的请求都以/开始,所有的请求都可以匹配此location
location / {
#使用root指令指定虚拟主机目录即网页存放目录
#比如访问http://ip/test.html将找到/usr/local/aaa_html/test.html
#比如访问http://ip/item/test.html将找到/usr/local/aaa_html/item/test.html
root /usr/local/aaa_html;
#指定欢迎页面,按从左到右顺序查找
index index.html index.htm;
}
}
#配置虚拟主机bbb.test.com
server {
listen 192.168.101.3:80;
server_name bbb.test.com;
location / {
root /usr/local/bbb_html;
index index.html index.htm;
}
}
3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
正向代理VS反向代理
反向代理是指:以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求链接的客户端。
正向代理:代理服务器代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。因为请求哪个Web服务器是不确定的,而且这些Web服务器并没有配置这个代理服务器,所以不支持外部对内部网络的访问请求。
反向代理VS负载均衡
反向代理,是把一些静态资源存储在服务器上,当用户有请求的时候,就直接返回反向代理服务器上的资源给用户,而如果反向代理服务器上没有的资源,就转发给后面的负载均衡服务器,负载均衡服务器再将请求分发给后端的web服务器。 区别就是:反向代理服务器是需要存储资源的,让用户更快速的接收到资源 负载均衡就是,为了保证后端web服务器的高可用,高并发,是不需要要存储资源,只需要转发用户的请求。
实践问题
session共享
nginx对tomcat做负载,怎么解决session共享的问题?——tomcat-redis-session-manager-master
nginx负载均衡和反向代理配置
Upstream模块中的Server指令用于指定后端服务器的名称和参数。可以是域名,IP或端口号。
server{……}虚拟主机内,通过proxy_pass和fastgi_pass指令设置进行反向代理的upstream服务器集群。
proxy_set_header指令用于在向反向代理的后端Web服务器发起请求时添加指定的Header头信息。
proxy_set_header Host 设置域名
nginx双机高可用
防止一台nginx宕掉,加一台备用机。
方案一:正常情况下只有一台用于负载均衡,另一台空闲。可以用keepalive软件实现一台出问题时切换到另一台。
方案二:两台都用于负载均衡。