负载均衡架构:gslb(针对广域网的一种负载均衡架构)、slb(常见负载均衡架构,针对服务器)
负载均衡方式:四层负载(传输层)、七层负载(应用层)
七层负载均衡
使用模块:upstream
配置在http层
nginx监听三个不同端口,模拟三台nginx节点
server {
listen 8001;
server_name localhost;
location / {
root /soft/code/server1;
index index.html;
}
}
server {
listen 8002;
server_name localhost;
location / {
root /soft/code/server2;
index index.html;
}
}
server {
listen 8003;
server_name localhost;
location / {
root /soft/code/server3;
index index.html;
}
}
对应html文件参考
<html>
<head>
<meta charset="utf-8">
<title>server1</title>
</head>
<body style="background-color:yellow;">
<h1>server1</h1>
</body>
</html>
配置负载均衡
#定义一个负载均衡列表,名字为test1。同时定义列表中需要代理的地址
upstream test1 {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.ylw.com;
location / {
proxy_pass http://test1;#调用负载均衡列表
}
}
访问测试(默认是按照次数轮询分配,第一次请求分发给server1,第二次请求分发给server2,第三次请求分发给server3)
负载均衡配置进阶
1、backup参数
upstream test1 {
server 127.0.0.1:8001 backup;#8002,8003节点都无法使用时,才启动8001
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.ylw.com;
location / {
proxy_pass http://test1;
}
}
2、down参数
upstream test1 {
server 127.0.0.1:8001 down;#该节点不参与负载均衡
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.ylw.com;
location / {
proxy_pass http://test1;
}
}
3、max_fails、fail_timeout
upstream test1 {
server 127.0.0.1:8001 max_fails=1 fail_timeout=10s;#当请求失败一次的时候,就将它判定为不可用,同时十秒钟后再次尝试请求
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.ylw.com;
location / {
proxy_pass http://test1;
}
}
4、nginx负载均衡分配策略
轮询:按照时间顺序逐一分配到不同的后端服务器
加权轮询:weight值越大,分配到的机率越高
ip_hash:每个请求访问ip的hash结果分配,这样每个ip固定访问一个后端服务器
url_hash:按照访问的url的hash结果来分配请求
least_conn:最少连接数,哪个机器连接上少就分发
hsah关键数值:根据自定义的key值分发
4.1、加权轮询
upstream test1 {
server 127.0.0.1:8001 weight=5;#每七个请求中,会有五个请求分配给这台节点
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.ylw.com;
location / {
proxy_pass http://test1;
}
}
4.2、ip_hash
upstream test1 {
ip_hash;#使用ip_bash,可以解决会话信息不一致
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.ylw.com;
location / {
proxy_pass http://test1;
}
}
4.3、url_hash
upstream test1 {
hash $request_uri;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.ylw.com;
location / {
proxy_pass http://test1;
}
}