nginx学习-负载均衡-keepalived高可用-反向代理

本文详细介绍了nginx作为高性能Web和反向代理服务器的角色,包括其反向代理、负载均衡和动静分离的功能。同时,文章还探讨了nginx的安装、命令以及配置文件的结构。通过实例演示了如何配置反向代理、负载均衡,特别是通过keepalived实现高可用。最后,简要解析了nginx的工作原理和worker进程机制。
摘要由CSDN通过智能技术生成

1.nginx概念

1.1nginx是什么?

学习任何一门知识之前,我们都需要明确自己学习的东西是什么,学来的目的是什么。而不是本着学的多就是好的思想进行学习。

Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/ 代理服务器。

在高连接并发的情况下,Nginx是Apache服务器不错的替代品。

nginx的特点在于占用内存小,并发能力强,nginx专门为性能优化而开发,性能是他最重要的考量。它最高能承受50000个并发连接数,远大于tomcat的250个。最重要的是,它几乎能做到7*24的工作承受。因此,在现如今的工作环境之中,nginx越来越成为企业及其大型公司的优选。

2. nginx作用

2.1反向代理

​ 1)要学习反向代理,那么需要先理解什么是正向代理。

​ 如果把局域网中的internet想象成一个巨大的资源库,则局域网中的客户端要访问internet,就需要通过一个代理服务器来访问,这种代理服务器就叫做正向代理。

​ 2) 反向代理,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,在这个过程中,对于外部来说,反向代理服务器和目标服务器就是一个服务器,只是将反向代理服务器的地址暴露出来,隐藏了目标服务器的ip。

​ 正向代理和反向代理的区别在于代理的对象不一样,正向代理的代理对象是客户端,反向代理的代理对象是服务端。

2.2负载均衡

​ 对于大量的请求,一个服务器有事会显得拙荆见肘,这时,我们往往增加服务器的数量,将大量的请求分摊到多个服务器上,将负载分发到不同的服务器,就是负载均衡

2.3动静分离

​ 为了加快网站的解析,将动态页面和静态页面由不同服务器来解析,加快解析速度。降低原来单个服务器的压力。

3.nginx的安装

4.nginx的命令

​ 1)版本查看

nginx -v
nginx version: nginx/1.17.8

​ 2)开启nginx

	nginx或者service nginx start

​ 3) 关闭nginx
在这里插入图片描述

nginx -s stop或 service nginx stop

​ 4)重新加载nginx

nginx -s reload

这个主要用于当nginx的配置文件发生变化,但是你又不想要重启nginx的时候,就可以用上面的命令。(重启同样会将配置文件加载嗷!!)

5.nginx配置文件

位置:/usr/local/nginx/conf/nginx.conf(配置文件的位置并不固定,如果是yum安装,通常会在/etc/nginx/nginx.conf中)

nginx的配置文件分为三大块:全局块,events块,http块

5.1全局块

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

#以上统称为全局块,
其中worker_processe的数值越大,表明它的并发能力就越强。但是并不是随意配值的,而是受到硬件和设备的配置影响
error_log代表nginx的错误日志的存放位置

5.2 events块

主要影响nginx服务器和用户的网络连接

events {
    worker_connections  1024;
}

worker_connections 表示支持的最大连接数

5.3 http块

这是nginx服务器中配置最频繁的部分,代理,缓存日志定义等绝大多数功能和第三方模块的配置都在这里。

其中http块也可以包括http全局块server块

http块

http全局块包含

server块

6.nginx配置实例

6.1反向代理

我们可以进行一次这样的实验,首先,需要你有一台安装nginx的虚拟机或云服务器

在这里插入图片描述

安装好后,大致像这样

你可以自己随意写一个静态网页进行测试,并将它通过8080端口进行访问。
在这里插入图片描述
在这里插入图片描述

server {
	listen	8080;
	server_name	_;
    location / {
        root	/opt/html;
        index	index.html	index.html;
    }

	error_page 500 502 503 504 404 /50x.html;

	location = /50x.html {
		root /usr/share/nginx/html;
	}
}

在这里插入图片描述
此时,reload之后通过8080端口可以访问到test.html页面,80端口则不可以。

在这里插入图片描述
在这里插入图片描述

进入nginx.conf配置反向代理,

在这里插入图片描述

