负载均衡,简单理解就是:按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
实现负载均衡常用的Web服务器软件有Nginx、HAProxy、LVS、Apache,本文主要介绍Nginx的负载均衡策略。
提示:具体理论及详解在csdn等网站会有许多,本文不做详细讲解
Nginx是一个高性能的http和反向代理web服务器,是一款轻量级的web服务器·、反向代理服务器、及电子邮件(IMAP、POP3)代理服务器,具体简介百度一下有很多。
提示:nginx支持正向代理、反向代理、负载均衡、动静分离;后续理论再发;
Nginx是通过反向代理实现的负载均衡。Nginx负载均衡是通过upstream模块来实现的,内置实现了三种负载策略:
1.轮循 : Nginx根据请求次数,将每个请求均匀分配到每台服务器;
2.最少连接:将请求分配给连接数最少的服务器;
3.ip-hash :绑定处理请求的服务器;即:第一次请求时,根据该客户端的IP将请求分配到某一台服务器上,后续该客户端的所有请求都将通过之前请求的服务器进行处理。
4.权重:在轮询的基础上指定权重参数,使其能根据权重分配而不是平均分配;(其实权重是在轮循里面的,为方便理解,这里作为第四点展开)
官网:http://nginx.org/en/docs/http/load_balancing.html
1.nginx负载均衡:centos7.4
2.web服务器:centos7.4
3.IP规划:
192.168.236.31 nginx
192.168.236.25 web1
192.168.236.26 web2
提示:添加网络源是为了下载最新较稳定的nginx1.2.0
[root@nginx ~]# cd /etc/yum.repos.d #进入yum源目录
[root@nginx yum.repos.d]# vi aliyun.repo #添加阿里源,如下:
[root@nginx yum.repos.d]# cat aliyun.repo
-----------------------分隔符-----------------------------
[aliyun-os]
name=aliyun-os
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/
enabled=1
gpgcheck=0
[aliyun-epel]
name=aliyun-epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
enabled=1
gpgcheck=0
[aliyun-extra]
name=aliyun-extra
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
enabled=1
gpgcheck=0
---------------------分隔符--------------------------------
[root@nginx yum.repos.d]# yum clean all && yum makecache
提示:为简便,web服务器直接用httpd生成静态网页做模拟
[root@web1 ~]# yum install -y httpd #下载安装httpd
[root@web1 ~]# systemctl start httpd #启动httpd
[root@web1 ~]# systemctl enable httpd #设置开机启动httpd
[root@web1 ~]# systemctl status httpd #查看httpd状态
[root@web1 ~]# echo 'this is 192.169.236.25' >> /var/www/html/index.html
#重新输入web前端显示内容
[root@web1 ~]# systemctl restart httpd #重启httpd
两台服务器均执行上面操作,web1和web2区别在于写入的ip
用浏览器访问显示:
安装nginx
[root@nginx ~]# yum install -y nginx #yum下载安装nginx
------------------------------------------------------------------------------------------------
......
Installed:
nginx.x86_64 1:1.20.1-9.el7
Dependency Installed:
centos-indexhtml.noarch 0:7-9.el7.centos gperftools-libs.x86_64 0:2.6.1-1.el7
nginx-filesystem.noarch 1:1.20.1-9.el7 openssl11-libs.x86_64 1:1.1.1k-3.el7
Complete!
------------------------------------------------------------------------------------------------
启动nginx并检查
[root@nginx ~]# rpm -q nginx #检查nginx版本
nginx-1.20.1-9.el7.x86_64
[root@nginx ~]# systemctl start nginx #启动nginx
[root@nginx ~]# systemctl enable nginx #设置开机启动nginx
[root@nginx ~]# systemctl status nginx #查看nginx运行状态
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-05-03 06:44:54 EDT; 19s ago
Main PID: 1525 (nginx)
CGroup: /system.slice/nginx.service
├─1525 nginx: master process /usr/sbin/nginx
└─1526 nginx: worker process
[root@nginx ~]# nginx -t #检查nginx配置
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@nginx ~]# cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
#为防止配置文件修改后不可用,先做个备份文件
[root@nginx ~]# vi /etc/nginx/nginx.conf #修改nginx配置文件
----------------------------------------------
.......
http{
......
#在server前面添加如下内容:
upstream webserver {
server 192.168.236.25;
server 192.168.236.26;
}
#在server中修改成如下内容:
server {
listen 80;
location / {
proxy_pass http://webserver;
}
}
}
----------------------------------------------
[root@nginx ~]# nginx -t #检查nginx配置
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@nginx ~]# systemctl restart nginx #重启nginx
用浏览器多次访问nginx
可以看到,当我们多次访问nginx时,它会轮循每个服务器
Nginx根据请求次数,将每个请求均匀分配到每台服务器;
[root@web1 ~]# cat /etc/nginx/nginx.conf
-----------------------------------------------------
.......
http {
.......
upstream webserver {
server 192.168.236.25;
server 192.168.236.26;
}
server {
listen 80;
location / {
proxy_pass http://webserver;
}
}
}
-------------------------------
在轮询的基础上指定权重参数,使其能根据权重分配而不是平均分配;
[root@web1 ~]# cat /etc/nginx/nginx.conf
-----------------------------------------------------
.......
http {
.......
upstream webserver {
server 192.168.236.25 weight=2; # 2/3次;
server 192.168.236.26 weight=1; # 1/3次;
}
server {
listen 80;
location / {
proxy_pass http://webserver;
}
}
}
将请求分配给连接数最少的服务器;
[root@web1 ~]# cat /etc/nginx/nginx.conf
-----------------------------------------------------
.......
http {
.......
upstream webserver {
least_conn;
server 192.168.236.25;
server 192.168.236.26;
}
server {
listen 80;
location / {
proxy_pass http://webserver;
}
}
}
绑定处理请求的服务器;即:第一次请求时,根据该客户端的IP将请求分配到某一台服务器上,后续该客户端的所有请求都将通过之前请求的服务器进行处理
[root@web1 ~]# cat /etc/nginx/nginx.conf
-----------------------------------------------------
.......
http {
.......
upstream webserver {
ip_hash;
server 192.168.236.25 ;
server 192.168.236.26 ;
}
server {
listen 80;
location / {
proxy_pass http://webserver;
}
}
}
以上就是简单的nginx负载均衡搭建,通过负载均衡,我们可以看到我们每次请求都是访问不同服务器,这样就避免的某单一服务器的访问过多过载。
官网文档:http://nginx.org/en/docs/
正向代理是客户端的代理
隐藏真实的客户端,使真实客户端对服务器不可见。
用户发送请求到代理服务器→代理服务器发送请求到服务器→
服务器将数据返回到代理服务器→代理服务器将数据返回给用户
反向代理是服务器的代理
隐藏真实的服务器,使真实服务器对客户端不可见。
用户发送请求到服务器(实为反向代理服务器)→反向代理服务器发送请求到真实服务器→
真实服务器将数据返回给反向代理服务器→反向代理服务器将数据返回给用户