Nginx第二讲

news2024/11/29 6:24:57

目录

二、Nginx02

2.1 keepalived和heartbeat介绍

2.1.1 两者的介绍

2.1.2 keepalived简介

2.1.3 VRRP协议与工作原理

2.1.4 Keepalvied的工作原理

2.2 安装环境及keepalived

2.3 启动与验证keepalived

2.4 keepalived测试

2.4.1 环境准备

2.4.2 配置keepalived

2.4.3 项目其余配置

2.4.4 测试抢占模式

2.5 nginx的工作原理


二、Nginx02

2.1 keepalived和heartbeat介绍

2.1.1 两者的介绍

Keepalived是Linux下一个轻量级别的高可用解决方案。它与HeartBeat RoseHA 实现相同类似的功能,都可以实现服务或者网络的高可用,但是又有差别。

高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是指主机的冗余和接管。

    HeartBeat是一个专业的、功能完善的高可用软件,它提供了HA 软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦。
    Keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然它没有HeartBeat功能强大,但是Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成。

2.1.2 keepalived简介

    Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。

后来Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied 一方面具有服务器状态检测和故障隔离功能,另外一方面也有HA cluster功能,下面介绍一下VRRP协议实现的过程。

2.1.3 VRRP协议与工作原理

在现实的网络环境中。主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通信就会失效,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。

熟悉网络的学员对VRRP协议应该不陌生,它是一种主备模式的协议,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信,这其中涉及到两个概念:物理路由器和虚拟路由器。

VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由,这个虚拟路由器通过虚拟IP(一个或者多个)对外提供服务,而在虚拟路由器内部十多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由设备被成为:主路由器(Master角色),一般情况下Master是由选举算法产生,它拥有对外服务的虚拟IP,提供各种网络功能,如:ARP请求,ICMP 数据转发等,而且其它的物理路由器不拥有对外的虚拟IP,也不提供对外网络功能,仅仅接收MASTER的VRRP状态通告信息,这些路由器被统称为“BACKUP的角色”,当主路由器失败时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色,继续提供对外服务,整个切换对用户来说是完全透明的。

每个虚拟路由器都有一个唯一的标识号,称为VRID,一个VRID与一组IP地址构成一个虚拟路由器,在VRRP协议中,所有的报文都是通过IP多播方式发送的,而在一个虚拟路由器中,只有处于Master角色的路由器会一直发送VRRP数据包,处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息,用来监控Master运行状态,一一般不会发生BACKUP抢占的情况,除非它的优先级更高,而当MASTER不可用时,BACKUP也就无法收到Master发过来的信息,于是就认定Master出现故障,接着多台BAKCUP就会进行选举,优先级最高的BACKUP将称为新的MASTER,这种选举角色切换非常之快,因而保证了服务的持续可用性。

2.1.4 Keepalvied的工作原理

网络的七层协议:
7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;
高层(7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端,点到点的数据流。
   上面我们介绍了Keepalived通过VRRP实现高可用性的工作原理,而Keepalived作为一个高性能集群软件,它还能实现对集群中服务器运行状态的监控以及故障隔离,下面我们介绍一下Keepalived对服务器运行状态和故障隔离的工作原理。

Keepalived工作在TCP/IP (五层模型)参考模型的 三层、四层、五层,也就是分别为:网络层,传输层和应用层,根据TCP、IP参数模型隔层所能实现的功能,Keepalived运行机制如下:

     在网络层:我们知道运行这4个重要的协议,互联网络IP协议,互联网络可控制报文协议ICMP、地址转换协议ARP、反向地址转换协议RARP,在网络层Keepalived在网络层采用最常见的工作方式是通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包(有点类似与Ping的功能),如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点。

    在传输层:提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP,传输控制协议TCP可以提供可靠的数据输出服务、IP地址和端口,代表TCP的一个连接端,要获得TCP服务,需要在发送机的一个端口和接收机的一个端口上建立连接,而Keepalived在传输层里利用了TCP协议的端口连接和扫描技术来判断集群节点的端口是否正常,比如对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口发生异常,然后强制将这些端口所对应的节点从服务器集群中剔除掉。

     在应用层:可以运行FTP,TELNET,SMTP,DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived工作方式,例如:可以通过编写程序或者脚本来运行Keepalived,而Keepalived将根据用户的设定参数检测各种程序或者服务是否允许正常,如果Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除
 

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器

为什么使用集群?
    1. 防止单点故障;
    2. 负载均衡;
    3. 高并发;
    4. 高可靠;

 

 

2.2 安装环境及keepalived

1、逐步操作

1、在 /usr/lwl/soft下面创建keepalived文件夹
2、联网下载安装包
    wget https://www.keepalived.org/software/keepalived-2.0.10.tar.gz
3、解压安装包
    tar -zxvf keepalived-2.0.10.tar.gz
4、安装依赖的环境
    yum -y install popt-devel libnl libnl-devel libnfnetlink-devel net-tools
5、检测是否适合安装
    [root@localhost ~]# cd keepalived-2.0.10
    ./configure --prefix=/usr/java/keepalived
6、编译并安装
    make && make install
7、配置keepalived
    [root@os004 keepalived-2.0.10]# cp /usr/java/keepalived/keepalived-2.0.10/keepalived/etc/init.d/keepalived /etc/init.d/
    [root@os004 keepalived-2.0.10]# mkdir /etc/keepalived
 
    [root@os004 keepalived-2.0.10]# cp /usr/java/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
 
    [root@os004 keepalived-2.0.10]# cp /usr/java/keepalived/keepalived-2.0.10/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
 
    [root@os004 keepalived-2.0.10]# cp /usr/java/keepalived/sbin/keepalived /usr/sbin/

2、联合操作

1、安装环境:
yum -y install popt-devel libnl libnl-devel libnfnetlink-devel net-tools
​
#安装成功提示
Installed:
  libnfnetlink-devel.x86_64 0:1.0.1-4.el7         libnl.x86_64 0:1.1.4-3.el7         libnl-devel.x86_64 0:1.1.4-3.el7         popt-devel.x86_64 0:1.13-16.el7        
​
Complete!
​
​
#如果想安装指定版本,可以查看一下都有什么版本可以安装
yum list|grep keepalived
​
2、安装keepalived
yum install -y keepalived
​
#安装成功提示
Dependency Updated:
  ipset.x86_64 0:7.1-1.el7                            ipset-libs.x86_64 0:7.1-1.el7                                                        
Complete!
​
3、安装位置
[root@localhost keepalived]# pwd
/etc/keepalived
[root@localhost keepalived]# ls
keepalived.conf

2.3 启动与验证keepalived

[root@os004 keepalived-2.0.10]# systemctl  start keepalived
[root@os004 keepalived-2.0.10]# systemctl  status keepalived
​
#查看正在运行的keepalived进程
[root@os004 keepalived-2.0.10]# ps -aux|grep keepalived

2.4 keepalived测试

2.4.1 环境准备

配置两台虚拟机:使用centos7

虚拟ip:192.168.221.127
       192.168.221.128
​
Keppalived1:主机 127 Nginx 
             主机上有两个项目(127:Tomcat 8080,127:Tomcat 8081)
​
Keppalived2:从机 128 Nginx

2.4.2 配置keepalived

主服务器修改192.168.111.127的配置文件/etc/keepalived/keepalived.conf

global_defs {
    notification_email {
       123@qq.com            #设置报警邮件地址,可以设置多个,可以不设置
    }
    notification_email_from master@qq.com     #发送通知邮件时邮件源地址
    smtp_server 127.0.0.1    # 发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现
    smtp_connection_timeout 30     #连接smtp连接超时时间
    router_id 192.168.111.127      #############定义路由标识信息,相同局域网唯一
}
vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh"    ##########最后手动执行下此脚本,以确保此脚本能够正常执行
    interval 2      #(检测脚本执行的间隔,单位是秒)
    weight -2       #当检查失败后,将vrrp_instance的priority减小2
    fall 3          #连续监测失败3次,才认为真的健康检查失败。并调整优先级
    rise 2          #连续监测2次成功,就认为成功。但不调整优先级
}
 
# 虚拟ip配置 vrrp
vrrp_instance VI_1 {
    state MASTER             # 指定keepalived的角色,MASTER为主,BACKUP为备,大写
    interface ens33          ############ 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
    mcast_src_ip 192.168.111.127  ###########发送心跳包的源IP,可使用绑定的网卡IP
    virtual_router_id 180        # 虚拟路由编号,主从要一直0-255
    priority 100            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    authentication {
        auth_type PASS  #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        chk_http_port            #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.111.100            ################### 定义虚拟ip(VIP),可多设,每行一个
    }
}

备用服务器修改192.168.111.128的配置文件/etc/keepalived/keepalived.conf

global_defs {
    notification_email {
       123@qq.com         #设置报警邮件地址,可以设置多个,可以不设置
    }
    notification_email_from master@qq.com     #发送通知邮件时邮件源地址
    smtp_server 127.0.0.1   # 发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现
    smtp_connection_timeout 30       #连接smtp连接超时时间
    router_id 192.168.111.128        #定义路由标识信息,相同局域网唯一
}
vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh"    #最后手动执行下此脚本,以确保此脚本能够正常执行
    interval 2         #(检测脚本执行的间隔,单位是秒)
    weight -2          #当检查失败后,将vrrp_instance的priority减小5
    fall 3             #连续监测失败3次,才认为真的健康检查失败。并调整优先级
    rise 2             #连续监测2次成功,就认为成功。但不调整优先级
}
 
# 虚拟ip配置 vrrp
vrrp_instance VI_1 {
    state BACKUP            # 指定keepalived的角色,MASTER为主,BACKUP为备,大写
    interface ens33            # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
    mcast_src_ip 192.168.111.128 #发送心跳包的源IP,可使用绑定的网卡IP
    virtual_router_id 180        # 虚拟路由编号,主从要一直
    priority 98            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    authentication {
        auth_type PASS  #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        chk_http_port            #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.111.100            # 定义虚拟ip(VIP),可多设,每行一个
    }
}

2.4.3 项目其余配置

1、以下是针对nginx状态进行检测的脚本,第一次nginx服务死掉时,会重新启动,如果Nginx服务无法正常启动,则杀掉keepalived进程

vim /usr/local/src/check_nginx_pid.sh

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then                            
      /usr/local/nginx/sbin/nginx     
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then  
              killall keepalived                    
      fi
fi

2、配置用户执行权限

#给所有用户执行权限
chmod a+x /usr/local/src/check_nginx_pid.sh

3、修改nginx.conf文件

vi /usr/local/nginx/conf/nginx.conf

        location  / {
            root   /usr/lwl/files/static/dist;  #vue项目在系统中的位置
            index  index.html index.htm;    #最初过来访问的页面
        }

4、开启nginx和keepalived进行测试

systemctl start nginx
systemctl start keepalived
​
然后再浏览器使用虚拟路由进行访问  192.168.111.100
也可以使用真正的路由进行访问 192.168.111.127   或者是  192.168.111.128
​
出现vue图标即是成功

5、查看连接的哪台主机

可以使用Xshell新建一个连接,连接IP地址为 192.168.111.100
输入 ip addr 出现的ip地址就是正在连接的服务器ip地址
​
​
如果关闭当前正在连接的主机,那么另外一台备用机就会连接

访问[http://192.168.111.100/ 一切正常],无论是tomcat机器还是nginx都避免了单点故障。

2.4.4 测试抢占模式

现在192.168.111.127 是主机,192.168.111.128是备用机,

如果修改128里面配置文件 /etc/keepalived/keepalived.conf

state MASTER   #将128也修改为主机

这时分配的服务器就是随机的。

2.5 nginx的工作原理

Nginx默认采用多进程工作方式,Nginx启动后,会运行一个master进程和多个worker进程。其中master充当整个进程组与用户的交互接口,同时对进程进行监护,管理worker进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。worker用来处理基本的网络事件,worker之间是平等的,他们共同竞争来处理来自客户端的请求。

worker工作图:

1、一个master多个worker的好处
    每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的, 继续进行争抢,实现请求过程,不会造成服务中断
    
2、设置多少个 woker 合适
    worker 数和服务器的 cpu 数相等是最为适宜的
​
有关 连接数 worker_connection
3、第一个:发送请求,占用了 woker 的几个连接数?
    答案:2 或者 4 个
​
4、第二个:nginx 有一个 master,有四个 woker,每个woker支持最大的连接数1024,支持的最大并发数是多少?
    ①普通的静态访问最大并发数是: worker_connections * worker_processes /2,
    ②而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/363939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

守护最后一道防线:Coremail邮件安全网关推出邮件召回功能

根据Coremail邮件安全大数据中心2022年Q4季报显示,2021年CAC识别钓鱼邮件1.81亿,2022年上升至2.25亿,增幅高达24.1%。 这表明2022年平均每天有61万7088封钓鱼邮件被接收及发出,企业用户面临潜在经济损失不可估量。 尤其是活跃至今…

Linux中安装JDK

Linux中安装JDK一 、下载JDK包1、下载网址2、往下翻,找到 java83、继续往下翻找到要下载的版本 64位linux版本二 上传jdk安装包三 开始安装整体过程1、解压文件2、查看解压文件3、进入解压文件夹确认4、配置环境变量5、重新加载环境变量6、确认安装成功一 、下载JDK…

Leetcode11. 盛最多水的容器

一、题目描述: 给定一个长度为 nnn 的整数数组 heightheightheight 。有 nnn 条垂线,第 iii 条线的两个端点是 (i,0)(i, 0)(i,0) 和 (i,height[i])(i, height[i])(i,height[i]) 。 找出其中的两条线,使得它们与 xxx 轴共同构成的容器可以容…

【C++】类与对象(引入)

目录 前言 类的引入 类的定义 封装与访问限定符 封装 访问限定符 类的实例化 类的大小 this指针 特性 前言 🎶我们都知道,C语言是面向过程的编程,而C是面向对象的编程,更多体现在编程的关注点上。 🎶就拿洗…

ES6--class类(详解/看完必会)

目录 1、基本概念 2、基本用法 3、class与构造函数的区别 4、constructor的使用 5、自定义方法 6、extends和super (1)问题一:我们想要在点击按钮二的时候改变字体大小,如何写呢? (2)问…

【极海APM32替代笔记】低功耗模式配置及配置汇总

【极海APM32替代笔记】低功耗模式配置及配置汇总 文章总结:(后续更新以相关文章为准) 【STM32笔记】低功耗模式、WFI命令等进入不了休眠的可能原因(系统定时器SysTick一直产生中断) 【STM32笔记】HAL库低功耗模式配置…

万字长文解析!复现和使用GPT-3/ChatGPT,你所应该知道的

关于作者 英文原版作者:杨靖锋,现任亚马逊科学家,本科毕业于北大,硕士毕业于佐治亚理工学院,师从 Stanford 杨笛一教授。 杨昊桐 译,王骁 修订 感谢靳弘业对第一版稿件的建议,感谢陈三星&am…

timm使用swin-transformer

1.安装 pip install timm2.timm中有多少个预训练模型 #timm中有多少个预训练模型 model_pretrain_list timm.list_models(pretrainedTrue) print(len(model_pretrain_list), model_pretrain_list[:3])3加载swin模型一般准会出错 model_ft timm.create_model(swin_base_pat…

Head First设计模式---4.工厂方法模式

2.1工厂方法模式 亦称: 虚拟构造函数、Virtual Constructor、Factory Method 工厂方法模式是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。 [外链图片转存失败,源站可能有防盗链机制,建议将图片…

Linux 终端复用器Tmux

目录 Tmux讲解 配置tmux 配置tmux会话 配置tmux窗口(在会话界面进行配置) 配置tmux面板 配置窗口共享同步 Tmux讲解 RHEL5/6/7使用的是screen软件包 RHEL8使用的是tumx软件包(功能更强大,更易用) tmux的三个基本…

阿里云物联网平台设备模拟器

在使用阿里云物联网平台过程中,如果开始调试没有实际的物理设备,可以考虑在阿里云物联网平台使用官方自带的模拟器进行调试。不过也可以通过叶帆科技开发的阿里云物联网平台设备模拟器AliIoTSimulator进行调试,AliIoTSimulator可以独立运行&a…

第49章 API统一集中管理

1 关于统一集中管理API的一些思考 1、统一集中管理是保证工程性项目得保质、保量、成功实施,并对后期维护提供数据支撑的最有效,最节省资源和时间的技能和做法,软件做为一种特殊的工程性项目,也符合上述特性。 2、由于在前台实现中…

Leetcode6. N字形变换

一、题目描述: 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下: 之后,你的输出需要从左往右逐行读取,产…

【数据结构与算法】算法的时间复杂度和空间复杂度

文章目录前言1.算法效率1.1.如何衡量一个算法的好坏1.2.算法的复杂度2.时间复杂度2.1.时间复杂度的概念2.2.大O的渐进表示法2.3.常见时间复杂度计算举例2.4.常见时间复杂度3.空间复杂度4.复杂度oj练习Practice.1 消失的数字Practice.2 旋转数组写在最后前言 关于时空复杂度的分…

到底什么样的条件才能被浙大MBA录取?攻略集合

新一年管理类联考已悄然启动,很多考生把目标也都放在了浙江大学MBA项目上,那么浙江大学MBA项目好考吗?报考流程是怎样的?杭州达立易考教育在这里给大家汇总整理了浙大MBA项目相关资讯,分享给想要报考浙大MBA的同学&…

每天一道大厂SQL题【Day12】微众银行真题实战(二)

每天一道大厂SQL题【Day12】微众银行真题实战(二) 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题&…

Wgcloud安装和使用(性能监控)

一、Wgcloud说明 官网:https://www.wgstart.com/ WGCLOUD支持主机各种指标监测(cpu使用率,cpu温度,内存使用率,磁盘容量,磁盘IO,硬盘SMART健康状态,系统负载,连接数量&…

结合YOLOv8实现目标追踪

博主使用YOLOv8在自制数据集上取得了不错的效果,考虑到后期的安排,需要在完成目标检测后完成目标追踪功能。因此在本篇博文中主要介绍结合YOLOv8实现目标追踪。 项目源码: https://github.com/mikel-brostrom/yolov8_tracking 接下来便是调试…

CSS变量

前端的开发工作中,CSS 是不可或缺的部分;实际工作中,我们通过JavaScript 来进行数据和交互工作,CSS 为用户呈现可视化的界面。有时,CSS 来进行部分交互效果是不是会比 JavaScript 更高效、更省事呢? 一、变…

python并发编程(并发与并行,同步和异步,阻塞与非阻塞)

最近在学python的网络编程,学了socket通信,并利用socket实现了一个具有用户验证功能,可以上传下载文件、可以实现命令行功能,创建和删除文件夹,可以实现的断点续传等功能的FTP服务器。但在这当中,发现一些概…