写点什么

Nginx 浅析

作者:andy
  • 2022-10-28
    北京
  • 本文字数:10524 字

    阅读完需:约 35 分钟

1-Nginx


Nginx

Nginx(engine x)是 HTTP 和反向代理服务器邮件代理服务器TCP/UDP 代理服务器

Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个 BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好。

Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 rambler.ru 站点开发的,于 2004 年发布了第一版

其将源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx 扩展能力非常强,可以整合许多的开发模块,实现更多的功能。


特点

Nginx 是一个高性能的 Web 和反向代理服务器,它具有有很多非常优越的特性。

作为 Web 服务器

相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.

作为负载均衡服务器

Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP 代理服务器对外进行服务。Nginx 用 C 编写,不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

作为邮件代理服务器

Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

Nginx 安装非常的简单,配置文件非常简洁(还能够支持 perl 语法),Bugs 非常少的服务器

Nginx 启动特别容易,并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动。还能够在不间断服务的情况下进行软件版本的升级。


2-Nginx 编译与安装


Nginx 编译与安装前准备

1、安装 gcc g++开发库

ububtu 平台编译环境可以使用以下指令

apt-get install build-essential

apt-get install libtool

centos 平台编译环境使用如下指令

安装 make

yum -y install gcc automake autoconf libtool make

安装 g++

yum install gcc gcc-c++


2、安装 pcre,目的为了重写 rewrite

选定源码目录

cd /usr/local/src

下载最新 pcre 源码包,进行解压、配置、编译以及安装

cd /usr/local/src

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz

tar -zxvf pcre-8.37.tar.gz

cd pcre-8.34

./configure

make

make install


2、安装 pcre,目的为了重写 rewrite

选定源码目录

cd /usr/local/src

下载最新 pcre 源码包,进行解压、配置、编译以及安装

cd /usr/local/src

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz

tar -zxvf pcre-8.37.tar.gz

cd pcre-8.34

./configure

make

make install

3、安装 zlib,目的为了 gzip 压缩

选定源码目录

cd /usr/local/src

下载最新源码包,进行解压、配置、编译以及安装

cd /usr/local/src

wget http://zlib.net/zlib-1.2.8.tar.gz

tar -zxvf zlib-1.2.8.tar.gz

cd zlib-1.2.8

./configure

make

make install


4、安装 ssl(某些 vps 默认没装 ssl)

cd /usr/local/src

wget https://www.openssl.org/source/openssl-1.0.1t.tar.gz

tar -zxvf openssl-1.0.1t.tar.gz

Ubuntu

apt-get install openssl

apt-get install libssl-dev

centos

yum -y install openssl openssl-devel


Nginx 编译与安装

1、下载核心 Nginx 支持包

程序源代码:nginx-1.11.3.tar.gz

信息输出模块:echo-nginx-module-0.59.tar.gz

清除缓存模块:ngx_cache_purge-2.3.tar.gz

负载均衡模块:gnosek-nginx-upstream-fair-a18b409.tar.gz

2、将以上压缩包解压至制定目录下

tar xzvf /src/nginx-1.11.3.tar.gz -C /app/

tar xzvf /src/echo-nginx-module-0.59.tar.gz -C /app/

tar xzvf /src/ngx_cache_purge-2.3.tar.gz -C /app/

tar xzvf /src/gnosek-nginx-upstream-fair-a18b409.tar.gz -C /app/


3、创建新目录

Nginx 编译完成之后默认保存在源代码目录中,不方便管理,故新建目录保存 Nginx 的相关配置信息。建立目录如下:

mkdir -p /app/nginx/{conf,sbin,logs,fastcgi_temp,client_body_temp,proxy_temp,uwsgi_temp,scgi_temp}

4、进入 Nginx 源代码目录

cd /app/nginx-1.11.3/

5、编译 Nginx 前,配置输出目录以及模块信息

configure 命令是用来检测你的安装平台的目标特征的。它定义了系统的各个方面,包括 nginx 的被允许使用的连接处理的方法,比如它会检测你是不是有 CC 或 GCC,并不是需要 CC 或 GCC,它是个 shell 脚本,执行结束时,它会创建一个 Makefile 文件。

以下命令可以按照需要进行文件目录的调整,执行编译命令如下:


./configure --prefix=/app/nginx/ \--sbin-path=/app/nginx/sbin/ \--with-http_ssl_module \--with-openssl=/usr/local/openssl \--conf-path=/app/nginx/conf/nginx.conf \--pid-path=/app/nginx/logs/nginx.pid \--error-log-path=/app/nginx/logs/error.log \--http-log-path=/app/nginx/logs/access.log \--http-fastcgi-temp-path=/app/nginx/fastcgi_temp \--http-client-body-temp-path=/app/nginx/client_body_temp \--http-proxy-temp-path=/app/nginx/proxy_temp \--http-uwsgi-temp-path=/app/nginx/uwsgi_temp \--http-scgi-temp-path=/app/nginx/scgi_temp \--add-module=/app/echo-nginx-module-0.59 \--add-module=/app/gnosek-nginx-upstream-fair-a18b409 \--add-module=/app/ngx_cache_purge-2.3
复制代码


问题一:

执行之后,报出未发现 PCRE 库,因此,还需要给系统安装 PCRE 库

问题二:

编译 PCRE 库过程中,又出现了缺乏 c++编译器,故去安装 c++编译器

问题三:

PCRE 库和 c++编译器安装好后,重新编译 Nginx,出现了 OpenSSL 库未找到问题,因此,再去安装 OpenSSL 库。经过安装好后,配置了以下信息:

# add openssl home

export OPENSSL=/usr/local/openssl/bin

export PATH=$OPENSSL:$PATH:$HOME/bin

但是重新编译,不起作用,因此我在编译命令里加了--with-openssl=/usr/local/openssl \,重新编译后不再报出此错误。

查看 openssl 信息:

ldd /usr/local/openssl/bin/openssl

问题四:

编译 Nginx 报出 zlib 库未被发现,因此,再去安装 zlib 库

解决以上库的问题,重新编译之后,编译成功,编译成功结果如下:


Configuration summary  + using system PCRE library  + using OpenSSL library: /usr/local/openssl  + using system zlib library
nginx path prefix: "/app/nginx/" nginx binary file: "/app/nginx/sbin/" nginx modules path: "/app/nginx//modules" nginx configuration prefix: "/app/nginx/conf" nginx configuration file: "/app/nginx/conf/nginx.conf" nginx pid file: "/app/nginx/logs/nginx.pid" nginx error log file: "/app/nginx/logs/error.log" nginx http access log file: "/app/nginx/logs/access.log" nginx http client request body temporary files: "/app/nginx/client_body_temp" nginx http proxy temporary files: "/app/nginx/proxy_temp" nginx http fastcgi temporary files: "/app/nginx/fastcgi_temp" nginx http uwsgi temporary files: "/app/nginx/uwsgi_temp" nginx http scgi temporary files: "/app/nginx/scgi_temp"
复制代码


6、执行编译:make

make 是用来编译的,它从 Makefile 中读取指令,然后编译。

问题一:

编译之后,报出以下错误:


make -f objs/Makefilemake[1]: Entering directory `/app/nginx-1.13.8'cd /usr/local/openssl \        && if [ -f Makefile ]; then make clean; fi \        && ./config --prefix=/usr/local/openssl/.openssl no-shared  \        && make \        && make install_sw LIBDIR=lib/bin/sh: line 2: ./config: No such file or directorymake[1]: *** [/usr/local/openssl/.openssl/include/openssl/ssl.h] Error 127make[1]: Leaving directory `/app/nginx-1.13.8'make: *** [build] Error 2
复制代码


解决方法:因没有.openssl目录,编辑文件vim /app/nginx-1.11.3/auto/lib/openssl/conf将文件的内容            CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"            CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"            CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"            CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"            CORE_LIBS="$CORE_LIBS $NGX_LIBDL"修改为            CORE_INCS="$CORE_INCS $OPENSSL/include"            CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"            CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a"            CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a"            CORE_LIBS="$CORE_LIBS $NGX_LIBDL"然后再重新进行编译。
复制代码


7、执行安装:make install

make install 是用来安装的,它也从 Makefile 中读取指令,安装到指定的位置。

注意:

  • nginx 下的可执行命令 sbin 目录,应该建立在可执行程序的目录下。

  • 安装 nginx 的开发包和各个组件,需要注意版本和版本之间的兼容问题。

  • 注意 openssl 版本的问题,这可是一个坑,不要太新的版本。


启动 nginx

1、确保系统的 80 端口没被其他程序占用

nginx 默认占用 80 端口,需要避免端口冲突。

netstat -ano|grep 80

