百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

off999 2025-02-20 17:29 29 浏览 0 评论


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

段子手


高可用的并发解决方案nginx+keepalived教程讲义目录:

01.课程计划介绍

02.Nginx下载和安装

03.Nginx常用命令介绍

04.Nginx主模块相关指令

05.Nginx处理Http核心功能模块

06.Nginx负载均衡模块

07.Nginx访问控制模块

08.Nginx+tomcat实现集群

09.Nginx搭建图片服务器

10.Keepalived+Nginx主备分析

11.Nginx+keepalived高可用-Nginx安装

12.Keepalived安装

13.Keepalived+Nginx主备配置

14.Keepalived+Nginx主备测试

15.Keepalived+Nginx主备配置文件说明


## 一、课程计划介绍

### 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、安装一下相关的依赖包。

```java

yum install gcc-c++

yum install -y pcre pcre-devel

yum install -y zlib zlib-devel

yum install -y openssl openssl-devel

```

### 4、Ngnix 安装流程

```java

# 上传下载的 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,这样才可以通过修改配置文件将调试日志打印出来,便于定位服务问题。

### 6、浏览器访问测试(如虚拟机IP192.168.1.107):192.168.1.107:80

## 三、Nginx常用命令介绍

### 1、启动nginx ( windows下start nginx)

```java

# 切换到 nginx 安装程序目录下

cd /usr/local/server/nginx/sbin/

nginx -c /usr/local/server/nginx/conf/nginx.conf

```

### 2、停止nginx

```java

# 切换到 nginx 安装程序目录下

cd /usr/local/server/nginx/sbin/

nginx -s quit

```

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

```java

# 切换到 nginx 安装程序目录下

cd /usr/local/server/nginx/sbin/

nginx -s reload

```

### 4、查看 nginx 版本

```java

# 切换到 nginx 安装程序目录下

cd /usr/local/server/nginx/sbin/

nginx -v

```

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

```java

# 切换到 nginx 安装程序目录下

cd /usr/local/server/nginx/sbin/

nginx -t

```

### 6、查看 nginx 帮助信息

```java

# 切换到 nginx 安装程序目录下

cd /usr/local/server/nginx/sbin/

nginx -h

```


## 四、Nginx主模块相关指令

### 1、查看 nginx 守护进程

```java

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

```java

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

```java

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没有改变,请求只是使用了别名目录的文件。

```java

location /i/ {

alias /spool/w3/images/;

}

```


5)上个例子总,请求"/i/top.gif"将返回这个文件: "/spool/w3/images/top.gif"。

Alias同样可以用于带正则表达式的location,如:

```java

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、~ 区分大小写。

```java

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)请求到达后的文件根目录。

```java

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重定向的服务器名。

```java

server {

server_name example.com www.example.com;

}

```


5)第一个名称为服务器的基本名称,默认名称为机器的hostname。

当然,可以使用文件通配符:

```java

server {

server_name example.com *.example.com www.example.*;

}

```


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

```java

server {

server_name .example.com;

}

```


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

```java

server {

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

}

