Nginx负载均衡
(1)概述
早期的网站流量和业务功能比较简单,单台服务器足以满足基本的需求,但是随着业务越来越多,需要多台服务器进行性能扩展和避免单点故障的出现,需要将不同用户流量分发到不同服务器上
(2)原理及处理流程
系统的扩展分为纵向和横向扩展。纵向扩展是从单机角度触发,通过增加系统的硬件处理能力来提升服务器的处理能力。横向扩展通过添加机器来满足大型网站服务的处理能力。
(3)负载均衡作用
- 解决服务器高并发压力,提高处理性能
- 提供故障转移,实现高可用
- 通过增加或减少服务器的数量,增强网站系统的扩展性
- 再负载均衡服务器上进行过滤,提升网站的安全性
(4)负载均衡常用处理方式
方式一:用户手动选择,在网站上提供不同的线路,让用户自己选择
方式二:DNS轮询方式:大多数域名注册商都对同一台组件添加多条A记录,这就是DNS轮询,DNS服务器将解析请求按照A记录顺序,随机分配到不同的IP上,这样就能完成简单的负载均衡。
缺点:
- 可靠性低
如果一台服务器发生故障,那么所有访问该服务器的请求将不会有所回应,即使将IP从DNS中去掉,由于各大宽带接入商将众多的DNS存放在缓存中,导致DNS不会实时更新。
- 负载均衡不均衡
不能区分服务器的差异和当前的运行状态,会导致某几台服务器负荷很低,另几台服务器负荷很高。
Nginx 七层负载均衡
在反向代理的基础上把用户请求根据指定算法分发到一组【upstream虚拟服务池】
1.upstream指令
用来定义一组服务器,可以是不同的端口服务器。服务器可以指定不同权重,默认为1
upstream name{...}
2.server指定后端服务器名称和一些参数,可以使用域名、IP、端口或者unix
server name[paramerters]
upstream backend{
server 192.168.10.100:9001;
server 192.168.10.100:9002;
server 192.168.10.100:9003;
}
server{
listen:8083;
server_name localhost;
location / {
proxy_pass http://backend;
}
}
3.负载均衡状态
| 状态 | 概述 |
|---|---|
| down | 当前server暂时不参与负载均衡 |
| max_fails | 允许请求的失败次数 |
| fail_timeout | 经过max_fails失败后,服务暂停时间 |
| max_conns | 限制最大的连接次数 |
| backup | 设置为备份服务器,当主服务器不可用时,将用来传递请求 |
4.负载均衡策略
| 算法名称 | 说明 |
|---|---|
| 轮询 | 默认方式 |
| weight | 权重方式 |
| ip_hash | 根据IP分配方式 |
| least_conn | 依据最少连接方式 |
| url_hash | 依据URL分配方式 |
| fair | 依据响应时间方式 |
url_hash
按照访问的url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及资源时间的浪费。
upstream backend{
hash $request_uri;
server 192.168.10.100:9001;
server 192.168.10.100:9002;
server 192.168.10.100:9003;
}
server{
listen:8083;
server_name localhost;
location / {
proxy_pass http://backend;
}
}
fair
根据页面大小、加载时间长短智能的进行负载均衡
upstream backend{
fair
server 192.168.10.100:9001;
server 192.168.10.100:9002;
server 192.168.10.100:9003;
}
server{
listen:8083;
server_name localhost;
location / {
proxy_pass http://backend;
}
}
5.负载均衡案例
(1)一般轮询规则
upstream backend{
hash $request_uri;
server 192.168.10.100:9001;
server 192.168.10.100:9002;
server 192.168.10.100:9003;
}
server{
listen:8083;
server_name localhost;
location / {
proxy_pass http://backend;
}
}
(2)加权轮序
upstream backend{
hash $request_uri;
server 192.168.10.100:9001 weight=7;
server 192.168.10.100:9002 weight=5;
server 192.168.10.100:9003 weight=3;
}
server{
listen:8083;
server_name localhost;
location / {
proxy_pass http://backend;
}
}
(3)对特定资源实现负载均衡
upstream videobackend{
hash $request_uri;
server 192.168.10.100:9001
server 192.168.10.100:9002
}
upstream filebackend{
hash $request_uri;
server 192.168.10.100:9003
server 192.168.10.100:9004
}
server{
listen:8084;
server_name localhost;
location /video/ {
proxy_pass http://videobackend;
}
location /file/ {
proxy_pass http://filebackend;
}
}
(4)对不同域名实现负载均衡
upstream test1{
hash $request_uri;
server 192.168.10.100:9001
server 192.168.10.100:9002
}
upstream test2{
hash $request_uri;
server 192.168.10.100:9003
server 192.168.10.100:9004
}
server{
listen:8085;
server_name www.hello.com;
location / {
proxy_pass http://test1;
}
}
server{
listen:8086;
server_name www.nihao.com;
location / {
proxy_pass http://test2;
}
}
Nginx四层负载均衡
七层是基于HTTP协议
四层是基于TCP/IP协议
四层负载均衡的性能远高于HTTP协议
1.stream指令 指定流服务器指令的配置上下文。和http指令同级
2.upstream指令 和http中的upstream指令是类似的
3.案例
81端口转发到redis1 和 redis2,82端口转发到tomcat
stream{
upstream redisbackend{
server 192.168.200.146:6379;
server 192.168.200.146:6378;
}
upstream tomcatbackend{
server 192.168.200.146:8080;
}
server{
listen 81;
proxy_pass redisbackend
}
server{
listen 82;
proxy_pass tomcatbackend
}
}
Nginx缓存集成
1.缓存概念
缓存就是数据交换的缓冲区,当用户需要获取数据时,先从缓存中拿,缓存中有就直接返回给用户,如果没有,就会发请求去服务器中查询数据。
2.优缺点
优点
(1)减少服务器压力,节省网络流量,加快响应速度,提升用户体验
(2)减轻服务器压力
(3)提供服务端的高可用性
缺点
(1)数据不一致
(2)增加成本
3.原理
客户端给nginx发请求,nginx收到url后形成一个key,这个key通过算法形成一个密文,去对应的路径中寻找,如果找到了给客户端,没找到就给服务器发请求
4.指令
(1)proxy_cache_path path(存储路径)[levels = number] levels:指定缓存空间对应的目录,最多可以设置三层如:
levels = 1:2 缓存空间有两层目录,第一次是一个字母,第二次是两个字母
某个MD5值为 13146461654dfsf6464asd4sa698
levels = 1:2 /usr/local/proxy_cache/8/69 levels = 2:1:2 /usr/local/proxy_cache/98/6/sa
(2)keys_zone:用来设置缓存区的名字和大小
keys_zone = daf:200m 缓存区名字为daf 大小200M 1M能存储8000个keys
(3)inactive:指定缓存数据多长时间为被访问就删除 inactive = 1d 1天没有被访问就删除
(4)max_size 设置最大缓存空间,如果满了,覆盖缓存时间最长的资源
(5) proxy_cache zone_name[缓存区名称] on|off 开启关闭缓存代理
(6) proxy_cache_key key设置web缓存的key值
(7) proxy_cache_valid 对不同状态码设置不同的缓存时间
(8) proxy_cache_min_uses 设置资源被访问多少次后被缓存
(9) proxy_cache_methods 设置缓存哪些http方法
(10) proxy_no_cache string 定义不将数据作缓存的条件
(11) proxy_cache——bypass string 不从缓存中拿数据的的条件
Nginx动静分离
1.概念
动:后台的业务处理
静:网站的静态资源
分离:将二者分开部署,静态资源由nginx访问,非静态内容由Tomcat服务器来部署访问、、
2.优点
动静分离之后,降低动态资源和静态资源的耦合度,动态资源宕机了也不影响静态资源的展示