负载均衡是高可用网络基础架构的的一个关键组成部分,有了负载均衡,我们通常可以将我们的应用服务器部署多台,然后通过负载均衡将用户的请求分发到不同的服务器用来提高网站、应用、数据库或其他服务的性能以及可靠性。
简单来说就是将客户的请求均衡的分配给多台服务器处理。
Nginx实现负载均衡需要了解两个指令:upstream 和 proxy_pass 。
指令语法:
Syntax: upstream name { … }
Default: —
Context: http
官方文档的例子:
resolver 114.114.114.114;
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
server backup1.example.com backup;
}
backend 是这个服务器集群的名字,upstream中的每个server增加一台服务器,服务器地址可以写ip、unix sock、域名(需要使用resolver指令配置dns解析)。
server指令语法:
Syntax: server address [parameters];
Default: —
Context: upstream
常见parameters有:
更多详细查看官网文档: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream
proxy_pass指令语法:
Syntax: proxy_pass URL;
Default: —
Context: location, if in location, limit_except
设置代理服务器的协议和地址以及应该将位置映射到的可选URI。作为协议,可以指定“http”或“https”。可以将地址指定为域名或IP地址,并指定一个可选端口,或作为UNIX域套接字路径,在单词“unix”之后指定,并以冒号括起来。
更多详细查看官网文档: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
负载均衡算法是指:将客户端请求如何分配给服务器集群处理的方法。Nginx中常用的负载均衡算法有:
将客户端请求按照时间顺序依次分配给后台服务器。
适用于后台机器性能一致的情况。
通过设置服务器的权重值,指定服务器请求分配几率,weight和访问率成正比。
用于后端服务器性能不均的情况。
根据请求者ip的hash值将请求发送到后台服务器中,可以保证来自同一ip的请求被打到固定的机器上。
可以解决session问题。
根据请求的url的hash值将请求分到不同的后台服务器,当后台服务器为缓存的时候效率高。
根据后台响应时间来分发请求,响应时间短的分发的请求多。
最少链接数,哪个机器连接数少就发分发给哪个机器。
upstream指令的上下文是http,因此先在配置文件的http块中添加upstream块:
# 设定实际的服务器列表
upstream backend{
# ip哈希法
#ip_hash;
# 最少链接数法
#least_conn;
# 最短响应时间法
#fair;
# url哈希法
#hash $request_uri;
#hash_method crc32;
# 设置weight配置权重法
server address [weight=w1] [parameters];
server address [weight=w2] [parameters];
server address [weight=w3] [parameters];
# ...
}
根据需要选择合适的负载均衡算法。
在你需要的http块的server块中添加:
# 设置代理
proxy_pass http://backend;
# 设置请求主机
proxy_set_header Host $host;
# 设置客户端请求IP(让真正处理请求的服务器知道客户端IP)
proxy_set_header X-Forwarder-For $remote_addr;
本文标签: Nginx
暂无评论,赶紧发表一下你的看法吧。