# 高可用的并发解决方案nginx+keepalived(一)

2024-09-07 21:52

本文主要是介绍# 高可用的并发解决方案nginx+keepalived(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

高可用的并发解决方案nginx+keepalived(一)

段子手

一、课程计划介绍

1、课程标题

为并发量高的优质网站量身定制高可用的并发解决方案 nginx+keepalived。

2、引导语

在这个互联网飞速发展的时代,人们已经离不开网络,其中网购最为常见。在家网购,上班路上网购,吃饭也购物,下班还网购,2017年双十一天猫支付峰值达到了25.6万笔/秒。热点网站中频繁出现的大量并发如何去解决?

那么在此次课程中,大家就会领略到,使用目前市面上处理并发能力非常强悍的nginx及keepalived如何快速的搭建一个处理高并发并的高可用的服务。

3、课程介绍

本课程介绍了目前处理并发能力非常强悍的开源软件nginx快速入门及使用,介绍nginx+tomcat集群处理并发解决方案,带大家认识虚拟路由,了解虚拟路由的工作流程并安装keepalived,实现nginx+keepalived主备配置,达到nginx高可用的效果。

4、课程知识点与大纲

  • nginx keepalived tomcat
  • nginx 介绍
  • nginx 快速入门
  • nginx+tomcat集群
  • keepalived 介绍
  • keepalived安装
  • keepalived+nginx 搭建高可用服务。

二、Nginx下载和安装

1、Nginx介绍

Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了。Igor 将源代码以类BSD许可证的形式发布。自Nginx 发布以来,Nginx 已经因为它的稳定性、丰富的功能集、 示例配置文件和低系统资源的消耗而闻名了。目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯。

2、Nginx下载

Nginx官网: http://nginx.org/
http://nginx.org/en/download.html

如:下载 nginx-1.14.2.tar.gz

服务器大多都使用linux环境作为服务器,安装好虚拟机,如IP:192.168.1.107,由于nginx是用C语言写的,而且还支持地址栏重写等功能,所以我们需要安装一下相关的依赖包。

3、安装一下相关的依赖包。


yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel

4、Ngnix 安装流程


# 上传下载的 nginx 到服务器的 /usr/local/nginx/ 目录下。# 切换目录
cd /usr/local/server/# 解压缩 nginx
tar -zvxf nginx-1.14.2.tar.gz# 创建新目录
mkdir nginx# 切换目录
cd /usr/local/server/nginx-1.14.2.tar.gz# 配置 nginx 安装信息
./configure --prefix=/usr/local/nginx# 可以添加安装第三方模块(需要先有第三方模块)
./configure --prefix=/usr/local/server/nginx --add-module=/usr/local/server/nginx_module/echo-nginx-module-0.61 --with-debug# 执行编译和安装
make && make install# nginx 安装完成,不要忘了防火墙开放80端口
vi /etc/sysconfig/iptables# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8082 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT[root@localhost sbin]# service iptables restart

5、./configure后面的一些常用参数配置参考如下

–prefix
指定部署根目录,默认是/usr/local/nginx.此设置会更改其他配置目录的相对路径

–sbin-path

可执行文件的路径,默认为/sbin/nginx。

–conf-path

配置文件的路径,默认为/conf/nginx.conf。

–pid-path
pid文件的存放路径,默认存放在/logs/nginx.pid,是一个存放nginx的master进程ID的纯文本文件,刚安装的时候不会生成,nginx启动的时候会自动生成。

–http-log-path

access日志存放位置,每个http的请求在结束的时候都会访问的日志。

–with-ld-opt

加入第三方链接时需要的参数。编译之后nginx最终的可执行二进制文件是由编译后的目标文件和一些第三方的库链接生成的。如果想要将某个库链接到nginx中,就需要指定–with-ld-opt=目标库名-目标库路径。

–with-debug
将nginx需要打印debug调试级别日志的代码编译进nginx,这样才可以通过修改配置文件将调试日志打印出来,便于定位服务问题。