80端口就可以访问8080端口的资源了,这样,原本的8080端口就被隐藏了起来。这也就是反向代理的目的所在。
在这里插入图片描述

而实际上,大家要清楚的是,反向代理并不仅仅只是为了在一台机器上隐藏某个端口,它更大的作用在于,作为一个中间的桥梁,隐藏公司的整个私网ip及其端口,而反向代理服务器将作为这个私网的代表被暴露出来供公网使用或者访问公网内的网页

6.2 负载均衡

负载均衡将负载分摊到不同的服务单元,既保证了服务的可用性,也保证了响应速度足够快。如今快速增长的访问量和数据流量催生了大量的负载均衡产品,nginx就是其中的一个,在linux下有nginx,lvs,happroxy等多种服务提供负载均衡服务。

6.2.1负载均衡实验

为了节省时间,我直接使用了docker完成了这个实验。

首先,准备一台云服务器,拉取nginx镜像。

docker pull nginx:latest

创建三个nginx容器,端口分别为8081,8082,8083

docker run --name wgh_nginx -p 80:8081 -d nginx
docker run --name nginx2 -p 80:8082 -d nginx
docker run --name nginx3 -p 80:8083 -d nginx

其中8081作为nginx服务器进行负载均衡的分配,其他两台用来提供web服务。

在8081这个服务器上更改nginx配置文件

docker exec -it wgh_nginx /bin/bash

进入内部后会发现服务器不可用vi,vim,

可以

apt-get update
apt-get install vim

或者在之前用docker cp拷贝nginx的配置文件到主机上然后挂载,反正目的都是更改配置文件。

docker cp /etc/nginx:~/conf
docker cp /usr/share/nginx/html:~/www

删除之前那个容器,重新建立一个新的容器,此时,这个容器的配置文件就是~/conf下的文件,你可以通过更改这个配置文件的内容来配置你的容器,可以将index.html的内容更改后进行测试。多个容器可以挂载同一个配置文件

docker run -it -p 8084:80 --name nginx_wgh -v ~/www:/usr/share/nginx/html -v ~/conf:/etc/nginx -d nginx

执行上面两条命令后,就可以打开vim编辑器修改配置文件。

http块中添加upstream那一块,其中weight可加可不加,不加则默认轮询。

在这里插入图片描述server块中添加proxy_pass
在这里插入图片描述
然后重启容器,此时通过浏览器访问8081端口,nginx服务器就会把请求给后面的两个web服务器进行处理,可以通过

docker logs --tail="10" nginx2

docker logs --tail="10" nginx3

对比两个服务器获得的请求数,由于我使用的是权重的策略,所以两个服务器的请求数比应该大致为1:2

想要更加明了看到这个变化,可以通过将nginx2和nginx3中的index.html的内容改为8082和8083在网页上看到。

6.2.2 负载均衡策略

nginx提供的分配方式(策略)如下:

1.轮询默认

每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,可以自动剔除。‘

2.weight

weight代表权重,默认是 1,权重越高被分配的客户端越多。

3.ip_hash

每个请求按照ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

4 .fair 方式

按照后端服务器的响应时间来分配请求,响应时间短的优先分配。

6.3 动静分离

什么是动静分离?

这个问题的答案并不只是单纯的吧动态页面与静态页面物理分离,而是将动态请求和静态请求分开

6.4 高可用(keepalived)

6.4.1什么是高可用?

Keepalived是基于vrrp协议的一款高可用软件。Keepailived有一台主服务器和多台备份服务器,在主服务器和备份服务器上面部署相同的服务配置,使用一个虚拟IP地址对外提供服务,当主服务器出现故障时,虚拟IP地址会自动漂移到备份服务器。

6.4.2配置高可用的准备工作

首先声明想要用云机器进行操作的同学们必须注意,如果你想要用云服务器进行这个高可用的配置,需要在云平台申请HAVIP,我觉得还是没有必要,因为这个申请需要时间,虚拟机明显更快哈哈。

master:192.168.247.166

slave:192.168.247.167

为了节省资源(主要是懒),我直接使用docker提供了web服务,分别是master机器的8081,8082,8083三个端口,其中,我使用master的8080端口做负载均衡,命名为lb-nginx。

接下来,我就详述一下我的整个操作流程。

1.机器准备

首先声明的是,我准备的是两台全新的centos7的虚拟机

[root@localhost conf.d]# cat /etc/centos-release
CentOS Linux release 7.7.1908 (Core)
[root@localhost conf.d]# uname -r
3.10.0-1062.el7.x86_64
2.软件准备

由于我使用的是docker提供web服务,所以docker是不可少,由于在slave上单独装一个docker并不划算,salve我直接安装了nginx,

然后就是两台虚拟机上安装keepalived,注意一下,这里不是用docker,是直接安装在虚拟机内部。

在这里插入图片描述

3.配置

首先需要配置的是负载均衡的那一部分,这个我上面已经讲过了,因此直接贴出配置文件。

/etc/nginx.conf

在http块中添加这个

upstream 192.168.247.166{
	server	192.168.247.166:8081;
	server	192.168.247.166:8083;
	server	192.168.247.166:8082;

} 

/etc/nginx/conf.d/defaule.conf

加proxy_pass那一行

location / {
    proxy_pass http://192.168.247.166;
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

这个不只是8080端口的那个docker nginx配置文件,还有slave机器上的nginx配置,不同的是,slave的listen应该改为8080,这是因为我们做负载均衡的lb-nginx在master上占用的是8080端口,如果slave想要在master宕机后接替master的位置,就必须要与lb-nginx保持一致。或者,你也可以用docker占用8080端口。哦,你混乱了吗。哈哈哈哈哈哈哈哈哈~~~

master keepalived配置文件

global_defs {
   notification_email {
    2420243437@qq.com
   }
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33 //需要绑定的网卡
    virtual_router_id 51
    priority 100 //slave中需要比这个少
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.247.110
    }
    
}
4.调试

配置文件改完后基本就差不多了

启动nginx服务,测试负载均衡是否成功,(这个主要讲高可用,我就不多费口舌了。)

启动两个虚拟机上的keepalived服务,此时,会发现在master的ip中多了这么一个ip

在这里插入图片描述

通过浏览器访问这个虚拟ip
在这里插入图片描述在这里插入图片描述

我上面随便改了一下html作为区别,你们也可以自己改,上面也有嗷。。

然后在master上kill掉keepalived,会发现vip飘到了slave上
在这里插入图片描述在这里插入图片描述通过vip照样可以访问到上面访问的那些页面,就说明OK了嗷。。

嗷嗷嗷哦嗷嗷嗷嗷!

差不多,就这样!!!
是不是很简单!!!!!!!!!!!!!!!!!!!!!!

7.nginx原理解析

7.1原理图

要理解nginx的原理,可以从一张图片中窥得一二。
在这里插入图片描述

7.2worker工作原理

其中上图的多个worker其实并不存在什么分配策略,它们之间实质上使用的是一种争抢的方式,但是已经得到任务的worker进程不参与争抢,只有空闲状态的才参与。其中每个worker都是一个独立的进程,所以不需要锁等额外的开销来维护。

7.3一个master和多个worker的机制

这种机制带来一定的好处

1)可以使用nginx -s reload 热部署,利用nginx进行热部署操作

  1. 每个worker都是一个独立的进程,如果其中某一个出现问题,其他worker仍然会继续争抢,而不会导致服务的中断

但是worker数量的设置取决于你机器的CPU数,每个worker的线程可以把CPU发挥到极致,因此两者数量相当即可,如果过少,就不能充分利用机器的CPU性能,如果过多,就会导致单个cpu频繁切换上下文,带来不必要的开销。

7.4连接数

worker_connection

的多个worker其实并不存在什么分配策略,它们之间实质上使用的是一种争抢的方式,但是已经得到任务的worker进程不参与争抢,只有空闲状态的才参与。其中每个worker都是一个独立的进程,所以不需要锁等额外的开销来维护。

7.3一个master和多个worker的机制

这种机制带来一定的好处

1)可以使用nginx -s reload 热部署,利用nginx进行热部署操作

  1. 每个worker都是一个独立的进程,如果其中某一个出现问题,其他worker仍然会继续争抢,而不会导致服务的中断

但是worker数量的设置取决于你机器的CPU数,每个worker的线程可以把CPU发挥到极致,因此两者数量相当即可,如果过少,就不能充分利用机器的CPU性能,如果过多,就会导致单个cpu频繁切换上下文,带来不必要的开销。

7.4连接数

worker_connection

最大并发数计算通常用worker_processworker_connection/2(静态资源),worker_processworker_connection/4(动态资源)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值