Nginx入门搭建 负载均衡 keepalived实现高可用总结

一、介绍Nginx+环境搭建

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

2.Nginx环境搭建

1)下载Nginx,官网:http://nginx.org/

服务器大多都使用linux环境作为服务器,所以需要一台linux虚拟机做环境搭建。

2)虚拟机准备好后,ip为:192.168.211.129,由于nginx是用C语言写的,而且还支持地址栏重写等功能,所以我们需要安装一下相关的依赖包

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

3)安装流程

a)我们把刚才从官网下载的Nginx,文件上传到centos的/usr/local/server目录去。

b)紧接着我们在server目录下创建nginx目录 把压缩文件解压,进入解压的文件夹。

c)首先配置nginx安装信息./configure

d)执行编译和安装make && make install

nginx-1.13.10.tar.gz
[root@localhost server]# tar -xf nginx-1.13.10.tar.gz
[root@localhost server]# mkdir nginx
[root@localhost server]# cd nginx-1.13.10
[root@localhost nginx-1.13.10]# ./configure --prefix=/usr/local/server/nginx --add-module=/usr/local/server/nginx_module/echo-nginx-module-0.61 --with-debug
[root@localhost nginx-1.13.10]# make && make install

对于上面./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已经安全完成,我们进入/usr/local/server/nginx目录查看

[root@localhost nginx-1.13.10]# cd ../nginx
[root@localhost nginx]# ls
conf  html  logs  sbin
[root@localhost nginx]# 

e)开放防火墙的80端口(默认的Nginx端口号为80)

centos7之后防火墙为firewall,7之前为iptables,根据自己的防火墙去配置这个端口。

以firewall为例配置如下:

firewall-cmd --zone=public --add-port=80/tcp --permanent
#说明:
#–zone #作用域
#–add-port=80/tcp #添加端口,格式为:端口/通讯协议
#–permanent 永久生效,没有此参数重启后失效

测试:在本机访问虚拟机的IP,http://192.168.211.129:80

Nginx入门搭建 负载均衡 keepalived实现高可用总结_第1张图片

success!

nginx常用命令  
    nginx -c /usr/local/server/nginx/conf/nginx.conf  启动nginx(windows下start nginx);  
    nginx -s quit   停止ngix  
    nginx -s reload 重新载入nginx(当配置信息发生修改时)  
    nginx -v 查看版本  
    nginx -t 查看nginx的配置文件的目录  
    nginx -h 查看帮助信息  

二、Nginx配置文件介绍

Nginx最主要的配置文件在nginx安装目录的conf文件夹下的nginx.conf

主要配置项的介绍参照这篇博客:https://blog.csdn.net/m2606707610/article/details/102678546

三、Nginx反向代理

1.当我们网站并发量高的时候,一台tomcat无法承受大量并发,可以考虑Nginx+Tomcat集群来实现。

我们这里准备3台tomcat,端口分别是8081、8082、8083,针对同一个域名,每次用Nginx实现不同的转发,分别在每个tomcat的webapps目录下创建ROOT目录,并创建index.html,分别在html的body里标记1/2/3以示区分。

在配置文件的server域中配置反向代理

location ~ \.jsp$ {
    proxy_pass http://192.168.9.165:8080;
}

即可将客户端的url请求通过Nginx代理给tomcat,实际上tomcat接到的请求是由Nginx发出的,但封装了用户请求的所有数据,可以加一段配置来获取客户端真实请求的ip

location ~ \.jsp$ {
    proxy_set_header X-real-ip $remote_addr;
    proxy_pass http://192.168.9.165:8080;
}

在jsp中读取请求头信息,即可获取到真实请求的ip地址。

2.Nginx搭建图片服务器

正如常所说的动静分离,就可以用Nginx来搭建图片服务器来实现。

要获取动态资源可以通过location发送给tomcat服务器去处理,但获取静态资源没必要去向tomcat再去请求,因为会增加tomcat的并发压力,所以静态资源放到Nginx服务器上,当用户访问静态资源时直接从Nginx服务器去获取。

#所有带有images访问的路径直接去服务器的图片目录下查找
    location ~ \.jsp$ {
        root /usr/local/software/nginx/images;
    }

四、Nginx+tomcat集群

1.配置upstream 

在配置文件中配置一下tomcat集群

upstream myapp{
    server 192.168.211.129:8080 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.211.130:8080 weight=1 max_fails=2 fail_timeout=30s;
}

2.在server的location中配置

location ~ \.jsp$ {
    proxy_set_header X-real-ip $remote_addr;
    proxy_pass http://myapp;
}