三、Nginx常用命令介绍

1、启动nginx ( windows下start nginx)


# 切换到 nginx 安装程序目录下
cd  /usr/local/server/nginx/sbin/nginx -c /usr/local/server/nginx/conf/nginx.conf

2、停止nginx


# 切换到 nginx 安装程序目录下
cd  /usr/local/server/nginx/sbin/nginx -s quit

3、重新载入nginx(当配置信息发生修改时)


# 切换到 nginx 安装程序目录下
cd  /usr/local/server/nginx/sbin/nginx -s reload

4、查看 nginx 版本


# 切换到 nginx 安装程序目录下
cd  /usr/local/server/nginx/sbin/nginx -v

5、查看nginx的配置文件的目录


# 切换到 nginx 安装程序目录下
cd  /usr/local/server/nginx/sbin/nginx -t

6、查看 nginx 帮助信息


# 切换到 nginx 安装程序目录下
cd  /usr/local/server/nginx/sbin/nginx -h

四、Nginx主模块相关指令

1、查看 nginx 守护进程


ps -ef | grep nginx

2、nginx 模块介绍–主模块–基本指令:daemon (语法: daemon on | off)

1)默认值:on
2)含义:是否以守护进程的方式运行nginx,
3)守护进程:是指脱离终端并且在后头运行的进程,关闭守护进程执行的方式可以让我们方便调试nginx。
4)配置:vim /usr/local/server/nginx/conf/nginx.conf

Daemon off

3、nginx 模块介绍–主模块–基本指令:master_process(语法: master_process on | off)

1)默认值:on
2)含义:是否以master/worker方式进行工作,在实际的环境中 nginx是以一个master进程管理多个worker进程的方式运行的,关闭后 nginx就不会fork出worker子进程来处理请求,而是用master进程自身来处理请求worker_processes number; 默认1,在master/worker运行方式下 worker进程的数目,一般情况下用户要配置与CPU内核数相等的worker进程。
3)配置:vim /usr/local/server/nginx/conf/nginx.conf

master_process off

4、nginx 模块介绍–主模块–基本指令:error_log

语法:error_log file [ debug | info | notice | warn | error | crit ]

5、nginx 模块介绍–主模块–基本指令:include