```


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

相关推荐

恢复精灵免费版(恢复精灵app软件下载)

一般都是收费的。建议选择正规的软件。推荐你用《安易》数据恢复软件。聊天恢复精灵不需要电脑。因为聊天恢复精灵是属于线上的应用程序,只需要在电子设备里面下载安装聊天恢复精灵软件就可以直接使用不靠谱手机数据...

苹果系统官网下载地址(iphone官网ios下载)

PP助手、同步推等手机助手都可以下载已经下架的应用,这类助手有很多,一搜一大把,而且就我知道的PP助手还能选择下载历史版本,当然也有部分应用是没在商店上架的,他们是通过企业证书公布自己的应用,需要到官...

win10桌面切换(w10系统桌面切换)
win10桌面切换(w10系统桌面切换)

     win10桌面1和桌面2快速切换方法:1.按住win按键按键盘的【win】按键。2.再按Tab按键同时按下【tab】按键。3.点击桌面选项点击界面的桌面选项完成切换。具体方...

2025-12-19 23:51 off999

下载qq号安装(下载qq安装包)
下载qq号安装(下载qq安装包)

QQ不能更新和下载,可尝试一下办法:1,使用数据线,将手机和电脑连接,然后从电脑端下载,保证你不闪退,不掉线。2,将你手机桌面的QQ图标删除,彻底删除.从AppStore里下载.注:在你不联机的状态下,你可能用别的助手会闪退问题,推荐从...

2025-12-19 23:03 off999

系统之家在线一键重装系统(系统之家官方网站)
  • 系统之家在线一键重装系统(系统之家官方网站)
  • 系统之家在线一键重装系统(系统之家官方网站)
  • 系统之家在线一键重装系统(系统之家官方网站)
  • 系统之家在线一键重装系统(系统之家官方网站)
笔记本电脑上网卡多少钱一个月

收费有好几种!1.按流量收费,这适合不怎么上网看电影,下载的人.(想用就用,而且价格便宜)2.按小时收费,用电脑的无线连移动的无线,那有说明。(10元40小时/每月,20元100小时/每月等等,还是手...

电脑无法进入系统如何重装(电脑无法进入系统如何重装系统)
  • 电脑无法进入系统如何重装(电脑无法进入系统如何重装系统)
  • 电脑无法进入系统如何重装(电脑无法进入系统如何重装系统)
  • 电脑无法进入系统如何重装(电脑无法进入系统如何重装系统)
  • 电脑无法进入系统如何重装(电脑无法进入系统如何重装系统)
一键重装系统后一直黑屏(电脑一键重装系统后黑屏)

黑屏故障一般有四种情况:一,全黑。主机、显示器(包括指示灯)均不亮二,显示器的指示灯亮,主机的指示灯不亮三,显示器与主机的指示灯均亮且开关电源冷却风扇也正常旋转,但显示器不显示。四,动态黑屏,开机时显...

激活windows10企业版ltsc(激活Windows10企业版转到设置以激活Windows)

windows10企业版ltsc永久激活方法/步骤1、下载密钥采集器,打开采集器,选择密钥的版本,选好后点开始采集。2、采集完毕后,点击采集到的密钥进行复制,粘贴到密钥擢爻充种的输入窗口里,点击下一步...

win10设置每天定时关机命令(win10设置每天自动关机时间)

首先按【Win和R】键打开运行框,输入【shutdown-t-s600】;-s-t及600前面均有一个空格,其中的数字代表的是时间,单位为秒;如600即代表10分钟,点击【确定】完成设置,此时...

win7旗舰版永久激活码怎么获取

一、在线获取激活密钥1、访问官方网站:打开浏览器,访问微软官方网站。2、注册账号:如果没有微软账号,需要先注册一个账号。3、登录账号:使用注册的账号登录微软官方网站。4、获取密钥:在官方网站上找到wi...

路由器恢复出厂设置怎么办

家里路由器重置以后,需要重新设置宽带网络连接和建立WiFi网络,安装设置方法∶然后打开浏览器,输入192.168.1.1,一般是这个网站,不是的话就看路由器说明。输入用户名admin,密码admin登...

电脑怎么恢复到上一次系统(电脑怎么恢复到之前的系统)

前提你得有备份,用备份还原就可以了,  电脑还原初始状态的步骤如下:  1、将电脑关机然后开机或者直接点击重启,然后按住"DELETE"键,这时,电脑会自动进入到BIOS  2、电脑屏幕上会显示两...

路由器品牌型号(路由器品牌型号在哪查)

其实关于路由器的排名,随便百度一下大把都是,在此我就不再赘述了。但是关于路由器的选择上,我个人的观点是如果家里对不怎么打游戏,房子户型也不太复杂,那么200快钱的小米,华为,TP等等市面上所有这个价位...

win10专业版不激活有什么影响

如果Windows10专业版未激活,您将面临以下问题:1.桌面背景将变为黑色,无法更改。2.您将无法自定义主题和颜色。3.您将无法使用个性化设置,如锁屏图片和屏幕保护程序。4.您将无法接收W...

取消回复欢迎 发表评论: