• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

Nginx 高可用

互联网 diligentman 2个月前 (04-08) 30次浏览

高可用:启动两天相同业务服务的系统,一台出现了宕机,另外一台自动接管。如下图:

Nginx 高可用

 

这里我们使用 Keepalived 实现高可用。

Keepalived 的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

Keepalived 工作原理:通过vrrp协议实现。

Nginx 高可用

一、前期准备

准备两台Nginx服务器,IP分别为:

host1:192.168.56.103
host2:192.168.56.104

两台服务器都需要安装Keepalived,并且配置虚拟IP用于访问。

 

二、安装 Keepalived

下载安装

yum install keepalived -y
rpm -q -a keepalived
keepalived-1.3.5-19.el7.x86_64

修改配置文件

cd /etc/keepalived
vi keepalived.conf 

两台Nginx服务器都需要下载配置keepalived。

host1配置如下:

global_defs {
   notification_email {  # keepalived 服务器宕机异常出现的时候,发送通知邮件,可以配置多个邮箱地址
     acassen@163.com  # 收件人邮箱1
     failover@163.com # 收件人邮箱2
   }
   notification_email_from 2333@163.com # 邮箱发件人
   smtp_server smtp.163.com # 邮箱服务器地址
   smtp_connect_timeout 30 # 超时时间
   router_id LVS_DEVEL # 访问的主机地址
   vrrp_skip_check_adv_addr # 默认不跳过检查
   vrrp_gna_interval 0 # 单位秒,在一个网卡上每组消息之间的延迟时间,默认为 0
}

vrrp_script chk_nginx {
  script "/usr/local/src/nginx_check.sh"  # 检测文件的地址
  interval 2   # 检测脚本执行的间隔
  weight 2   # 权重
}

vrrp_instance VI_1 {
    state MASTER    # 主机MASTER、备机BACKUP    
    interface ens33   # 通信端口,通过 ifconfig 命令可以看到,根据自己的机器配置
    virtual_router_id 51 # 虚拟路由 ID ,主实例和副本实例保持一致
    priority 100  # 访问优先级,主机值较大,备机较小
    advert_int 1 # 心跳间隔,单位秒, keepalived 多机器集群通过心跳检测,如果发送心跳没反应,就立刻接管
    authentication { # 服务器之间的通信密码
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress { # 自定义虚拟 ip ,可以配置多个,每行一个
        192.168.56.105  # 虚拟ip
    }
}

host2配置如下:

global_defs {
   notification_email {  # keepalived 服务器宕机异常出现的时候,发送通知邮件,可以配置多个邮箱地址
     acassen@163.com  # 收件人邮箱1
     failover@163.com # 收件人邮箱2
   }
   notification_email_from 2333@163.com # 邮箱发件人
   smtp_server smtp.163.com # 邮箱服务器地址
   smtp_connect_timeout 30 # 超时时间
   router_id LVS_DEVEL # 访问的主机地址
   vrrp_skip_check_adv_addr # 默认不跳过检查
   vrrp_gna_interval 0 # 单位秒,在一个网卡上每组消息之间的延迟时间,默认为 0
}

vrrp_script chk_nginx {
  script "/usr/local/src/nginx_check.sh"  # 检测文件的地址
  interval 2   # 检测脚本执行的间隔
  weight 2   # 权重
}

vrrp_instance VI_1 {
    state BACKUP    # 主机MASTER、备机BACKUP    
    interface ens33   # 通信端口,通过 ifconfig 命令可以看到,根据自己的机器配置
    virtual_router_id 51 # 虚拟路由 ID ,主实例和副本实例保持一致
    priority 90  # 访问优先级,主机值较大,备机较小
    advert_int 1 # 心跳间隔,单位秒, keepalived 多机器集群通过心跳检测,如果发送心跳没反应,就立刻接管
    authentication { # 服务器之间的通信密码
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress { # 自定义虚拟 ip ,可以配置多个,每行一个
        192.168.56.105  # 虚拟ip
    }
}

我们分别启动 keepalived。

systemctl start keepalived.service

分别查看nginx 和 keepalived 是否启动。 

// 查看 nginx 是否成功启动
ps -ef | grep nginx

// 查看 keepalived 是否成功启动
ps -ef | grep keepalived

 

三、测试

配置信息如下

主服务器:192.168.56.103

从服务器:192.168.56.104

虚拟 IP:192.168.56.105

1、浏览器访问:192.168.56.105

2、关闭主机 192.168.56.103 上的 Nginx 和 Keepalived,再次访问虚拟IP,发现可以正常访问,并且访问的是从机。

展开阅读全文

© 著作权归作者所有

举报

打赏

0


0 收藏

微信
QQ
微博

分享

作者的其它热门文章

为什么阿里巴巴不建议boolean类型变量用isXXX?
一个 Java 对象到底有多大?
数据库自增ID用完了会怎么样?
为什么阿里巴巴禁止使用Apache Beanutils进行属性的copy?


程序员灯塔
转载请注明原文链接:Nginx 高可用
喜欢 (0)