1)语法:include file | *
2)默认值:none
3)你可以包含一些其他的配置文件来完成你想要的功能。0.4.4版本以后,include指令已经能够支持文件通配符:include vhosts/*.conf;

6、nginx 模块介绍–主模块–基本指令:pid

1)语法:pid file
2)默认值:编译时指定 pid /var/log/nginx.pid;
3)指定pid文件,可以使用kill命令来发送相关信号,例如你如果想重新读取配置文件,则可以使用:kill -HUP cat /var/log/nginx.pid
4)查看 pid 值:cat /usr/local/nginx/logs/nginx.pid

7、nginx 模块介绍–主模块–基本指令:user

1)语法:user user [group]
2)默认值:nobody nobody
3)如果主进程以root运行,Nginx将会调用setuid()/setgid()来设置用户/组,如果没有指定组,那么将使用与用户名相同的组,默认情况下会使用nobody用户与nobody组(或者nogroup),或者在编译时指定的–user=USER和–group=GROUP的值。
4)配置:vim /usr/local/server/nginx/conf/nginx.conf

8、nginx 模块介绍–主模块–基本指令:worker_processes

1)语法:worker_processes number
2)默认值:1
3)于以下几点原因,Nginx可能需要运行不止一个进程

  • 使用了SMP(对称多处理技术)。
  • 当服务器在磁盘I/O出现瓶颈时为了减少响应时间。
  • 当使用select()/poll()限制了每个进程的最大连接数时。
    在事件模块这一章中我们将使用worker_processes和worker_connections来计算理论最大连接数(max_clients):
    max_clients = worker_processes * worker_connections
    4)配置:vim /usr/local/server/nginx/conf/nginx.conf

五、Nginx处理Http核心功能模块

1、Nginx处理HTTP的核心功能模块–基本指令:alias

1)语法:alias file-path|directory-path;
2)默认值:no
3)使用字段:location
4)这个指令指定一个路径使用某个别名,注意它可能类似于root,但是document root没有改变,请求只是使用了别名目录的文件。

location  /i/ {alias  /spool/w3/images/;
}

5)上个例子总,请求"/i/top.gif"将返回这个文件: “/spool/w3/images/top.gif”。
Alias同样可以用于带正则表达式的location,如:

location  ~ ^/download/(.*)$  {alias  /home/website/files/$1;
}

2、Nginx处理HTTP的核心功能模块–基本指令:keepalive_timeout

1)语法:keepalive_timeout [ time ] [ time ]
2)默认值:keepalive_timeout 75
3)使用字段:http, server, location
4)参数的第一个值指定了客户端与服务器长连接的超时时间,超过这个时间,服务器将关闭连接。
5)参数的第二个值(可选)指定了应答头中Keep-Alive: timeout=time的time值,这个值可以使一些浏览器知道什么时候关闭连接,以便服务器不用重复关闭,如果不指定这个参数,nginx不会在应答头中发送Keep-Alive信息。(但这并不是指怎样将一个连接“Keep-Alive”)
6)参数的这两个值可以不相同
7)下面列出了一些服务器如何处理包含Keep-Alive的应答头:

  • MSIE和Opera将Keep-Alive: timeout=N头忽略。
  • MSIE保持一个连接大约60-65秒,然后发送一个TCP RST。
  • Opera将一直保持一个连接处于活动状态。
  • Mozilla将一个连接在N的基础上增加大约1-10秒。
  • Konqueror保持一个连接大约N秒。

3、Nginx处理HTTP的核心功能模块–基本指令:listen

1)语法(0.7.x):listen address:port [ default [ backlog=num | rcvbuf=size | sndbuf=size | accept_filter=filter | deferred | bind | ssl ] ]
2)语法(0.8.x):listen address:port [ default_server [ backlog=num | rcvbuf=size | sndbuf=size | accept_filter=filter | deferred | bind | ssl ] ]
3)默认值:listen 80
4)使用字段:server
5)listen指令指定了server{…}字段中可以被访问到的ip地址及端口号,可以只指定一个ip,一个端口,或者一个可解析的服务器名。
6)配置:vim /usr/local/server/nginx/conf/nginx.conf

4、Nginx处理HTTP的核心功能模块–基本指令:location

1)语法:location [=||*|^~|@] /uri/ { … }
2)默认值:no
3)使用字段:server
4)这个参数根据URI的不同需求来进行配置,可以使用字符串与正则表达式匹配,如果要使用正则表达式,你必须指定下列前缀:

  • 1、~* 不区分大小写。
  • 2、~ 区分大小写。
location  = / {# 只匹配 / 的查询.[ configuration A ]}location  / {# 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。[ configuration B ]}location ^~ /images/ {# 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。[ configuration C ]}location ~* \.(gif|jpg|jpeg)$ {# 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将在Configuration C中处理。[ configuration D ]}

5、Nginx处理HTTP的核心功能模块–基本指令:resolver_timeout time

1)语法:resolver_timeout time
2)默认值:30s
3)使用字段:http, server, location
4)解析超时时间。如:resolver_timeout 5s;

6、Nginx处理HTTP的核心功能模块–基本指令:root

1)语法:root path
2)默认值:root html
3)使用字段:http, server, location ,location中的if字段
4)请求到达后的文件根目录。

location  /i/ {root  /spool/w3;}

5)如果请求"/i/top.gif"文件,nginx将转到"/spool/w3/i/top.gif"文件。你可以在参数中使用变量。
6)注意:在请求中root会添加这个location到它的值后面,即"/i/top.gif"并不会请求"/spool/w3/top.gif"文件,如果要实现上述类似于apache alias的功能,可以使用alias指令。

7、Nginx处理HTTP的核心功能模块–基本指令:server

1)语法:server {…}
2)默认值:no
3)使用字段:http
4)server字段包含虚拟主机的配置。
5)没有明确的机制来分开基于域名(请求中的主机头)和基于IP的虚拟主机。
可以通过listen指令来指定必须连接到这个server块的所有地址和端口,并且在server_name指令中可以指定所有的域名。
6)配置:vim /usr/local/server/nginx/conf/nginx.conf

8、Nginx处理HTTP的核心功能模块–基本指令:server_name

1)语法:server_name name [… ]
2)默认值:server_name hostname
3)使用字段:server
4)这个指令有两个作用:

  • 将HTTP请求的主机头与在nginx配置文件中的server{…}字段中指定的参数进行匹配,并且找出第一个匹配结果。这就是如何定义虚拟主机的方法,域名遵循下述优先级规则:
    a、完整匹配的名称。
    b、名称开始于一个文件通配符:.example.com。
    c、名称结束于一个文件通配符:www.example.

    d、使用正则表达式的名称。
    如果没有匹配的结果,nginx配置文件将安装以下优先级使用[#server server { … }]字段:
    A、listen指令被标记为default的server字段。
    B、第一个出现listen(或者默认的listen 80)的server字段。
  • 如果server_name_in_redirect被设置,这个指令将用于设置HTTP重定向的服务器名。
    server {server_name   example.com  www.example.com;}

5)第一个名称为服务器的基本名称,默认名称为机器的hostname。
当然,可以使用文件通配符:

    server {server_name   example.com  *.example.com  www.example.*;}

6)上述例子中的前两个名称可以合并为一个:

    server {server_name  .example.com;}

7)同样可以使用正则表达式。名称前面加“~”:

    server {server_name   www.example.com   ~^www\d+\.example\.com$;}

8)配置:vim /usr/local/server/nginx/conf/nginx.conf

这篇关于# 高可用的并发解决方案nginx+keepalived(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146262

相关文章

高并发环境中保持幂等性

在高并发环境中保持幂等性是一项重要的挑战。幂等性指的是无论操作执行多少次,其效果都是相同的。确保操作的幂等性可以避免重复执行带来的副作用。以下是一些保持幂等性的常用方法: 唯一标识符: 请求唯一标识:在每次请求中引入唯一标识符(如 UUID 或者生成的唯一 ID),在处理请求时,系统可以检查这个标识符是否已经处理过,如果是,则忽略重复请求。幂等键(Idempotency Key):客户端在每次

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>

Java并发编程之——BlockingQueue(队列)

一、什么是BlockingQueue BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。被阻塞的情况主要有如下两种: 1. 当队列满了的时候进行入队列操作2. 当队列空了的时候进行出队列操作123 因此,当一个线程试图对一个已经满了的队列进行入队列操作时,它将会被阻塞,除非有另一个线程做了出队列操作;同样,当一个线程试图对一个空

Windows下Nginx的安装及开机启动

1、将nginx-1.16.1.zip解压拷贝至D:\web\nginx目录下。 2、启动Nginx,两种方法: (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过。 (2)打开cmd命令窗口,切换到nginx目录下,输入命令 nginx.exe 或者 start nginx ,回车即可。 3、检查nginx是否启动成功。 直接在浏览器地址栏输入网址 http://lo

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应

nginx介绍及常用功能

什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务。 Apache:重量级的,不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。这些都决定了Apache不可能成为高性能WEB服务器  nginx:

JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

一、什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的。停工时间,就是不能向用户提供服务的时间。高可用,就是系统具有高度可用性,尽量减少停工时间。如何用最简单的方法来搭建一个高效率可用的服务端JAVA呢? 停工的原因一般有: 服务器故障。例如服务器宕机,服务器网络出现问题,机房或者机架出现问题等;访问量急剧上升,导致服务器压力过大导致访问量急剧上升的原因;时间和

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

nginx长连接的问题

转自: http://www.360doc.com/content/12/1108/17/1073512_246644318.shtml

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP