Nginx的负载均衡

一、概述

Nginx负载均衡是一种通过将客户端请求分发到多个后端服务器的技术,旨在提高系统的吞吐量、可用性和容错性。

二、Nginx负载均衡工作原理

Nginx作为反向代理服务器,接收客户端的请求,并根据配置的负载均衡算法将请求转发到后端服务器。其工作流程如下:

  1. 客户端请求到达Nginx。

  2. Nginx根据配置的负载均衡策略选择后端服务器。

  3. Nginx将请求转发到选定的后端服务器。

  4. 后端服务器处理请求并返回响应。

  5. Nginx将响应返回给客户端。

三、负载均衡可以实现的场景

3.1、四层负载均衡

所谓四层负载均衡指的是OSI七层模型中的传输层,那么传输层Nginx已经能够支持TCP/IP的控制,所以只需要对客户端的请求进行TCP/IP协议包的转发就可以实现负载均衡,它的好处就是性能非常快、只需要底层进行应用处理,而不需要一些复杂的逻辑。

3.2、七层负载均衡

七层负载均衡是在应用层,它可以完成很多方面的协议请求,比如我们所说的http的负载均衡,它可以实现http信息的改写、头信息的改写、安全应用规则控制、URL匹配规则控制,以及转发、rewrite等等的规则。Nginx是一个典型的七层负载均衡SLB。

3.3、四层负载均衡与七层负载均衡的区别

四层负载均衡数据包在底层就进行了分发,而七层负载均衡数据包要在第七层才进行分发,所以,七层负载均衡的效率没有四层负载均衡效率高。

七层负载就均衡更贴近于服务,http协议就是在七层,我们可以通过Nginx做会话保持,URL路径规则匹配、Head头改写等等,这些都是四层负载均衡无法实现的。

四层负载均衡可以解决七层负载均衡的端口限制问题。

四层负载均衡可以解决七层负载均衡高可用问题。

四、Nginx负载均衡调度算法

|--------------|---------------------------------------------|
| 调度算法 | 概述 |
| 轮循 | 按时间顺序逐一分配到不同的后端服务器 |
| Weight(加权轮循) | Weight的值越大,分配到的访问几率就越高 |
| Ip_hash | 每个请求按访问的IP的hash值结果进行分配,来自同一个IP的客户端会访问固定的服务器 |
| url_hash | 按照访问的URL的hash值结果进行分配,每个URL定向到同一个后端服务器 |
| Least_conn | 最少链接数,哪个服务器链接数少就发给哪个 |

五、负载均衡后端状态

|--------------|-----------------------|
| 状态 | 概述 |
| down | 当前的server不参与负载均衡 |
| backup | 预留的备份服务器 |
| Max_fails | 允许请求失败的次数 |
| Fail_timeout | 经过max_fails失败后,服务暂停时间 |
| Max_conns | 限制最大的连接接受数 |

5.1、down状态

5.1.1、实验虚拟机配置

服务器:web01 10.0.0.7 172.16.1.7 #安装Nginx、PHP、MuSQL

服务器:web02 10.0.0.8 172.16.1.8 #安装Nginx、PHP、MuSQL

负载均衡服务器: lb 10.0.0.6 172.16.1.6 #安装Nginx

5.1.2、在负载均衡服务器上配置服务文件

upstream webs {

server 172.16.1.7 down; #表示web01服务器不参与负载均衡服务

server 172.16.1.8;

}

server {

listen 80;

server_name www.lv.com;

location / {

proxy_pass http://webs;

include proxy_params;

}

}

5.2、backup状态

5.2.1实验虚拟机配置

服务器:web01 10.0.0.7 172.16.1.7 #安装Nginx、PHP、MuSQL

服务器:web02 10.0.0.8 172.16.1.8 #安装Nginx、PHP、MuSQL

负载均衡服务器: lb 10.0.0.6 172.16.1.6 #安装Nginx

5.2.2、 在负载均衡服务器上配置服务文件

upstream webs {

server 172.16.1.7 backup; #预留的备份服务器

server 172.16.1.8;

}

server {

listen 80;

server_name www.lv.com;

location / {

proxy_pass http://webs;

include proxy_params;

}

}

六、实验演示案例(PhpMyadmin)

6.1、实验虚拟机配置

服务器:web01 10.0.0.7 172.16.1.7 #安装Nginx、PHP、MuSQL

服务器:web02 10.0.0.8 172.16.1.8 #安装Nginx、PHP、MuSQL

数据库:mysql 10.0.0.51 172.16.1.51 #安装mariadb-server

负载均衡服务器: lb 10.0.0.6 172.16.1.6 #安装Nginx

6.2、服务器web01配置

6.2.1、安装Nginx服务

6.2.1.1、配置Nginx官方扩展仓库

vim /etc/yum.repos.d/nginx.repo

[nginx-stable]

name=nginx stable repo

baseurl=http://nginx.org/packages/centos/7/$basearch/

gpgcheck=0

enabled=1

gpgkey=https://nginx.org/keys/nginx_signing.key

module_hotfixes=true

6.2.1.2、安装Nginx服务

yum -y install nginx

6.2.1.3、创建启动用户www

groupadd -g 666 www

useradd -u666 -g 666 -M -s /sbin/nologin www

6.2.1.4、修改Nginx配置文件

vim /etc/nginx/nginx.conf

user www;

worker_processes auto;

error_log /var/log/nginx/error.log notice;

pid /var/run/nginx.pid;

