Toggle Navigation
首页
Golang
PHP
Laravel
Magento
Linux
数据库
MySQL
Redis
Mongodb
热门知识
程序与生活
架构师之路
静态站点
GitHub
主页
Nginx实现负载均衡的几种方式
Nginx实现负载均衡的几种方式
06-21
Mark
917
##什么是负载均衡 当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。 我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。 负载均衡是用反向代理的原理实现的。 ##负载均衡的几种常用方式 1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 ``` upstream backserver { server 192.168.0.14; server 192.168.0.15; } ``` 2、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 ``` upstream backserver { server 192.168.0.14 weight=3; server 192.168.0.15 weight=7; } ``` 权重越高,在被访问的概率越大,如上例,分别是30%,70%。 3、上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。 我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 ``` upstream backserver { ip_hash; server 192.168.0.14; server 192.168.0.15; } ``` 4、fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 ``` upstream backserver { server 192.168.0.14; server 192.168.0.15; fair; } ``` 5、url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 ``` upstream backserver { server 192.168.0.14; server 192.168.0.15; hash $request_uri; hash_method crc32; } ``` 每个设备的状态设置为: - down:表示单前的server暂时不参与负载。 - weight:默认为1.weight越大,负载的权重就越大。 - max_fails:允许请求失败的次数,当超过最大次数时,返回proxy_next_upstream模块定义的错误。 - fail_timeout:max_fails次失败后,暂停的时间。 - backup:其它所有的非backup机器down或者忙的时候,请求backup机器。 配置实例: ``` #user nobody; worker_processes 4; events { worker_connections 1024; } http{ upstream proxy { ip_hash; server 192.168.0.14 fail_timeout=60s; server 192.168.0.15; } server{ listen 80; location / { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_pass http://proxy; } } } ``` 原文:[https://blog.csdn.net/qq_28602957/article/details/61615876](https://blog.csdn.net/qq_28602957/article/details/61615876 "https://blog.csdn.net/qq_28602957/article/details/61615876")
最新文章
Golang内存问题处理
WebSocket详解
Gopher面试中的Coding(三)
Golang用os/signal包实现平滑重载配置文件
Nginx实现负载均衡的几种方式
Golang中子goroutine与主协程同步的四种实现
Dockerfile文件详解
Golang开发微信公众号
最热文章
Magento实现下载csv数据表格
1797
Laravel带有条件搜索的分页
1692
Magento上传文件、缩略图和导出CSV
1690
Magento添加Advanced Dataflow
1641
Golang开发微信公众号
1570
Magento后台添加rule规则
1543
Magento优化 – MySQL读写分离
1509
Magento常用模块分享
1401
热门标签
下载
laravel分页
上传
导出
Dataflow
微信公众号
rule
规则
读写分离
模块
shell
正则
Collection
binlog
命名空间
处理
内存泄漏
Git
string
composer
解锁
锁表
事务处理
函数
redis sentinel
架构
系统
time
package
读写
事务处理
日志分析
进阶
缓存
golang
表分割
schedule
fmt
事务
分布式锁
交叉编译
HTTPS
日志分割
Gopher面试
mongodb
Dockerfile
channel
多数据库
git服务器
gogs
重载配置
负载均衡
日志过滤
php
protobuf
发展方向
版本号
模型关系
goroutine
concat
json
mongodb
get
post
defer
panic
golang算法
算法
docker
elasticsearch
rpc
代码部署
redis
主从配置
写文件
protobuf
laravel
websocket
并发
量级
package
curl
生成插件
直接下载
数据类型
Shell
错误传递
成长
grpc
参数
Go指针
队列
protobuf
方法
Redis持久化
路上
风景
yum