nginx的平滑升级、反向代理负载均衡

文章目录

  • 前言
  • 一、负载均衡介绍
  • 二、nginx的平滑升级和版本回滚
    • 1.平滑升级
    • 2.版本回滚
    • 3.本实验纯代码过程
  • 三、反向代理负载均衡
    • 1.修改nginx服务启动用户
    • 2.nginx进程与cpu核心绑定
    • 3.修改nginx并发连接数
    • 4.测试
    • 5.本实验纯代码过程

前言

LAMP( Linux-Apache-MySQL-PHP)网站架构是目前国际流行的 Web 框架,该框架包括:Linux操作系统,Apache 网络服务器,MySQL数据库,Perl、PHP 或者 Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和Java/J2EE 架构相比,LAMP具有Web 资源丰富、轻量、快速开发等特点,微软的.NET 架构相比,LAMP 具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。


一、负载均衡介绍

四层负载均衡
所谓四层负载均衡是指OSI七层模型中的传输层, 那么传输层Nginx已经支持TCP/IP的控制, 所以只需要对客户端的请求进行TCP/IP协议的包转发就可以实现负载, 那么他的好处是性能非常快, 只需要底层进行应用处理,而不需要进行一些复杂的逻辑.
七层负载均衡
七层负载均衡是在应用层,那么他可以完成后很多应用方面的协议请求,
当然四层有四层的好处,七层七层的好处,四层就不支持协议的转发,(http,https,DNS等)只支持IP,但是它的速度快.
应用层虽然没有四层负载快,但是支持很多功能,比如说他支持http信息的改写、头部信息的改写、(意识是,七层代理着用户往后请求的时候把我们用户请求的头部信息加上,长连接协议也可以修改等)、
安全应用规则控制、URL匹配规则控制、以及转发、rewrite等一些规则,
所以在应用层的服务里面,可以做的内容就更多了。Nginx是一个典型的七层负载均衡
四层和七层的区别
四层负载均衡数据在底层就进行了分发,而七层负载均衡数据包则是在最顶层进行分发,由此可以看出,七层负载均衡效率没有四层负载均衡高。
但是七层负载均衡更贴近于服务,如HTTP协议就是七层协议,我们可以用Nginx可以作会话保持,URL路径规则匹配,head头改写等等,这些都是四层负载均衡无法实现的。
注意:四层负载均衡不识别域名,七层负载均衡识别域名

二、nginx的平滑升级和版本回滚

1.平滑升级

有些时候我们使用的nginx版本需要更新,但是我们又因为某些原因不能关闭nginx,所以就需要进行平滑升级,在开启nginx的同时,对其进行升级

软件下载:https://nginx.org/en/download.html
首先tar新的版本,进入目录之后进行源码编译,因为我们是进行升级,所以不用进行make install;
nginx的平滑升级、反向代理负载均衡_第1张图片nginx的平滑升级、反向代理负载均衡_第2张图片
以防万一,对原来的二进制nginx文件进行备份为nginx.old;接着对原来的nginx进行覆盖,但是在覆盖的过程中会发现显示在忙,这个时候我们可以采取-f强制覆盖,加\的原因是忽略隐藏,直接执行现在的命令;nginx的平滑升级、反向代理负载均衡_第3张图片
我们在覆盖之后再次查看依旧是原来的版本,这是因为这些都存在于内存中,内存中并未改变,所以我们需要使用kill -USR2 加进程号来唤醒(开启)新版本进程,并且用kill -WINCH 加进程号回收(终止)原来的worker进程nginx的平滑升级、反向代理负载均衡_第4张图片master负责接收,分配给下面的worker,worker数量越多,nginx负载均衡的能力更强,处理的并发数更多
注:后续实验为重新做,故进程数有变化
nginx的平滑升级、反向代理负载均衡_第5张图片

2.版本回滚

如果在我们升级之后又需要用到老版本,那么就要进行回滚;我们首先将原来复制的nginx.old复制给nginx然后用kill -HUP唤醒原进程,并且采用kill -WINCH 来回收新进程中的worker进程,这个时候就完成了版本回滚
nginx的平滑升级、反向代理负载均衡_第6张图片nginx的平滑升级、反向代理负载均衡_第7张图片
实际在企业当中,如果更新失败立马就要回滚,并且更新的时候只能进行一次,失败立马回滚

3.本实验纯代码过程

##平滑升级
软件下载:https://nginx.org/en/download.html

[root@server1 ~]# tar zxf nginx-1.23.3.tar.gz
[root@server1 ~]# cd nginx-1.23.3/
[root@server1 nginx-1.23.3]# vim auto/cc/gcc

[root@server1 nginx-1.23.3]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
[root@server1 nginx-1.23.3]# make
备份原程序
[root@server1 nginx-1.23.3]# cd /usr/local/nginx/sbin/
[root@server1 sbin]# cp nginx nginx.old
拷贝新程序
[root@server1 sbin]# \cp -f /root/nginx-1.23.3/objs/nginx nginx