events {

worker_connections 1024;

6.2.1.5、编辑PhpMyadmin配置文件

vim /etc/nginx/conf.d/admin.conf

server {

listen 80;

server_name www.admin.com;

root /app/admin;

location / {

index index.html index.php;

}

location ~ \.php$ {

fastcgi_pass 127.0.0.1:9000;

fastcgi_param SCRIPT_FILENAME document_rootfastcgi_script_name;

include fastcgi_params;

}

}

6.2.1.6、检查配置文件语法正确性

nginx -t

6.2.1.7、启动Nginx并加入开机自启动

systemctl start nginx

systemctl enable nginx

6.2.1.8、创建PhpMyadmin代码目录

mkdir -p /app/admin

6.2.1.9、将PhpMyadmin代码拷贝到PhpMyadmin代码目录

lz /app/phpMyAdmin-5.2.1-all-languages.zip

6.2.1.10、解压PhpMyadmin代码

tar zxf phpMyAdmin-5.2.1-all-languages.zip

6.2.1.10、将PhpMyadmin目录下的代码移到/app/admin

mv /app/admin/phpMyAdmin-5.2.1-all-languages/* /app/admin/

6.2.2、安装PHP服务

6.2.2.1、安装PHP应用软件组

yum -y install php php-bcmath php-cli php-common php-devel php-embedded php-fpm php-gd php-intl php-mbstring php-mysqlnd php-opcache php-pdo php-process php-xml php-json

6.2.2.2、修改PHP配置文件

vim /etc/php-fpm.d/www.conf

同步启动用户与Nginx保持一致 www用户

24:user = www

26:group = www

修改监听方式

38:listen = 127.0.0.1:9000

6.2.2.3、启动PHP服务并加入开机自启动

systemctl start php-fpm

syatemctl enable php-fpm

6.3、在mysql服务器上安装mariadb服务

6.3.1 、安装mariadb

yum -y install mariadb-server

6.3.2、开启数据库并加入开机自启动

systemctl start mariadb

systemctl enable mariadb

6.3.3、创建数据库登录秘密

mysqladmin password 'lyx123.com'

6.3.4、登录数据库

mysql -uroot -plyx123.com

6.3.5、创建数据库远程登录用户

grant all on *.* to lyx@'%' identified by 'lyx123.com';

6.3.6、创建admin数据库

create database admin;

6.3.7、检查数据库

show databases;

6.4、本地hosts解析

10.0.0.7 www.admin.com

6.5、浏览器访问

6.6、服务器web02配置

6.6.1、安装Nginx服务与PHP服务同web01服务器一样
6.6.2、创建代码目录文件

mkdir -p /app/admin

6.6.3、同步web01的admin代码到web02下 (当前在web02服务器/app/admin)

rsync -avz --delete root@10.0.0.7:/app/admin/* ./

6.7、本地hosts解析

10.0.0.8 www.admin.com

6.9、浏览器访问

6.10、在mysql服务器安装会话保持

6.10.1、安装redis服务

yum -y install redis

6.10.2、 配置redis的监听端口

vim /etc/redis/redis.conf

75:bind 127.0.0.1 172.16.1.51

6.10.3、启动redis服务并加入开机自启动

systemctl start redis

systemctl enable redis

6.10.4、查看登录

redis -cli

127.0.0.1:6379> keys *

(empty array)

127.0.0.1:6379> quit

6.11、将两台web服务写入到redis (两台服务器都做如下操作)

6.11.1、安装redis插件

yum -y install gcc glibc gcc-c++ pcre-devel openssl-devel patch

6.11.2、下载redis源码包到/root

wget http://pecl.php.net/get/redis-4.0.1.tgz

6.11.3、在/root目录下解压redis源码包

tar zxf redis-4.0.1.tgz

6.11.4、配置初始化

cd redis-4.0.1

phpize

./configure

6.11.5、编译安装

make && make install

6.11.6、开启redis插件功能

vim /etc/php.ini

1357:extension=redis.so #添加此内容

1222:session.save_handler = redis

1255:session.save_path = "tcp://172.16.1.51:6379"

6.11.7、修改 配置文件

vim /etc/php-fpm.d/www.conf

;php_value[session.save_handler] = files

;php_value[session.save_path] = /var/lib/php/session

php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache

;php_value[opcache.file_cache] = /var/lib/php/opcache

6.11.8、重启PHP服务

systemctl restart php-fpm

6.12、搭建负载均衡

6.12.1、 负载均衡服务器配置Nginx官方仓库

vim /etc/yum.repos.d/nginx.repo

[nginx-stable]

name=nginx stable repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=1

enabled=1

gpgkey=https://nginx.org/keys/nginx_signing.key

module_hotfixes=true

6.12.2、安装Nginx服务

yum -y install nginx

6.12.3、编辑负载均衡配置文件

vim /etc/nginx/conf.d/lb.conf

upstream lb {

server 172.16.1.7:80;

server 172.16.1.8:80;

}

server {

listen 80;

server_ name www.admin.com;

location / {

proxy_pass http://lb;

proxy_set_header HOST $host;

proxy_buffers 256 4k;

proxy_max_temp_file_size 0k;

proxy_connect_timeout 60;

proxy_send_timeout 60;

proxy_read_timeout 60;

proxy_next_upstream error timeout invalid_header http_502 http_500 http_503 http_504;

proxy_set_header X-Forwarded-For $proxy_add__x_forwarded_for;

}

}

6.12.4、启动Nginx并加入开机自启动

systemctl start nginx

systemctl enable nginx

6.13、本地hosts解析

10.0.0.6 www.admin.com

6.14、浏览器访问测试

七、总结

通过合理配置负载均衡策略,Nginx能够有效提升系统性能、容错能力和扩展性,是现代互联网架构中不可或缺的一部分。

相关推荐
前端 贾公子3 小时前
速通Docker === Dockerfile
运维·docker·容器
dntktop7 小时前
Fort Firewall:全方位守护网络安全
运维·windows
一张假钞8 小时前
Ubuntu 20.04 Realtek 8852无线网卡驱动
linux·运维·ubuntu
7yewh8 小时前
嵌入式知识点总结 Linux驱动 (三)-文件系统
linux·运维·驱动开发·stm32·嵌入式硬件·mcu·物联网
青春:一叶知秋9 小时前
【Linux网络编程】数据链路层
运维·服务器·网络
真正的醒悟9 小时前
智能安全策略-DPL
运维·服务器
爱吃喵的鲤鱼9 小时前
Linux——网络基础(1)
linux·运维·网络
Lilixxs10 小时前
开发环境搭建-3:配置 JavaScript 开发环境 (fnm+ nodejs + pnpm + nrm)
linux·运维·javascript·pnpm·fnm
我的运维人生10 小时前
备份与恢复管理系统深度解析及代码实践
linux·运维·服务器·运维开发·技术共享
jiang0615csdn13 小时前
linux监控脚本+自动触发邮件发送
linux·运维·服务器