前言
通常我们的业务中会遇到的信息数量都是巨大的,这个时候就要考虑到负载均衡的问题。负载均衡是将负载分摊到不同的服务单元,既保证了服务的可用性,又保证了响应足够快,给用户很好的体验。能实现负载均衡的既有硬件又有软件,从经济的角度考虑,软件 Nginx 自然是一个不错的选择。
负载均衡策略
Nginx 为我们默认提供了几种负载均衡的策略:
- 轮询:将客户端发起的请求,按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
- 权重:会将客户端的请求,根据服务器的权重值不同,分配不同的数量,便于人为控制,适用于后端服务器性能不均衡的情况。
- ip_hash:基于发起请求的客户端的ip地址不同,他始终会将请求发送到指定的服务器上。它能很好解决同一用户访问同一个应用,session不共享的问题,实现session共享。
轮询
想实现 Nginx 轮询负载均衡机制只需要在配置文件中添加以下内容:
upstream 名字 {
server ip:port;
server ip:port;
...
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://upstream的名字/;
}
}
例如:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream win {
server 192.168.200.56:8080;
server 192.168.200.56:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://win/;
}
}
}
权重
想实现 Nginx 权重负载均衡机制只需要在配置文件中添加以下内容:
upstream 名字 {
server ip:port weight=权重比例;
server ip:port weight=权重比例;
...
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://upstream的名字/;
}
}
例如:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream win {
server 192.168.200.56:8080 weight=3;
server 192.168.200.56:8081 weight=7;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://win/;
}
}
}
ip_hash
想实现 Nginx 的 ip_hash 负载均衡机制只需要在配置文件中添加以下内容:
upstream 名字 {
ip_hash;
server ip:port;
server ip:port;
...
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://upstream的名字/;
}
}
例如:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream win {
ip_hash;
server 192.168.200.56:8080;
server 192.168.200.56:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://win/;
}
}
}