获取nginx进程Pid
[root@server1 sbin]# ps ax |grep nginx
唤醒新程序进程
[root@server1 objs]# kill -USR2 19100
[root@server1 objs]# ps ax |grep nginx    ##此时依然是旧版本
回收旧版本进程
[root@server1 objs]# kill -WINCH 19100
[root@server1 objs]# ps ax |grep nginx    ##完成平滑升级
##版本回退
拷贝原程序
[root@server1 objs]# cd /usr/local/nginx/sbin/
[root@server1 sbin]# \cp -f nginx.old nginx
唤醒原版本
[root@server1 sbin]# kill -HUP 19100
[root@server1 sbin]# ps ax |grep nginx     ##此时还是新版本
回收新版本
[root@server1 sbin]# kill -WINCH 19129
[root@server1 sbin]# ps ax |grep nginx     ##完成回滚
删除不需要的进程
[root@server1 sbin]# kill -9 19129
[root@server1 sbin]# ps ax |grep nginx

三、反向代理负载均衡

1.修改nginx服务启动用户

2.nginx进程与cpu核心绑定

添加nginx用户、编辑nginx的配置文件,编辑文件前,先查看CPU核心数量
nginx的平滑升级、反向代理负载均衡_第8张图片
nginx的平滑升级、反向代理负载均衡_第9张图片nginx的平滑升级、反向代理负载均衡_第10张图片
推荐设置:nginx进程数量与cpu和核心数一致,worker只用指定的CPU核心,不用来回切换,减少损耗,性能更好
nginx的平滑升级、反向代理负载均衡_第11张图片在这里插入图片描述

3.修改nginx并发连接数

vim nginx.conf
在这里插入图片描述
vim /etc/security/limits.conf(修改系统限制
)nginx的平滑升级、反向代理负载均衡_第12张图片
内核参数是根据本机物理资源自动配置的,一般不需要修改
在这里插入图片描述
负载均衡设置:https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/
nginx的平滑升级、反向代理负载均衡_第13张图片nginx的平滑升级、反向代理负载均衡_第14张图片
修改server3 端口为8080
[root@server3 conf]# vim /etc/httpd/conf/httpd.conf
Listen 8080
在这里插入图片描述

4.测试

server4测试
nginx的平滑升级、反向代理负载均衡_第15张图片
server1安装httpd
[root@server1 conf]# yum install -y httpd
[root@server1 conf]# vim /etc/httpd/conf/httpd.conf
Listen 8080

[root@server1 conf]# echo server1 > /var/www/html/index.html
[root@server1 conf]# systemctl start httpd
在这里插入图片描述
nginx对后端自带健康检测
关闭server2上的服务
[root@server2 ~]# systemctl stop httpd
nginx的平滑升级、反向代理负载均衡_第16张图片
再关闭server3上的服务,backup生效
[root@server3 ~]# systemctl stop httpd
nginx的平滑升级、反向代理负载均衡_第17张图片

至此,实现反向代理负载均衡

5.本实验纯代码过程

修改nginx服务启动用户

[root@server1 conf]# useradd -M -d /usr/local/nginx/ -s /sbin/nologin nginx
[root@server1 ~]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf
user nginx;
...

[root@server1 conf]# nginx  -s reload
[root@server1 conf]# ps axu |grep nginx
root      19100  0.0  0.0  46020  2000 ?        Ss   16:13   0:00 nginx: master process nginx
nginx     19279  0.0  0.1  46452  2036 ?        S    17:24   0:00 nginx: worker process

nginx进程与cpu核心绑定

推荐设置:nginx进程数量与cpu和核心数一致
[root@server1 conf]# vim nginx.conf
user nginx;
worker_processes  2;
worker_cpu_affinity 01 10;
...

[root@server1 conf]# nginx  -s reload
[root@server1 conf]# ps axu |grep nginx
root      19100  0.0  0.0  46020  2000 ?        Ss   16:13   0:00 nginx: master process nginx
nginx     19279  0.0  0.1  46452  2036 ?        S    17:24   0:00 nginx: worker process
nginx     19280  0.0  0.1  46452  2036 ?        S    17:24   0:00 nginx: worker process

修改nginx并发连接数

[root@server1 conf]# vim nginx.conf
...
events {
    worker_connections  65535;
}

修改系统限制
[root@server1 conf]# vim /etc/security/limits.conf
nginx - nofile  65535

内核参数是根据本机物理资源自动配置的,一般不需要修改
[root@server1 conf]# sysctl fs.file-max
fs.file-max = 197384

负载均衡设置
文档:https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

[root@server1 conf]# vim nginx.conf
...
http {
    upstream westos {
        server 192.168.56.12;
        server 192.168.56.13:8080;
        server 192.168.56.11:8080 backup;
    }
...
    server {
        listen       80;
        server_name  localhost;

        location / {
            #root   html;
            #index  index.html index.htm;
            proxy_pass http://westos;
        }
...

[root@server1 conf]# nginx  -s reload

server2和server3启动httpd服务
[root@server2 ~]# netstat -antlp|grep :80
tcp6       0      0 :::80                   :::*                    LISTEN      8043/httpd

[root@server3 ~]# netstat -antlp|grep :80
tcp6       0      0 :::8080                 :::*                    LISTEN      7875/httpd

server1安装httpd
[root@server1 conf]# yum install -y httpd
[root@server1 conf]# vim /etc/httpd/conf/httpd.conf
Listen 8080
...

[root@server1 conf]# echo server1 > /var/www/html/index.html
[root@server1 conf]# systemctl  start httpd
[root@server1 conf]# netstat -antlp|grep :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      19100/nginx: master
tcp6       0      0 :::8080                 :::*                    LISTEN      20277/httpd

测试

一次关闭server2、server3的httpd服务,进行测试即可


你可能感兴趣的:(nginx,nginx,负载均衡,运维)