• Nginx全家桶配置详解


    请添加图片描述

    1. 源码包安装NGINX A,搭建Web Server,任意HTML页面,其8080端口提供Web访问服务,截图成功访问http(s)://[Server1]:8080并且回显Web页面。
    2. 保留Server1,但是不允许直接访问Server 1,再部署1套NGINX B,利用其实现反向代理功能,要求有且仅有访问http://elite.chaitin.com 可以访问到Web Server1的8080服务。(截图并详细说明NGINX上配置/参数)
    3. (加强提升题目)假设再加1套Web Server 2,其8080端口提供与Server 1相同服务,如何配置NGINX A实现访问http://elite.chaitin.com 的请求可以被负载分发到Server1或者Server2?
    4. 在上文题目2基础之上,增加节点NGINX B,如何配置实现高可用?demo演示当NGINX A故障时,流量自动切换到NGINX B(客户端访问几乎无感知)。详细说明VRRP协议在本题所述场景下的应用。
    5. (加强提升题目)在上文题目3基础之上,配置和验证NGINX支持哪些负载均衡算法及其效果?并结合NGINX配置参数详细说明不同负载均衡算法工作原理。
    6. (加强提升题目)在上文题目3基础之上,配置和验证主动和被动两种健康检查方式及其效果?并结合NGINX配置参数详细说明不同健康检查方式区别和工作原理。

    实验环境:

    Ubuntu 20.04 64bit
    实验前关闭防火墙和selinux
    
    • 1
    • 2
    server18.140.24.100
    server28.140.240.19

    要求1 nginx的部署

    要求1. 源码包安装NGINX A,搭建Web Server,任意HTML页面,其18080端口提供Web访问服务,截图成功访问http(s)://[Server1]:18080并且回显Web页面。

    注:因为服务器的8080端口没有开放到外网访问,只开放了18080-18086的端口到外网;所以我将题目中的8080端口改成了18080端口来做实验(端口的改变不会影响实验的效果)
    获取nginx源码包

    wget https://nginx.org/download/nginx-1.22.1.tar.gz
    
    • 1

    请添加图片描述
    安装源码编译环境

    yum install gcc gcc-c++ pcre pcre-devel openssl openssl-devel -y
    
    • 1

    将此目录设置为nginx源码存放目录

    /usr/local/src
    
    • 1

    将源码包移动到该目录下

    [root@centos ~]# mv nginx-1.22.1.tar.gz /usr/local/src/
    
    • 1

    将源码包文件解压缩

    [root@centos ~]# cd /usr/local/src/
    [root@centos src]# tar xf nginx-1.22.1.tar.gz 
    
    • 1
    • 2

    编译参数详解

    [root@centos nginx-1.22.1]# ./configure --help
    
    --prefix= 指向安装目录
    --sbin-path 指向(执行)程序文件(nginx)
    --conf-path= 指向配置文件(nginx.conf)
    --pid-path= 指向 pid 文件( nginx.pid )--lock-path= 指向 lock 文件( nginx.lock)(安装文件锁定,防止安装文件被别人利用
    或自己误操作。)
    --user= 指定程序运行时的非特权用户
    --group= 指定程序运行时的非特权用户组
    --builddir= 指向编译目录
    --with-rtsig_module 启用rtsig 模块支持(实时信号)--with-select_module 启用 select 模块支持(一种轮询模式,不推荐在高载环境下使用)
    禁用:--without-select _module
    --with-poll _module 启用 poll 模块支持(功能与select相同,与select特性相同,为
    种轮询模式,不推荐在高载环境下使用)
    --with-file-aio 启用file aio 支持(一种 APL文件传输格式
    --with-ipv6 启用ipv6 支持
    --with-file-aio 启用file aio 支持(一种 APL文件传输格式--with-ipv6 启用ipv6支持
    --with-http_ssl_module 启用 ngx http_ssl module 支持(使支持https 请求,需已安装
    openssl)
    --with-http realip_module 启用 ngx http_realip_module 支持 这个模块允许从请求标
    头更改客户端的IP 地址值,默认为关 )
    --with-http addition module 启用 ngx http addition module 支持(作为一个输出过滤器,支持不完全缓冲,分部分响应请求 )
    --with-http xslt module 启用 ngx http_xslt _module 支持(过滤转换 XML请求)
    --with-http image filter module 启用 ngx http image filter module 支持 ( 传输JPEG/GIF/PNG 图片的一个过滤器)(默认为不启用。gd 库要用到) --with-http_geoip_module 启用 ngx_http_geoip_module 支持(该模块创建基于与 MaxMind GeoIP 二进制文件相配的客户端 IP 地址的 ngx_http_geoip_module 变量) --with-http_sub_module 启用 ngx_http_sub_module 支持(允许用一些其他文本替换 nginx 响应中的一些文本)
    --with-http_dav_module 启用ngx_http_dav_module支持(增加PUT,DELETE,MKCOL: 创建集合,COPY 和 MOVE 方法)默认情况下为关闭,需编译开启
    --with-http_flv_module 启用 ngx_http_flv_module 支持(提供寻求内存使用基于时间的 偏移量文件)
    --with-http_gzip_static_module 启用 ngx_http_gzip_static_module 支持(在线实时压 缩输出数据流)
    --with-http_random_index_module 启用 ngx_http_random_index_module 支持(从 目录中随机挑选一个目录索引)
    --with-http_secure_link_module 启用 ngx_http_secure_link_module 支持(计算和检 查要求所需的安全链接网址)
    --with-http_degradation_module 启用 ngx_http_degradation_module 支持(允许在 内存不足的情况下返回 204 或 444 码)
    --with-http_stub_status_module 启用ngx_http_stub_status_module支持(获取nginx 自上次启动以来的工作状态)
    --without-http_auth_basic_module 禁用 ngx_http_auth_basic_module(该模块是可以 使用用户名和密码基于 http 基本认证方法来保护你的站点或其部分内容) --without-http_autoindex_module 禁用 disable ngx_http_autoindex_module 支持 (该模块用于自动生成目录列表,只在 ngx_http_index_module 模块未找到索引文件时发 出请求。)
    --without-http_geo_module 禁用 ngx_http_geo_module 支持(创建一些变量,其值依 赖于客户端的 IP 地址)
    --without-http_map_module 禁用 ngx_http_map_module 支持(使用任意的键/值对设 置配置变量)
    --without-http_split_clients_module 禁用 ngx_http_split_clients_module 支持(该模 块用来基于某些条件划分用户。条件如:ip 地址、报头、cookies 等等) --without-http_referer_module 禁用 disable ngx_http_referer_module 支持(该模块 用来过滤请求,拒绝报头中 Referer 值不正确的请求)
    --http-proxy-temp-path= 设定 http 代理临时文件路径
    --http-fastcgi-temp-path= 设定 http fastcgi 临时文件路径 --http-uwsgi-temp-path= 设定 http uwsgi 临时文件路径
    --http-scgi-temp-path= 设定 http scgi 临时文件路径
    -without-http 禁用 http server 功能
    --without-http-cache 禁用 http cache 功能
    --with-mail 启用 POP3/IMAP4/SMTP 代理模块支持
    --with-mail_ssl_module 启用 ngx_mail_ssl_module 支持
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    通用配置选项

    --prefix=<path> 指定 Nginx 的安装路径,所有其他的路径都要依赖于该选项
    --sbin-path=<path> 指定 Nginx 二进制文件的路径。如果没有指定,那么这 个路径将依赖于--prefix 选项
    --conf-path=<path> 指定 Nginx 的配置文件的路径,如果在命令行没有指定 配置文件,那么将会通过这里指定路径。
    --error-log-path=<path> 文件,除非有其它的配置。
    --pid-path=<path> /var/run 下
    --lock-path=<path> 	共享存储器互斥锁文件的路径
    --user=<user> 	worker 进程运行的用户
    --group=<group> 	worker 进程运行的组
    --with-file-aio. 	为 FreeBSD4.3 +和 linux 2.6.22 +系统启用异步 I/O
    --with-debug		这个选项用于启用调试日志,在生产环境的系统中不推荐使用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    检查安装了nginx后是否有这个用户

    [root@centos nginx-1.22.1]# id nginx
    uid=997(nginx) gid=995(nginx) 组=995(nginx)
    
    • 1
    • 2

    源码编译安装nginx

    [root@centos nginx-1.22.1]# ./configure \
    > --user=nginx \
    > --group=nginx \
    > --prefix=/usr/local/nginx \
    > --with-http_stub_status_module \
    > --with-http_ssl_module
    [root@centos nginx-1.22.1]# make && make install
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    请添加图片描述
    请添加图片描述
    给nginx写启动脚本

    [root@centos sbin]# pwd
    /usr/local/nginx/sbin
    [root@centos sbin]# vim /usr/lib/systemd/system/nginx.service
    
    [Unit]
    Description=nginx - high performance web server
    Documentation=http://nginx.org/en/docs/
    After=network-online.target remote-fs.target nss-lookup.target
    Wants=network-online.target
    
    [Service]
    Type=forking
    PIDFile=/usr/local/nginx/logs/nginx.pid
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s stop
    
    [Install]
    WantedBy=multi-user.target
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    启动报错及原因排查
    请添加图片描述
    在这个报错信息里面发现80端口被占用,所以我修改了nginx默认的配置文件,将监听端口设置为81
    请添加图片描述
    location匹配优先级

    1.精确匹配 (=2.字符串匹配,不做正则匹配检查(^~3.正则匹配
    4.字符串匹配,如果有正则优先正则
    5.所有都匹配不到,默认匹配 /
    
    • 1
    • 2
    • 3
    • 4
    • 5

    请添加图片描述

    加载并启动配置文件

    [root@centos sbin]# systemctl daemon-reload	#加载配置文件
    [root@centos sbin]# systemctl start nginx		#启动nginx
    
    • 1
    • 2

    查看服务器IP:
    根据题目一的要求,将配置文件改为监听18080端口,访问页面的路径改为/var/www/html

     server {
            listen  18080;	  #监听18080端口
    
            server_name  elite.chaitin.com;    #指定服务器的域名
    
            location / {		#/表示匹配任意请求路径
                root   /var/www/html;	#指定响应目录
                index  index.html index.htm;	#访问该目录下的 index.html 或 index.htm 文件
         		服务器会首先查找 index.html 文件,如果找不到则查找 index.htm 文件。
            }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    请添加图片描述

    写一个访问页面并重启nginx服务

    root@iZ2zei3ltzorcuiiynrseqZ:~#  echo 'Welcome to Chaitin!' > /var/www/html/index.html
    root@iZ2zei3ltzorcuiiynrseqZ:~# systemctl daemon-reload
    root@iZ2zei3ltzorcuiiynrseqZ:~#  systemctl restart nginx
    
    • 1
    • 2
    • 3

    访问成功!
    请添加图片描述
    请添加图片描述

    要求2 nginx反向代理

    要求2. 保留Server1,但是不允许直接访问Server 1,再部署1套NGINX B,利用其实现反向代理功能,要求有且仅有访问http://elite.chaitin.com 可以访问到Web Server1的8080服务。(截图并详细说明NGINX上配置/参数)

    步骤一:
    另开一台server2 服务器 8.140.240.19,直接安装nginx

    root@iZ2zei3ltzorcuiiynrsemZ~# apt-get install nginx
    
    • 1

    将原配置文件备份,避免错误修改配置后不能找回原有文件

    root@iZ2zei3ltzorcuiiynrsemZ:cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
    
    • 1

    因为我的服务器做了限制,两台服务器之间不能互通,所以我们使用两台服务器的内网地址
    请添加图片描述
    server2
    请添加图片描述
    server1
    请添加图片描述
    server2测试与server1的内网连通信
    请添加图片描述
    步骤二:
    server2的nginx配置文件

     server {
              listen 80; #监听端口
              server_name _; #所有不匹配elite.chaitin.com的请求全都返回404
    
              location / {
              return 404;
            }
            }
    #访问elite.chaitin.com的请求都会转发到http://172.28.253.102:18080 并将结果返回给客户端
            server{
            listen  80;
            server_name elite.chaitin.com;
    
            location / {
            proxy_pass http://172.28.253.102:18080;
            }
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    写dns解析:

    root@iZ2zei3ltzorcuiiynrsemZ:~# vim /etc/hosts
    172.28.253.107  elite.chaitin.com
    
    • 1
    • 2

    测试访问:
    server2上访问
    请添加图片描述
    访问server2的IP只能看到server2的nginx默认页面,看不到server1的页面
    请添加图片描述

    要求3 nginx负载均衡

    要求3.假设再加1套Web Server 2,其8080端口提供与Server 1相同服务,如何配置NGINX A实现访问http://elite.chaitin.com 的请求可以被负载分发到Server1或者Server2?
    这里我用自己的本地虚拟机做实验

    server1192.168.15.133
    server2192.168.15.138
    负载均衡调度器192.168.15.140

    所有服务器都关闭防火墙和selinux
    步骤一:server1和server2基础配置
    每台服务器上都安装nginx服务
    请添加图片描述
    server1和server2都做:
    server1和server2的配置相同

     server {
            listen       8080;
            server_name  elite.chaitin.com;
            root         /chaitin/www; #自己定义的访问页面
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            error_page 404 /404.html;
            location = /404.html {
            }
    
            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述
    加载启动配置文件,创建web页面,拷贝给server2
    请添加图片描述
    域名解析
    请添加图片描述
    测试访问页面
    请添加图片描述
    步骤二:负载均衡调度器配置:

        upstream server_pools {  #接收来自server中的请求
            server 192.168.15.138:8080 weight=1; #两个服务器的权重都一样,会把所有请求相对均匀的分配到两台服务器上
            server 192.168.15.133:8080 weight=1;
    
     }
    
        server{
            listen 8080;
            server_name _;	#所有不是请求elite.chaitin.com域名的8080服务都会被禁止并返回403的状态码
            location / {
                    return 403;
             }
     }
    
        server{
            listen 8080;
            server_name elite.chaitin.com;
            location / {
            proxy_pass http://server_pools; #访问8080端口且以elite.chaitin.com为域名的请求,会把请求转发到server_pools的负载均衡池
                    }
            }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    请添加图片描述

    域名解析
    在这里插入图片描述
    启动nginx并访问测试

    请添加图片描述
    请求能够被均匀的分配到两台服务器上

    要求4 nginx高可用

    要求4. 在上文题目2基础之上,增加节点NGINX B,如何配置实现高可用?demo演示当NGINX A故障时,流量自动切换到NGINX B(客户端访问几乎无感知)。详细说明VRRP协议在本题所述场景下的应用。
    server1和server2安装keepalived

    [root@server1 ~]# yum install keepalived
    
    • 1

    server1和server2写脚本文件

    [root@server1 yum.repos.d]# vi /usr/local/src/nginx_check.sh
    
    #!/bin/bash
    # 检查是否开启nginx
    A=`ps -C nginx --no-header |wc -l`
    if [ $A -eq 0 ];then
            systemctl stop keepalived
    fi
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    server1

    [root@server1 ~]# vim /etc/keepalived/keepalived.conf
    
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.15.143  #当前keepalived所在的主机ip
       smtp_connect_timeout 30
       router_id 192.168.15.143  #当前keepalived所在的主机ip
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    vrrp_script chk_http_port{
       script "/usr/local/src/nginx_check.sh"
       interval 2 #每隔2s检测一次脚本
       weight -20 #权重减20
    }
    
    vrrp_instance VI_1 {
        state MASTER #将当前主机设置为master节点
        interface eth0 #主机使用的网卡
    virtual_router_id 51
        priority 100 #优先级,主节点的优先级更大
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.15.66 #虚拟ip,必须和master、backup处于同一网段
        }
    }
    
                
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    server2

    [root@server2 ~]# vim /etc/keepalived/keepalived.conf 
    
       vrrp_gna_interval 0
    }
    vrrp_script chk_http_port{
       script "/usr/local/src/nginx_check.sh"
       interval 2 #每隔2s检测一次脚本
       weight -20 #权重减20
    }
    
    vrrp_instance VI_1 {
        state BACKUP#将当前主机设置为master节点
        interface eth0 #主机使用的网卡
        virtual_router_id 51
        priority 90 #优先级,主节点的优先级更大
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.15.66 #虚拟ip,必须和master、backup处于同一网段
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    都启动keepalived服务

    [root@server2 ~]# vim /etc/keepalived/keepalived.conf
    
    • 1

    测试:
    在这里插入图片描述
    将server1的服务关闭

    systemctl stop nginx
    
    • 1

    在这里插入图片描述

    要求5 负载均衡算法

    要求5. (加强提升题目)在上文题目3基础之上,配置和验证NGINX支持哪些负载均衡算法及其效果?并结合NGINX配置参数详细说明不同负载均衡算法工作原理。

    轮询算法
    轮询(Round Robin):这是默认的负载均衡算法。Nginx将每个新的客户端请求按照服务器列表的顺序分发,依次轮流选择下一个服务器。这是最简单的负载均衡算法,适用于后端服务器性能相近的情况。

    加权轮询(Weighted Round Robin):在这种算法中,每个后端服务器都分配了一个权重值,高权重的服务器会收到更多的请求。这对于在后端服务器之间分配不同的负载容量非常有用,以确保性能更好的服务器获得更多的请求。

     upstream server_pools {
            server 192.168.15.138:8080 weight=1; #两台服务器响应请求的方式为1:2
            server 192.168.15.133:8080 weight=2;
    
     }
    
        server{
            listen 8080;
            server_name _;
            location / {
                    return 403;
             }
     }
    
        server{
            listen 8080;
            server_name elite.chaitin.com;
            location / {
            proxy_pass http://server_pools;
                    }
            }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述
    重启服务并测试

    [root@lvs ~]# vim /etc/nginx/nginx.conf
    [root@lvs ~]# systemctl daemon-reload
    [root@lvs ~]# systemctl restart nginx
    
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    源地址哈希法
    IP哈希(IP Hash):Nginx使用客户端的IP地址来计算哈希值,并将请求分发到具有相同哈希值的后端服务器。这个算法确保相同IP的客户端始终访问相同的后端服务器,适用于需要会话保持的情况,如Web应用程序的会话管理。

    在负载均衡服务器上配置

    
        upstream server_pools {
            hash $remote_addr consistent; #使用客户端的IP地址进行哈希计算,
            							   #并且使用consistent关键字确保负载均衡在后端服务器发生变化时尽量减少数据迁移。
            server 192.168.15.138:8080;
            server 192.168.15.133:8080;
    
     }
    
        server{
            listen 8080;
            server_name _;
            location / {
                    return 403;
             }
     }
    
        server{
            listen 8080;
            server_name elite.chaitin.com;
            location / {
            proxy_pass http://server_pools;
                    }
            }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述
    重启nginx服务

    [root@lvs ~]# systemctl daemon-reload
    [root@lvs ~]# systemctl restart nginx
    
    
    • 1
    • 2
    • 3

    另开一台客户端主机
    写域名解析文件

    [root@localhost ~]# vi /etc/hosts
    192.168.15.140  elite.chaitin.com	#访问的是负载均衡服务器
    
    
    • 1
    • 2
    • 3

    测试
    可以发现客户端请求的一直都是同一个服务器
    在这里插入图片描述
    最小连接数算法
    最少连接(Least Connections):Nginx跟踪每个后端服务器的活动连接数,然后将请求发送到具有最少活动连接数的服务器。这有助于分配负载并确保请求发送到连接较少的服务器,从而实现负载均衡。

      upstream server_pools {
            least_conn; #使用最小连接数算法
            server 192.168.15.138:8080;
            server 192.168.15.133:8080;
    
     }
    
        server{
            listen 8080;
            server_name _;
            location / {
                    return 403;
             }
     }
    
        server{
            listen 8080;
            server_name elite.chaitin.com;
            location / {
            proxy_pass http://server_pools;
                    }
            }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这里插入图片描述
    重启nginx服务
    因为测试需要用到多台客户端,但我的服务器没有那么多,所以就不测试啦!

    要求6 健康检查

    要求6. (加强提升题目)在上文题目3基础之上,配置和验证主动和被动两种健康检查方式及其效果?并结合NGINX配置参数详细说明不同健康检查方式区别和工作原理。
    主动健康检查
    原理:
    主动健康检查是通过Keepalived自身执行的周期性检查来确定服务器的状态。Keepalived会定期发送请求(通常是ICMP ping或TCP连接请求)到服务器,并根据服务器的响应来确定其是否处于健康状态。

    配置:
    主动健康检查需要在Keepalived配置文件中定义一个或多个健康检查脚本,这些脚本将定期运行以检查服务器的健康状态。在配置文件中使用track_script部分来定义这些检查脚本

    track_script {
        chk_script {
            script "/etc/keepalived/check_script.sh" # 健康检查脚本的路径
            interval 2 # 检查间隔时间,单位秒
            weight 2 # 权重
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    脚本文件

    [root@server1 ~]# vim /etc/check_script.sh
    
    #!/bin/bash
    
    # 定义要检查的目标URL
    TARGET_URL="http://localhost:80"
    
    # 发送HTTP请求并获取响应
    HTTP_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $TARGET_URL)
    
    # 检查HTTP响应状态码是否为200(正常)
    if [ "$HTTP_RESPONSE" = "200" ]; then
        # 返回0表示健康
        exit 0
    else
        # 返回1表示不健康
        exit 1
    fi
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    被动健康检查:
    原理:
    被动健康检查是通过监听服务器上的服务来确定服务器的状态。Keepalived将侦听服务器上的服务端口,如果无法连接到该端口,将认为服务器处于不健康状态。

    配置:
    被动健康检查不需要特别的配置,只需确保Keepalived配置文件中的虚拟IP与服务器上的服务端口一致即可。

  • 相关阅读:
    文件服务器系统迁移改造之路
    shell基本系统维护命令
    Flyway 入门教程
    [含文档+PPT+源码等]精品基于Uniapp+SSM实现的安卓的掌上校园系统[包运行成功]Java毕业设计Android项目源码
    AI+边缘计算,让城市治理难题“看得见”又“管得了”
    OpenAI接口Completion和ChatCompletion的区别与使用方法
    nvm 基础安装与坑点
    Tkinter实现聊天气泡对话框
    SpringBoot SpringBoot 运维实用篇 3 多环境开发 3.4 多环境分组管理
    gcc编译原理与命令
  • 原文地址:https://blog.csdn.net/qq_53715074/article/details/132119475