什么是负载均衡?
将收到的请求,平均分配到后端服务器,当一台服务器出现问题,不影响业务
为什么要使用负载均衡
提高并发,提升响应速度,高容灾性
负载均衡厂商
ULB:ucloud
SLB:阿里云
CLB:腾讯云
QLB:七牛云
负载均衡类型
1.四层负载均衡
2.七层负载均衡
常用的负载均衡软件
nginx:1.9版本之前只支持7层负载均衡,1.9版本之后支持四层和七层,因为多了一个stream模块
Haproxy:支持四层负载均衡和七层负载均衡,是一个专业的负载均衡软件
LVS:专业的四层负载均衡服务器 ipvsadm 命令 将服务器变成一台“硬件负载均衡”
负载均衡配置场景
0.负载均衡配置语法
Syntax: upstream name { ... }
Default: -
Context: http
#upstream例
upstream web {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
}
server {
location / {
proxy_pass http://web;
}
}
配置lb01代理服务器
[root@lb01 ~]# vim /etc/nginx/conf.d/proxy.conf
upstream web {
server 10.0.0.7:80;
server 10.0.0.8:80;
}
server {
listen 80;
server_name proxy.linux.com;
location / {
proxy_pass http://web;
include proxy_params;
}
}
[root@lb01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 ~]# systemctl restart nginx
[root@lb01 ~]# vim /etc/nginx/proxy_params
proxy_set_header HOST $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 8 8k;
负载均衡实战
1.配置web服务器
[root@web01 ~]# vim /etc/nginx/conf.d/blog.linux.com.conf
server {
listen 80;
server_name blog.linux.com;
location / {
root /code/wordpress;
index index.php;
}
location ~ \.php$ {
root /code/wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
[root@web02 ~]# vim /etc/nginx/conf.d/zh.linux.com.conf
server {
listen 80;
server_name zh.linux.com;
location / {
root /code/zh;
index index.php;
}
location ~ \.php$ {
root /code/zh;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
2.配置负载均衡服务器lb01
[root@lb01 ~]# vim /etc/nginx/conf.d/upstream.conf
upstream upstream {
server 10.0.0.7:80;
server 10.0.0.8:80;
}
server {
listen 80;
server_name blog.linux.com zh.linux.com;
location / {
proxy_pass http://upstream;
include proxy_params;
}
}
[root@lb01 ~]# vim /etc/nginx/proxy_params
proxy_set_header HOST $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 8 8k;
3.停掉web02的php
[root@web02 ~]# systemctl stop php-fpm
4.访问页面测试
#配置windows hosts
10.0.0.5 blog.linux.com zh.linux.com edu.linux.com proxy.linux.com
5.解决负载均衡后端有一台机器出问题
[root@lb01 ~]# vim /etc/nginx/conf.d/upstream.conf
upstream upstream {
server 10.0.0.7:80;
server 10.0.0.8:80;
}
server {
listen 80;
server_name blog.linux.com zh.linux.com;
location / {
proxy_pass http://upstream;
include proxy_params;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
}
}
负载均衡调度算法
| 调度算法 | 概述 |
|---|---|
| 轮询 | 根据访问的顺序,分别平均的分配至后端服务器 |
| weight | 加权轮询,根据weight配置的大小比例分配请求 |
| ip_hash | 根据客户来源IP,分配至同一台服务器 |
| url_hash | 根据用户访问的URL,分配至同一台服务器 |
| least_conn | 哪台机器连接数最少,分配到哪台机器 |
1.轮询
upstream upstream {
server 10.0.0.7:80;
server 10.0.0.8:80;
}
2.加权轮询
upstream web {
server 10.0.0.7:80 weight=5;
server 10.0.0.8:80 weight=1;
}
3.ip_hash
upstream web {
server 10.0.0.7:80;
server 10.0.0.8:80;
ip_hash;
}
#会话保持
负载均衡后端状态
| 状态 | 概述 |
|---|---|
| down | 配置该状态的主机不参与负载均衡 |
| backup | 作为备份的web服务器 |
| max_fails | 最大失败次数 |
| fail_timeout | 连接失败以后,多久之后再次允许访问 |
| max_conns | 限制最大连接数 |
1.down状态
upstream web {
server 10.0.0.7:80;
server 10.0.0.8:80 down;
}
#一般在线上或灰度上线的时候使用该状态
2.backup状态
upstream web {
server 10.0.0.7:80;
server 10.0.0.8:80 backup;
}
#一般在节假日或者服务器资源不是很充足的情况下多配置几台backup
3.错误状态
upstream web {
server 10.0.0.7:80;
server 10.0.0.8:80 max_fails=1 fail_timeout=10s;
}
4.限制连接数
upstream web {
server 10.0.0.7:80;
server 10.0.0.8:80 max_conns=1;
}