netstat -tunlp|grep 80

lsof -i:80

2、启动 nginx 程序

执行 sbin 目录命令:/app/nginx/sbin/nginx 或者./nginx

nginx 启动后,使用浏览器进行地址访问,地址:http://192.168.6.128



图 2 nginx 欢迎首页


问题:

执行启动命令,报出:

/app/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

使用以下指令查看 nginx 启动命令:

ldd /app/nginx/sbin/nginx

返回信息为:

 linux-vdso.so.1 =>  (0x00007fff921f1000)        libdl.so.2 => /lib64/libdl.so.2 (0x00000033e1c00000)        libpthread.so.0 => /lib64/libpthread.so.0 (0x00000033e2000000)        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00000033ef400000)        libpcre.so.1 => not found        libz.so.1 => /lib64/libz.so.1 (0x00000033e3000000)        libc.so.6 => /lib64/libc.so.6 (0x00000033e1800000)        /lib64/ld-linux-x86-64.so.2 (0x00000033e1400000)        libfreebl3.so => /lib64/libfreebl3.so (0x00000033f0000000)
复制代码


查看是否具有文件 libpcre.so.1,使用指令:whereis libpcre.so.1,结果显示有文件,所以,使用接下来的办法即可。

whereis libpcre.so.1

总结:

Nginx 使用多个模块,需要在编译前进行相应的配置。

Nginx 服务器的所有配置信息存在/app/nginx/conf/nginx.conf 下。


3-Nginx 与 Tomcat 整合


Nginx 与 Tomcat 整合

对于 Nginx 与 Tomcat 的整合,基本的运行程序,这里就不多说了,至少需要准备一个 Nginx 服务器和一个 Tomcat 服务器,最好是部署在不同的 ip 地址上。

1、修改 Nginx 配置文件信息

要通过 Nginx 代理 Tomcat 服务器,则需要修改 Nginx 下的配置文件 nginx.conf。

配置文件 nginx.conf 下的核心配置内容如下:



配置示例如下:


location /{	proxy_pass http://192.168.6.128:8080/;	proxy_redirect off;	proxy_set_header Host $host;	proxy_set_header X-Real-IP $remote_addr;	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
复制代码


2、检测配置的信息语法是否正确

进行该项步骤,并不表明实际环境一定能够运行,使用如下指令:

/app/nginx/sbin/nginx -t

返回正确结果如下:


nginx: the configuration file /app/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /app/nginx/conf/nginx.conf test is successful


3、启动或者重启 Nginx 服务器

指令如下:


重启:/app/nginx/sbin/nginx -s reload

启动:/app/nginx/sbin/nginx


4、通过浏览器访问 Nginx 地址

直接通过浏览器直接访问 Nginx 地址,看是否进行 Tomcat 服务器代理。当前情况下只能将普通 HTML 信息进行传递,并不能将所有的 JS、CSS、图片等信息进行接收。


4-负载均衡安装


负载均衡

负载均衡的本质就是一个 Nginx 服务器可以代理多台 Tomcat 服务器,实现服务器集群。为了进行测试,至少需要准备一个 Nginx 服务器和两个 Tomcat 服务器。Nginx 负载均衡可以实现动态配置,不需要关闭服务的情况下,动态加载启动。

1、修改 Nginx 配置文件

追加参与负载均衡的服务器内容,并配置各个服务器的权重,与 server 配置内容平行,需注意配置的格式。


upstream proxy-server{

server 192.168.6.128:8080;

server 192.168.6.1:8080;

}


2、修改代理服务器地址

修改代理服务地址,让其跳转到配置的服务器上。

proxy_pass http://proxy-server;

3、为了实现负载均衡,对各个服务进行权重配置

upstream proxy-server{

server 192.168.6.128:8080 weight=2;

server 192.168.6.1:8080 weight=3;

}


4、配置服务器为宕机或者备份服务器

为了实现更好的服务器集群服务,可以增加宕机、备份服务器配置。

donw(宕机),表示服务器不参与服务了:

server 192.168.6.128:8080 weight=3 down;

backup(备份),表示该服务器正常访问中不使用,如果所有的服务器性能都不够使用的时候自动启动该备份服务器:

server 192.168.6.128:8080 weight=3 backup;


负载均衡策略

1、round robin(默认方式)

轮询方式,依次将请求分配到各个后台服务器中,默认的负载均衡方式,适用于后台机器性能一致的情况,挂掉的机器可以自动从服务列表中剔除。

2、weight

根据权重来分发请求到不同的机器中,指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。

upstream bakend{

server 192.168.0.14 weight=5;

server 192.168.0.15 weight=6;

}


3、IP_hash

根据请求者 ip 的 hash 值将请求发送到后台服务器中,可以保证来自同一 ip 的请求被放到固定的机器上,可以解决 session 问题。

upstream bakend{

ip_hash;

server 192.168.0.14:88;

server 192.168.0.15:80;

}

4、url_hash(第三方)

根据请求的 url 的 hash 值将请求分到不同的机器中,当后台服务器为缓存的时候效率高。

在 upstream 中加入 hash 语句,server 语句中不能写入 weight 等其他的参数,hash_method 是使用的 hash 算法。

upstream backend{

server squid1:3128;

server squid2:3128;

hash $request_uri;

hash_method crc32;

}


建议

#定义负载均衡设备的 Ip 及设备状态

upstream bakend{

ip_hash;

server 127.0.0.1:9090 down;

server 127.0.0.1:8080 weight=2;

server 127.0.0.1:6060;

server 127.0.0.1:7070 backup;

}


每个设备的状态设置为:

1、down 表示当前的 server 不参与负载,进入宕机状态;

2、weight 默认为 1,weight 越大,负载的权重就越大。

3、max_fails:允许请求失败的次数默认为 1,当超过最大次数时,返回 proxy_next_upstream 模块定义的错误;

4、fail_timeout:max_fails 次失败后,暂停的时间。

5、backup:其它所有的非 backup 机器 down 或者忙的时候,请求 backup 机器。所以这台机器压力会最轻。

nginx 支持同时设置多组的负载均衡,用来给不用的 server 来使用。

client_body_in_file_only 设置为 On 可以讲 client post 过来的数据记录到文件中用来做 debug

client_body_temp_path 设置记录文件的目录,可以设置最多 3 层目录

location 对 URL 进行匹配,可以进行重定向或者进行新的代理,负载均衡


5. fair(第三方)

根据后台响应时间来分发请求,响应时间短的分发的请求多。

upstream backend{

server server1;

server server2;

fair;

}


正向代理

正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。


5-数据缓存


数据缓存

Nginx 服务器管理多台 Tomcat 服务器时,应该具有一定的算法,判断出哪台 Tomcat 繁忙,哪台 Tomcat 空闲,从而合理分配正确的资源。但是也会碰到一个问题,对于一些不会频繁变更的资源,每次都需要去重新加载,这样是非常消耗网络资源的。因此,Nginx 服务器提供了对于不需要频繁变更的资源进行缓存的机制,同时也提供了缓存的清除功能,最重提高集群效率。



1、建立缓存目录

mkdir -p /data/nginx/{temp,cache}

2、修改 Nginx 配置文件

修改 nginx.conf 文件,核心配置信息如下。



http 节点下设置缓存存储信息和压缩信息


proxy_temp_path /data/nginx/temp ;proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;proxy_connect_timeout 5;proxy_read_timeout 60;proxy_send_timeout 5;proxy_buffer_size 16k;proxy_buffers 4 64k;proxy_busy_buffers_size 128k;proxy_temp_file_write_size 128k;gzip on;gzip_min_length 1k;gzip_buffers 4 8k;gzip_http_version 1.1;gzip_types text/plain application/x-JavaScript text/css application/xml;gzip_disable "MSIE [1-6]\.";
复制代码


server 节点下设置代理服务器信息


location / {                root   html;                   index  index.html index.htm;                proxy_pass http://proxy-server;                proxy_redirect off;                proxy_set_header Host $host;                proxy_set_header X-Real-IP $remote_addr;                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                proxy_cache cache_one;                proxy_cache_key $host$uri$is_args$args;                proxy_cache_valid 200 302 1h;                proxy_cache_valid 301 1d;        }
复制代码


server 节点下设置清空缓存信息


 location ~ /purge(/.*) {           allow 127.0.0.1;           allow 192.168.6.0/24;           allow all;           proxy_cache_purge cache_one $host$1$is_args$args;        }
复制代码


server 节点下设置缓存文件类型


 location ~ .*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) {             proxy_pass http://proxy-server ;             proxy_redirect off;             proxy_set_header Host $host:$server_port;             proxy_cache cache_one;             proxy_cache_key $host$uri$is_args$args;             proxy_cache_valid 200 302 1h;             proxy_cache_valid 301 1d;             proxy_cache_valid any 1m;             expires 30d;        }
复制代码


3、清空缓存

清空的文件从根目录下开始寻找。

http://192.168.6.128/purge/asf-logo.png


6-IP_HASH


集群 Session 管理之 IP_HASH

一台 Tomcat 服务器针对一个客户端,存储有对应的 session。但是,现在是通过 Nginx 进行反向代理,那么,就会出现此时的客户端 session 访问到另一台 Tomcat 容器,而另一台 Tomcat 容器则认为是新的 session,所以,又会重新生成一个新的 session,这样会导致数据丢失。

Nginx 提供了 ip_hash,将客户端用户绑定到其最初访问的 Tomcat 上,不让其跳转到其他的容器上。修改配置文件即可实现。

upstream proxy-server{

ip_hash;

server 192.168.6.128:8080 weight=3;

server 192.168.6.1:8080 weight=3;

}


7-序列化 session


集群 Sessin 管理之序列化 session

从实际环境中,不可能将访问用户绑定到一台容器上,因此,会出现用户在多台服务器之间跳转的问题。那么,此时,对于 session 而言,就不应该交由 Tomcat 来进行管理,而是交给公共的 Redis 数据库进行管理。

管理所有的 session 信息使用 Redis 数据库,只需要修改 Tomcat 即可,与 Nginx 无关。

1、下载 Redis 与 tomcat 管理 session 的开发包

tomcat-redis-session-0.8.jar

commons-pool2-2.5.0.jar

jedis-2.9.0.jar

2、将开发包拷贝到集群 tomcat 的 lib 下

使用 scp 指令进行文件的远程发送。

cp -a /src/commons-pool2-2.5.0.jar /app/apache-tomcat-8.5.24/lib/

cp -a /src/jedis-2.9.0.jar /app/apache-tomcat-8.5.24/lib/

cp -a /src/tomcat-redis-session-0.8.jar /app/apache-tomcat-8.5.24/lib/

3、修改集群下所有 tomcat 的 server.xml 文件,追加 session 管理


 <Context path="/" docBase="/app/apache-tomcat-8.5.24/webapps/ROOT">              <Manager classname="ru.zinin.redis.session.RedisManager" redisHostname="192.168.6.128" redisPassword="fuys0822" redisPort="6379" redisTimeout="1000"/>        </Context>
复制代码


4、启动 Redis 和 Tomcat 服务

可以进入 Redis 客户端,查看所有存储的 key。


8-HA 机制的 Nginx 配置


单台 Nginx 问题

Nginx 利用反向代理和负载均衡机制,对多个 Tomcat 进行管理。但是,如果一旦 Nginx 出现了问题,那么,就会造成无法访问 Tomcat 服务器。因此,现实环境中,这样的事情是不允许发生的。

为了解决以上问题,一旦其中一台 Nginx 出现了问题而中断服务,就应该有另一台 Nginx 机器补充上去。这两台机器的所有配置信息相同。当其中一台服务器使用时,另一台则处于挂起状态,停止提供服务。只有服务的 Nginx 出现了问题而中断,另一台就开始提供服务。这也就是 HA(High Available)机制。

keepalived

对于 Nginx 的 HA 机制,可使用 keepalived 组件实现。keepalived 是一个免费的开源组件,最大的功能就是:采用一个虚拟路由的算法,虚拟出一个新的 ip 地址,使用这个 ip 地址代理多个服务器

疑问,是否可以直接使用 tomcat 进行?

keepalived 是一个基于 VRRP 协议来实现的服务高可用方案,利用其避免静态路由 IP 单点故障问题,类似的工具有 heartbeat、corosync、pacemaker。但是其不会单独出现,而是与其他负载均衡技术(如 Ivs、haproxy、nginx)一起工作来达到集群的高可用。

VRRP(Virtual Router Redundanc Protocol),虚拟路由冗余协议。其可实现路由器高可用的容错协议,即将 N 台提供相同功能的路由器组成一个路由器组(Router Group),这个组里面有一个 master 和多个 backup,但在外界看来就像一台一样,构成虚拟路由器。又有一个虚拟 IP,在 master 宕机之后其他的 backup 主机可以自动恢复使用。



Keepalived 高可用故障切换转移原理

Keepalived 高可用服务对之间的故障切换转移,是通过 VRRP 来实现的。在 keepalived 服务工作时,主 Master 节点会不断地向备节点发送(多播的方式)心跳消息,用来告诉备 Backup 节点自己还活着。当主节点发生故障时,就无法发送心跳的消息了,备节点也因此无法继续检测到来自主节点的心跳了。于是就会调用自身的接管程序,接管主节点的 IP 资源和服务。当主节点恢复时,备节点又会释放主节点故障时自身接管的 IP 资源和服务,恢复到原来的备用角色。


keepalived 配置

keepalived 官网提供的是一个开放的源代码,需要进行相应的编译和配置才可使用。

1、下载、解压文件

tar -zxvf keepalived-1.3.6.tar.gz -C /app/

2、进入 keepalived 目录,配置保存信息

cd /app/keepalived-1.3.6/

./configure --prefix=/usr


问题:

执行过程报出一下错误:

configure: error:

!!! OpenSSL is not properly installed on your system. !!!

!!! Can not include OpenSSL headers files. !!!

之前我已经安装了 openssl 库,但是说明相关的文件仍然没有安装完全,故又重新再次安装,使用指令:yum install openssl*


3、进行编译:make

4、程序安装:make install

安装成功之后,会在/usr/etc 目录中出现相关的配置信息,以及/usr/sbin 作为服务启动的命令。

5、修改 keepalived 配置文件,增加 VRRP 配置信息

vim /usr/etc/keepalived/keepalived.conf


5、修改 keepalived 配置文件,增加 VRRP 配置信息

vim /usr/etc/keepalived/keepalived.conf

获取网卡名字:ifconfig、cat /proc/net/dev

配置信息:



6、建立目录,拷贝配置文件至指定目录下

mkdir -p /etc/keepalived

cp /usr/etc/keepalived/keepalived.conf /etc/keepalived/

cp /app/keepalived-1.3.6/keepalived/etc/keepalived/keepalived.conf /etc/sysconfig/

cp -a /app/keepalived-1.3.6/keepalived/etc/init.d/keepalived /etc/init.d/

7、keepalived 服务指令

启动:service keepalived start

查看状态:service keepalived status

停止:service keepalived stop


9-NFS


NFS

Nginx 可以管理多台服务器,但是现在仍然要面临的问题便是多台服务器的代码怎么进行管理,如果是较少,还可以一台一台的部署,但是,如果服务器多了之后,怎么处理呢?

对于 Java 项目,有一种文件类型,其形式为*.war 文件,可以放置到 webapps 目录下,进行热部署,自动解压文件。因而,可以采用一种叫做 NFS 的组件进行文件的自动同步管理。

NFS(Network File System),网络文件系统。一种使用于分散式文件系统的协定,由 Sun 公司开发,于 1984 年对外公布。功能是通过网络协议让不同的机器,不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类 Unix 系统间实现磁盘文件共享的一种方法。

配置


1、下载并安装 NFS 软件包

yum install nfs-kernel-server

2、新建共享目录

mkdir -p /share/tomcat

3、配置新建共享目录,编辑 NFS 配置文件

vim /etc/exports

4、文件添加如下内容

/share/tomcat *(rw,sync,no_root_squash,no_subtree_check)

含义如下:

“*”:表示所有网段都可以访问,也可设置固定的 ip;

“rw”:表示共享目录下的数据,所有客户端可以进行读写操作;

“sync”:表示数据需要同步(内存和磁盘);

“no_root_squash”:使用 root 权限将具备完全的控制能力;

“no_subtree_check”:不受父目录的权限影响。



图 1 NFS 常用参数


5、启动服务器端的 nfs 服务,也就是 rpc 端口的服务绑定。

/etc/init.d/rpcbind restart

6、随后需要在客户端进行挂载配置,此时所有的其他目录都需要跟 nfs 目录中的内容同步,需要执行一个挂载操作处理,在客户端执行如下命令:

mount -t nfs 192.168.6.128:/share/tomcat /app/apache-tomcat-8.5.24/webapps

192.168.6.128:/share/tomcat:远程服务器目录

/app/apache-tomcat-8.5.24/webapps:本地要挂载的目录

unmount /app/apache-tomcat-8.5.24/webapps:取消挂载


用户头像

andy

关注

还未添加个人签名 2019-11-21 加入

还未添加个人简介

评论

发布
暂无评论
Nginx浅析_andy_InfoQ写作社区