什么是负载均衡?

将收到的请求,平均分配到后端服务器,当一台服务器出现问题,不影响业务

为什么要使用负载均衡

提高并发,提升响应速度,高容灾性

负载均衡厂商

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;
}
Copyright © 高程程 all right reserved,powered by Gitbook修订于: 2021-05-18 21:14:37

results matching ""

    No results matching ""