3.集群配置成功,访问Nginx主机即可看到不同的请求会被代理到不同的tomcat去处理。

五、keepalived+Nginx集群解决单点故障

再牛逼的软件我们也不能保证它一定不挂,为了防止Nginx挂了导致整个服务无法使用的灾难发生,我们这里可以考虑使用Keepalived+Nginx集群实现高可用。

keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用。

原理如下:

Nginx入门搭建 负载均衡 keepalived实现高可用总结_第2张图片

keepalived相当于一个路由,如需实现高可用,就必须要求用户访问到的是keepalived的虚拟ip,由keepalived决定由哪个Nginx服务器去处理请求并代理给tomcat。

   VIP          |     IP           |       主机名     |      主从
                 | 192.168.211.129  |       keep129   |     master
 192.168.211.131 |------------------|-----------------|--------------
                 | 192.168.211.130  |      keep130    |    backup

1.在129和130虚拟机上安装nginx和keepalived

2.keepalived安装流程

1)将文件上传到服务器,然后解压安装

# cd /usr/local/server
# tar -zxvf keepalived-1.2.18.tar.gz
# cd keepalived-1.2.18
# ./configure --prefix=/usr/local/server/keepalived
# make && make install

将 keepalived 安装成 Linux 系统服务(相当于配置环境变量

因为没有使用 keepalived 的默认路径安装(默认是/usr/local),安装完成之后,需要做一些工作复制默认配置文件到默认路径

# mkdir /etc/keepalived
# cp /usr/local/server/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
复制 keepalived 服务脚本到默认的地址
# cp /usr/local/server/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# cp /usr/local/server/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# ln -s /usr/local/sbin/keepalived /usr/sbin/
# ln -s /usr/local/server/keepalived/sbin/keepalived /sbin/
设置 keepalived 服务开机启动
# chkconfig keepalived on

3.配置主节点

找到129注解keepalived的配置文件keepalived.conf

global_defs {
   router_id keep129;
}

vrrp_script chk_nginx {
 script "/etc/keepalived/nginx_check.sh"
 interval 2
 weight -20
}


vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 129
    mcast_src_ip 192.168.211.129
    priority 100
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
     chk_nginx
    }
    virtual_ipaddress {
        192.168.211.131
    }
}

4.配置从节点

找到130注解keepalived的配置文件keepalived.conf

global_defs {
   router_id keep130
}

vrrp_script chk_nginx {
 script "/etc/keepalived/nginx_check.sh"
 interval 2
 weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth2
    virtual_router_id 130
    priority 90
    mcast_src_ip 192.168.211.130
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
    chk_nginx
    }
    virtual_ipaddress {
        192.168.211.131
    }
}

5.在/etc/keepalived目录下创建nginx_check.sh文件

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

——————————————————————————————————————————————————

配置成功,可手动kill掉其中一个Nginx然后再启动来测试keepalived高可用是否搭建成功。

关于keepalived.config的配置项说明如下:

global_defs {
 ## keepalived 自带的邮件提醒需要开启 sendmail 服务。建议用独立的监控或第三方 SMTP 
 router_id keep130 ## 标识本节点的字条串,通常为 hostname
}
## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。如果
脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。如果脚本执行结果非 0,并且 weight
配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中 priority 对应
的值。
vrrp_script chk_nginx {
 script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
 interval 2 ## 检测时间间隔
 weight -20 ## 如果条件成立,权重-20
}
## 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
 state MASTER ## 主节点为 MASTER,对应的备份节点为 BACKUP
 interface eth1 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同,我的是 eth1
 virtual_router_id 130 ## 虚拟路由的 ID 号,两个节点设置必须一样,可选 IP 最后一段使用, 相
同的 VRID 为一个组,他将决定多播的 MAC 地址
 mcast_src_ip 192.168.211.130 ## 本机 IP 地址
 priority 100 ## 节点优先级,值范围 0-254,MASTER 要比 BACKUP 高
nopreempt ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样,默认 1s
## 设置验证信息,两个节点必须一致
authentication {
 auth_type PASS
 auth_pass 1111 ## 真实生产,按需求对应该过来
}
## 将 track_script 块加入 instance 配置块
 track_script {
 chk_nginx ## 执行 Nginx 监控的服务
}
## 虚拟 IP 池, 两个节点设置必须一样
 virtual_ipaddress {
    192.168.199.131 ## 虚拟 ip,可以定义多个
 }
}

你可能感兴趣的:(nginx)