使用 Nginx 创建服务器的负载均衡
译序
Nginx 的负载均衡配置看上去很简单。以下是 Nginx 官方给的一个简单的负载均衡的例子:
http {
upstream myproject {
server 127.0.0.1:8000 weight=3;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.domain.com;
location / {
proxy_pass http://myproject;
}
}
}
参见
官方链接。而本文则会从工作机制以及指令解释上对此示例做较为详细的解释。以下是作者正文:
关于负载均衡
负载均衡是一种用于在几个虚拟专用服务器分配应用程序的传入流量的机制。被分配到多台机器的处理机制,确保容错和高度稳定。负载均衡的循环算法将访问发送到一组 IP 中。没有考虑更多比如服务器响应时间以及访问者的地理区域等细节,在很容易实现的基本层面上进行循环,分发服务器负载。
设置
本教程中的步骤要求用户在你的 VPS 中具有 root 权限。你可以在
用户指南中查看如何设置。
在设置 Nginx 负载均衡之前,你得先把 Nginx 安装在你的 VPS 上。你可以使用 apt-get 命令进行快速安装:
sudo apt-get install nginx
Upstream 模块
我们需要使用 upstream 模块来设置一个循环试负载均衡。我们将把这些配置包含到 Nginx 的设置中去。
然后打开你的网站配置(在我的例子中我只演示一下一般默认虚拟主机):
nano /etc/nginx/sites-available/default
我们将会把负载均衡配置加入到这个文件中去。
首先我们需要将 upstream 模块包含进来,类似于这个:
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
然后我们在(Nginx 的)其他配置中引用该模块:
server {
location / {
proxy_pass http://backend;
}
}
重启 Nginx:
sudo service nginx restart
一旦你的所有虚拟专用主机全部就绪,你会发现负载均衡器开始将访问流量平均地分配到那些链接主机上。
指令
以上部分介绍了如何将负载平均分配到一些虚拟主机上去。但是,会有一些原因导致这不是最有效的处理数据的方法。我们可以使用一些指令来使我们的应用更加高效。
Weight
一种更精密地分配用户到各个主机上的方法就是为某些机器指定权重。Nginx 允许我们分配一个数字来说明需要转发到每个服务器的流量的比例。
一个具有服务器权重的负载均衡设置如下:
upstream backend {
server backend1.example.com weight=1;
server backend2.example.com weight=2;
server backend3.example.com weight=4;
}
默认权重为 1。权重为 2 的 backend2.example 会被发送 backend1 的两倍的流量,而权重为 4 的 backend3 则将会处理 backend2 流量的两倍相当于 backend1 流量的四倍的流量。
Hash
IP 散列允许主机根据用户的 IP 地址来响应客户端,将用户的每次访问分发给同一台 VPS(除非该台主机已经 down 掉)。如果一台主机被认为是不活跃的,它将被标记为 down 掉。所有应该路由到这台 down 掉的主机的 IP 将会被转发到另一台替代主机上去。
下面的配置提供了一个示例:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
}
Max Fails
根据默认的循环负载设置,Nginx 将会持续地向 VPS 主机发送数据,即使这些主机没有任何响应。最大失败次数可以自动通过呈现一段时间内无响应的主机来防止这种情况。最大失败次数具有两个要素:max_fails 和 fall_timeout。
max_fails 指示出在这台主机被认为是不活跃状态之前连接到这台主机时出现的失败次数。
fail_timeout 指示出这台主机被认为不活动的状态的持续时间。一旦时间到了,Nginx 会重新尝试连接该主机。默认超时值为 10 秒钟。
一个配置示例:
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=15s;
server backend2.example.com weight=2;
server backend3.example.com weight=4;
更多
以上是关于简单的循环负载均衡的一个简短概述。此外,还有另外一些加速和优化单台服务器的方法:
原文链接:
https://www.digitalocean.com/community/articles/how-to-set-up-nginx-load-balancing。
使用 Nginx 创建服务器的负载均衡的更多相关文章
- Nginx 服务器 之Nginx与tomcat实现负载均衡
本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡. 一.nginx与tomcat实现负载均衡 1.在/usr/local/ngnix/conf 创建 ...
- Nginx服务器部署 负载均衡 反向代理
Nginx服务器部署负载均衡反向代理 LVS Nginx HAProxy的优缺点 三种负载均衡器的优缺点说明如下: LVS的优点: 1.抗负载能力强.工作在第4层仅作分发之用,没有流量的产生,这个特点 ...
- 双节点(nginx+keepalived)为两台apache服务器提供负载均衡
说明:本实验为双节点nginx为两台apache服务器提供负载均衡,本文不是做lvs,所以realserver不是配置在keepalived.conf而是在nginx的配置文件中upstream.此架 ...
- 单节点nginx为两台apache服务器提供负载均衡
需求:本实验为单节点nginx为两台apache服务器提供负载均衡,所有配置为最简单 1.初始化3台测试server,该关的关了 [root@host101 ~]# vim /etc/hosts 19 ...
- Nginx+Keepalived主主负载均衡服务器
Nginx+keepalived主主负载均衡服务器测试实验环境: 主Nginx之一:192.168.11.27主Nginx之二:192.168.11.28Web服务器一:192.168.11.37We ...
- Nginx反向代理,负载均衡,redis session共享,keepalived高可用
相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...
- Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解
大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写以及读写分离
1.环境准备 前端Nginx:10.160.65.44 后端WEB服务器两台:10.160.65.49/10.160.65.50 2.安装Nginx: 下载nginx-1.9.15.tar.gz,放置 ...
随机推荐
- hdu 4736 This Is The Job The Bear Finds(2013年成都ACM网络赛)
// Time 1718 ms; Memory 1500 K #include<iostream> #include<cstdio> #include<cmath> ...
- 疯牛-- Aggressive cows (二分)
疯牛 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小 ...
- 汉高澳大利亚sinox为什么不能下载源代码,因为sinox执行unix/linux/windows规划
中国用户下载真正的澳大利亚sinox说完后sinox没有下载源代码. 这意味着,类似linux如下载linux 开源安装. 要知道.sinox并非linux. 首先,sinox是商业操作系统,就像 w ...
- 再造 “手机QQ” 侧滑菜单(三)——视图联动
代码示例:https://github.com/johnlui/SwiftSideslipLikeQQ 本 文中,我们将一起使用 UINavigationController 来管理主视图,并实现点击 ...
- BZOJ 3375: [Usaco2004 Mar]Paranoid Cows 发疯的奶牛( set )
果然写得短就跑得慢... 直接用set就行了(你要写棵平衡树也可以).没有包含的话, 假如L(i) <= L(j), 那么R[i] <= R[j]. 所以从小到大扫, 每次查找左端点小于当 ...
- windows phone 8的新特性
<1>硬件的升级WP8在硬件上有了极大的提升,处理器支持双核或多核 理论最大支持64核,分辨率支持800x480.1280x720/768,屏幕支持720p或WXGA:支持存储卡扩展.同时 ...
- 动态网页爬取例子(WebCollector+selenium+phantomjs)
目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test" ...
- window下svn注册为本地的服务
sc create svnservice binpath= "\"C:\program files\Subversion\bin\svnserve.exe\" --ser ...
- HDU 3790 最短路径问题 (SPFA)
转载请注明出处:http://blog.csdn.net/a1dark 分析:比一般最短路多了一个花费.多加一个判断即可.用的SPFA.这道题让我搞清楚了以前定义INF为啥爆的问题.受益颇多. #in ...
- Android应用开发经常使用知识
在其它站点看到的,Mark一下 1.近期打开的应用不在近期任务列表中显示 android:excludeFromRecents="true" 设置为true,则排除在近期任务列表之 ...