Nginx负载均衡是一种通过将客户端请求分发到多个后端服务器的技术,旨在提高系统的吞吐量、可用性和容错性。
Nginx作为反向代理服务器,接收客户端的请求,并根据配置的负载均衡算法将请求转发到后端服务器。其工作流程如下:
客户端请求到达Nginx。
Nginx根据配置的负载均衡策略选择后端服务器。
Nginx将请求转发到选定的后端服务器。
后端服务器处理请求并返回响应。
Nginx将响应返回给客户端。
所谓四层负载均衡指的是OSI七层模型中的传输层,那么传输层Nginx已经能够支持TCP/IP的控制,所以只需要对客户端的请求进行TCP/IP协议包的转发就可以实现负载均衡,它的好处就是性能非常快、只需要底层进行应用处理,而不需要一些复杂的逻辑。
七层负载均衡是在应用层,它可以完成很多方面的协议请求,比如我们所说的http的负载均衡,它可以实现http信息的改写、头信息的改写、安全应用规则控制、URL匹配规则控制,以及转发、rewrite等等的规则。Nginx是一个典型的七层负载均衡SLB。
四层负载均衡数据包在底层就进行了分发,而七层负载均衡数据包要在第七层才进行分发,所以,七层负载均衡的效率没有四层负载均衡效率高。
七层负载就均衡更贴近于服务,http协议就是在七层,我们可以通过Nginx做会话保持,URL路径规则匹配、Head头改写等等,这些都是四层负载均衡无法实现的。
四层负载均衡可以解决七层负载均衡的端口限制问题。
四层负载均衡可以解决七层负载均衡高可用问题。
调度算法 |
概述 |
轮循 |
按时间顺序逐一分配到不同的后端服务器 |
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 |
限制最大的连接接受数 |
服务器: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
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;
}
}
服务器: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
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;
}
}
服务器: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
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
yum -y install nginx
groupadd -g 666 www
useradd -u666 -g 666 -M -s /sbin/nologin www
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;
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_root$fastcgi_script_name;
include fastcgi_params;
}
}
nginx -t
systemctl start nginx
systemctl enable nginx
mkdir -p /app/admin
lz /app/phpMyAdmin-5.2.1-all-languages.zip
tar zxf phpMyAdmin-5.2.1-all-languages.zip
mv /app/admin/phpMyAdmin-5.2.1-all-languages/* /app/admin/
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
vim /etc/php-fpm.d/www.conf
同步启动用户与Nginx保持一致 www用户
24:user = www
26:group = www
修改监听方式
38:listen = 127.0.0.1:9000
systemctl start php-fpm
syatemctl enable php-fpm
yum -y install mariadb-server
systemctl start mariadb
systemctl enable mariadb
mysqladmin password 'lyx123.com'
mysql -uroot -plyx123.com
grant all on *.* to lyx@'%' identified by 'lyx123.com';
create database admin;
show databases;
10.0.0.7 www.admin.com
mkdir -p /app/admin
rsync -avz --delete [email protected]:/app/admin/* ./
10.0.0.8 www.admin.com
yum -y install redis
vim /etc/redis/redis.conf
75:bind 127.0.0.1 172.16.1.51
systemctl start redis
systemctl enable redis
redis -cli
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> quit
yum -y install gcc glibc gcc-c++ pcre-devel openssl-devel patch
wget http://pecl.php.net/get/redis-4.0.1.tgz
tar zxf redis-4.0.1.tgz
cd redis-4.0.1
phpize
./configure
make && make install
vim /etc/php.ini
1357:extension=redis.so #添加此内容
1222:session.save_handler = redis
1255:session.save_path = "tcp://172.16.1.51:6379"
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
systemctl restart php-fpm
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
yum -y install nginx
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;}
}
systemctl start nginx
systemctl enable nginx
10.0.0.6 www.admin.com
通过合理配置负载均衡策略,Nginx能够有效提升系统性能、容错能力和扩展性,是现代互联网架构中不可或缺的一部分。