跳至主要內容

应用篇

holic-x...大约 10 分钟HLWnginx

[Nginx基础]-应用篇

1.静态资源部署

【1】部署步骤说明

部署步骤(linux环境)

  • 进入nginx官网open in new window,下载指定版本的.tar.gz文件

  • 将下载好的nginx安装包上传到虚拟机并配置依赖环境

  • 解压、编译安装、启动nginx服务器,测试nginx是否可以正常访问

  • 将静态资源上传到指定的目录,并配置nginx.conf文件,随后重启服务器访问资源文件

【2】参考配置

进入nginx官网open in new window,下载指定版本的.tar.gz文件

​ 将下载好的nginx安装包上传到虚拟机指定路径,通过ls -l查看文件属性

# 也可通过wget获取安装包
wget http://nginx.org/download/nginx-1.15.3.tar.gz

安装依赖环境

#安装Nginx依赖环境,‐y表示所有提示默认选择y
yum -y install pcre pcre-devel
yum ‐y install zlib zlib‐devel  
yum ‐y install openssl openssl‐devel

解压和编译安装、启动nginx服务器

# 1.将nginx解压至指定目录(此处解压到/usr/local/software/)并重命名
tar -zxvf nginx-1.17.5.tar.gz -C /usr/local/software/
mv nginx-1.17.5 nginx

# 2.进入nginx目录,编译并安装【确保有gcc编译环境】
# 编译和测试
cd nginx
./configure

# 安装
make
make install

# 3.安装成功之后,在/usr/local下生成了nginx目录,进入nginx/sbin目录
cd /usr/local/nginx/sbin

# 在sbin目录下控制nignx服务(启动、停止、重写加载)
./nginx # 启动
./nginx ‐s stop # 停止
./nginx ‐s reload # 重写加载

# 启动成功后查看是否有nginx的线程是否存在
ps ‐ef | grep nginx

上传静态资源文件到指定目录,配置nginx.conf文件

server {
    listen        80;
    server_name localhost   ;
    location / {
    	root /home/test;
    	index index.html index.htm;
    }
}
# 将静态资源文件上传至/home/test目录

# 启动nginx服务,通过虚拟机ip:80访问首页(参考启动指令,启动nginx时指定配置文件)
/usr/local/nginx/sbin/nginx -c /usr/local/software/nginx/conf/nginx.conf

2.Nginx+Keepalived

【1】基本概念

Nginx+keepalived实现高可用

​ KeepAlived是一个高性能的服务器高可用或者热备解决方案,Keepalived主要是防止服务器单点故障的发生问题,可以通过与Nginx配置实现服务端高可用

​ KeepAlived是以VRRP协议为实现基础,用VRRP协议可以实现高可用,VRRP协议是用于实现路由器冗余的协议,VRRP协议是把两台或者多台路由器设备虚拟成一个设备,然后堆土提供虚拟的路由ip

【2】参考配置

🔖Keepalived安装、配置

(1)通过wget获取Keepalived安装包

参考步骤

wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz

# 配置步骤参考如下
[root@root  /]# cd /usr/local/software/soft
[root@root soft]# wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz
[root@root software]# tar -zxvf  keepalived-2.0.7.tar.gz    -C  /usr/local/software/
[root@root software]# mv keepalived-2.0.7 keepalived
[root@root software]# cd keepalived
[root@root keepalived]# yum -y install openssl openssl-devel
[root@root keepalived]# ./configure  --prefix=/usr/local/software/keepalived
[root@root keepalived]# make
[root@root keepalived]# make  install

可能存在的问题

# 安装过程错误提示
*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

# 如果安装过程中出现问题,需要根据提示完成相关依赖的安装即可
yum -y install libnl libnl-devel libnfnetlink-devel
# 依赖安装完成之后再次执行 
./configure  --prefix=/usr/local/software/keepalived
# 数据正常则依次执行make、make install指令完成安装
(2)将Keepalived添加到启动服务
[root@root ~]# mkdir /etc/keepalived
[root@root ~]# cp /usr/local/software/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived
[root@root ~]# cp /usr/local/software/keepalived/etc/sysconfig/keepalived  /etc/sysconfig

将keepalived添加到开机启动中

[root@root ~]# chkconfig keepalived on

启动keepalived、检查服务状态

# start启动服务  stop停止服务
service keepalived start 
# 查看当前状态
ps -ef | grep keepalived  
# 查看当前服务的状态
systemctl status keepalived 

🔖Nginx+keepalived双机热备(主从模式)

(1)场景介绍

​ 由于业务扩展,网站的访问量不断加大,负载越来越高。现需要在web前端放置nginx负载均衡,同时结合keepalived对前端nginx实现HA高可用。

​ 1)nginx进程基于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能。在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都 由主进程发出,Slave(worker)进程所有的超时任务都会被Master中止,属于非阻塞式任务模型。

​ 2)Keepalived是Linux下面实现VRRP备份路由的高可靠性运行件。基于Keepalived设计的服务模式能够真正做到主服务器和备份服务器故障时IP瞬间无缝交接。二者结合,可以构架出比较稳定的软件LB方案。

Keepalived介绍

​ Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。

VRRP协议

​ VRRP全称 Virtual Router Redundancy Protocol,即 虚拟路由冗余协议。可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器组成一个路由器组(Router Group),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟IP(vip,也就是路由器所在局域网内其他机器的默认路由),占有这个IP的master实际负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。

​ 在VRRP协议实现里,虚拟路由器使用 00-00-5E-00-01-XX 作为虚拟MAC地址,XX就是唯一的 VRID (Virtual Router IDentifier),这个地址同一时间只有一个物理路由器占用。在虚拟路由器里面的物理路由器组里面通过多播IP地址 224.0.0.18 来定时发送通告消息。每个Router都有一个 1-255 之间的优先级别,级别最高的(highest priority)将成为主控(master)路由器。通过降低master的优先权可以让处于backup状态的路由器抢占(pro-empt)主路由器的状态,两个backup优先级相同的IP地址较大者为master,接管虚拟IP。

双机高可用

​ 双机高可用一般是通过虚拟IP(飘移IP)方法来实现的,基于Linux/Unix的IP别名技术。

双机高可用方法目前分为两种

​ 1)双机主从模式:即前端使用两台服务器,一台主服务器和一台热备服务器。正常情况下,主服务器绑定一个公网虚拟IP,提供负载均衡服务,热备服务器处于空闲状态;当主服务器发生故障时,热备服务器接管主服务器的公网虚拟IP,提供负载均衡服务;但是热备服务器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。

​ 2)双机主主模式:即前端使用两台负载均衡服务器,互为主备,且都处于活动状态,同时各自绑定一个公网虚拟IP,提供负载均衡服务;当其中一台发生故障时,另一台接管发生故障服务器的公网虚拟IP(这时由非故障机器一台负担所有的请求)。这种方案,相对经济实惠

keepalived模块介绍

keepalived可以认为是VRRP协议在Linux上的实现,主要有三个模块,分别是core、check和vrrp

  • core:keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析

  • check:负责健康检查,包括常见的各种检查方式

  • vrrp:用来实现VRRP协议的

(2)环境搭建

环境搭建步骤说明

  • 安装、配置nginx环境(nginx基本配置、负载均衡配置)
  • Keepalived环境安装、配置
  • 监听文件配置

环境说明

Centos7 64位

  • Master机器 master-node 192.168.8.113

  • Slave 机器 (slave-node) 192.168.8.114、192.168.8.115

  • 本地机器ip 192.168.43.99(无线热点连接)

  • 公用的虚拟IP(VIP) 192.168.118.88 192.168.118.99(负载均衡器上配置的域名,都解析到这个虚拟的VIP上)

Tomcat服务器 : 三台机器上都装有tomcat服务器 ,默认端口号都是8080

1)nginx安装配置

​ 参考nginx安装配置、负载均衡配置的内容,修改配置文件(在三台服务器上安装nginx并完成相同配置)

2)Keepalived安装配置

​ 在三台服务器上安装Keepalived(安装过程不作赘述,参考上述内容即可)并配置

配置主节点服务:192.168.8.113

vim /etc/keepalived/keepalived.conf

global_defs {
 notification_email {#指定keepalived事件发送通知的邮箱
 	meagn1@163.com
   } 
   notification_email_from sns-lvs@gmail.com
   smtp_server 192.168.8.113
   smtp_connect_timeout 30
   router_id 192.168.8.113
   vrrp_skip_check_adv_addr
   vrrp_gna_interval 0
}  

vrrp_script chk_http_port {  ## 检测Nginx服务是否在运行
        script "/etc/keepalived/nginx_check.sh"

global_defs {
   } 
   smtp_server 192.168.8.113
   smtp_connect_timeout 30
   router_id 192.168.8.113
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}  

vrrp_script chk_http_port {  ## 检测Nginx服务是否在运行
        script "/etc/keepalived/nginx_check.sh"
        interval 2  ##检测时间
        weight -20  ## 如果条件成绩则权重减20
}       

vrrp_instance VI_1 {
    state MASTER
    interface ens33  #注意 必须配置当前的网卡(通过ifconfig指令查看)
    virtual_router_id 88  # 虚拟路由编号  主从要一致
    priority 100  # 优先级 数值越大获取请求的优先级越高
    advert_int 1  # 检查间隔
    authentication {
        auth_type PASS
        auth_pass noob #设置vrrp验证密码,在同一个vrrp下密码一致才能通信
    }   
    track_script{
        chk_http_port  # 检查脚本
}   
# 定义虚拟ip(要求网段一致:192.168.8.xx)
    virtual_ipaddress {
        192.168.8.88
        192.168.8.99
    }   
} 

配置从节点服务:192.168.8.114

global_defs {
   notification_email {
     meagn1@163.com
   } 
   notification_email_from sns-lvs@gmail.com
   smtp_server 192.168.8.114
   smtp_connect_timeout 30
   router_id 192.168.8.114
}  

vrrp_script chk_http_port {  ## 检测Nginx服务是否在运行
        script "/etc/keepalived/nginx_check.sh"  
        interval 2  ##检测时间
        weight -20  ## 如果条件成绩则权重减20
  }     
  
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 88
    mcast_src_ip 192.168.8.114
    priority 100 
    advert_int 1 
    authentication {
        auth_type PASS
        auth_pass noob
    }   
    track_script{
        chk_http_port
    }   
    virtual_ipaddress {
        192.168.8.88
        192.168.8.99
    }   
}  

配置从节点服务:92.168.8.115

global_defs {
   notification_email {
     meagn1@163.com
   } 
   notification_email_from sns-lvs@gmail.com
   smtp_server 192.168.8.115
   smtp_connect_timeout 30
   router_id 192.168.8.115
}  

vrrp_script chk_http_port {  ## 检测Nginx服务是否在运行
        script "/etc/keepalived/nginx_check.sh"  
        interval 2  ##检测时间
        weight -20  ## 如果条件成绩则权重减20
  }     
  
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 88
    mcast_src_ip 192.168.8.115
    priority 100 
    advert_int 1 
    authentication {
        auth_type PASS
        auth_pass noob
    }   
    track_script{
         chk_http_port
    }    
    virtual_ipaddress {
        192.168.8.88
        192.168.8.99
    }   
} 

配置监听文件nginx_check.sh(对应keepalived配置)

vim /etc/keepalived/nginx_check.sh

​ 如果nginx停止了,会尝试重新启动nginx,如果启动失败,会将keepalived进程杀死,将vip漂移到备份机器上

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

​ nginx_check.sh配置完成需赋予执行

chmod +777 /etc/keepalived/nginx_check.sh
3)测试验证

在主服务器上通过指令测试

# 启动nginx、Keepalived
sbin/nginx
service keepalived start
# 查看进程
ps -ef | grep nginx
ps -ef | grep keepalived

配置完成,通过指令ip a查看数据

  • 113

  • 114

​ 在网页上依次通过网址访问数据,查看结果并分析:结果显示可以在虚拟ip上访问数据,也可以通过真实ip访问数据,访问服务器的方式为轮询访问

192.168.8.88:8081/test.jsp
192.168.8.99:8081/test.jsp
192.168.8.113:8081/test.jsp
192.168.8.114:8081/test.jsp
192.168.8.115:8081/test.jsp
4)常见问题

VIP绑定失败

原因可能有:

  • iptables开启后,没有开放允许VRRP协议通信的策略(也有可能导致脑裂);可以选择关闭iptables
  • keepalived.conf文件配置有误导致,比如interface绑定的设备错误

VIP绑定后,外部ping不通

原因可能有:

  • 网络故障,可以检查下网关是否正常;
  • 网关的arp缓存导致,可以进行arp更新,命令是"arping -I 网卡名 -c 5 -s VIP 网关"
-c 表示要发多少个广播包
-U 非请求模式,更新同网段设备上的arp缓存
-I 通过哪个接口发送数据包,这个会使用到这个网卡的mac的地址

VIP无法访问,内部外部都无法ping通

原因可能有:

  • 查看配置文件是否有vrrp_strict 注释掉即可 测试能否内部Ping通
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3