`
maosheng
  • 浏览: 565429 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Keepalived+Nginx 实现双机热备

阅读更多
一.拓扑图:





二.拓扑图的规划:







三.此架构考虑的问题:

1)、Master没挂,则Master占有vip且nginx运行在Master上
2)、Master挂了,则Backup抢占vip且在Backup上运行nginx服务
3)、如果Master服务器上的nginx服务挂了,则vip资源转移到Backup服务器上
4)、检测后端服务器的健康状态

Master和Backup两边都开启nginx服务,无论Master还是Backup,当其中的一个keepalived服务停止后,vip都会漂移到keepalived服务还在的节点上。

如果要想使nginx服务挂了,vip也漂移到另一个节点,则必须用脚本或者在配置文件里面用shell命令来控制。

首先必须明确后端服务器(apache)的健康状态检测keepalived在这种架构上是无法检测的,后端服务器的健康状态检测是有nginx来判断的,但是nginx 的检测机制有一定的缺陷,后端服务器某一个宕机之后,nginx还是会分发请求给它,在一定的时间内后端服务响应不了,nginx则会发给另外一个服务 器,然后当客户的请求来了,nginx会一段时间内不会把请求分发给已经宕机的服务器,但是过一段时间后,nginx还是会把分发请求发给宕机的服务器 上。


四.实验环境:

Master:

OS  :CentOS 6.3
RIP :172.16.11.14
Software :
   keepalived-1.2.12
   nginx-1.8.0
   ipvsadm

Backup:

OS  :CentOS 6.3
RIP :172.16.11.15
Software :
   keepalived-1.2.12
   nginx-1.8.0
   ipvsadm

VIP :172.16.11.16

五. 配置文件:

Master 的 nginx.conf 部分:

    ..........

    upstream localhost { 
      server 172.16.11.11:80; 
      server 172.16.11.12:80; 
     }

    server {
        listen       8080;
        server_name  172.16.11.14;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

       location / {
                   proxy_set_header Host $host:8080;                 
                   proxy_connect_timeout   3; 
                   proxy_send_timeout      30; 
                   proxy_read_timeout      30; 
                   proxy_pass http://localhost; 
        }
    }

    ...........

Backup 的 nginx.conf 部分:

    ........

    upstream localhost { 
      server 172.16.11.11:80; 
      server 172.16.11.12:80; 
     }
  
    server {
        listen       8080;
        server_name  172.16.11.15;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
                   proxy_set_header Host $host:8080;                 
                   proxy_connect_timeout   3; 
                   proxy_send_timeout      30; 
                   proxy_read_timeout      30; 
                   proxy_pass http://localhost; 
        }
    }

    ........


Master 的 keepalived.conf:

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL_1
}

vrrp_script chk_http_port {
    script "</dev/tcp/127.0.0.1/8080"  #用shell命令检查nginx服务是否运行
    interval 1                         #时间间隔为1秒检测一次
    weight -2                          #当nginx的服务不存在了,就把当前的权重-2
    fall 2                             #测试失败的次数
    rise 1                             #测试成功的次数
}

vrrp_instance VI_1 {
    state MASTER         #只有 MASTER 和 BACKUP 两种状态
    interface eth0                          #进行通信的端口
    virtual_router_id 51 #同一个vrrp实例的唯一标识。即同一个vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的。在整个vrrp内也唯一。
    priority 101         #权重,数值越大,权重越大。MASTER大于SLAVE
    advert_int 1                            #MASTER和SLAVE负载均衡器之间同步检查的时间间隔。单位是:秒
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.11.16
    }
    track_script {
        chk_http_port                  #引用上面的vrrp_script定义的脚本名称
    }
}

virtual_server 172.16.11.16 8080 {
    delay_loop 6
    lb_algo wlc                       #负载均衡调度算法rr|wrr|lc|wlc|sh|dh|lblc
    lb_kind DR                        #负载均衡转发规则NAT|DR|TUN
    nat_mask 255.255.255.0
   #persistence_timeout 60
    protocol TCP

    sorry_server 127.0.0.1 80

    real_server 172.16.11.14 8080 {
        weight 1                   #权重,数值越大,权重越高。分发的可能越大
        HTTP_GET {
            url {
              path /
              status_code 200
            }

            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

}


Backup 的 keepalived.conf:

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL_2
}

vrrp_script chk_http_port { 
    script "</dev/tcp/127.0.0.1/8080" 
    interval 1 
    weight -2
    fall 2
    rise 1 
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.11.16
    }

    track_script { 
        chk_http_port 
    }
}

virtual_server 172.16.11.16 8080 {
    delay_loop 6
    lb_algo wlc
    lb_kind DR
    nat_mask 255.255.255.0
   #persistence_timeout 50
    protocol TCP

   sorry_server 127.0.0.1 80

   real_server 172.16.11.15 8080 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }

            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}


注意:

state            : 都是MASTER(不是一个MASTER,一个BACKUP)
priority         : Master 的 > Backup 的
virtual_router_id: 参数值要一样

为什么主备的参数state都是MASTER,state都设置成MASTER后,会根据priority的值大小竞争来决定谁是真正的MASTER,脚本检测也是在失败的时候会把权重减去相应的值(-2),比如原来 Master(14) 的priority=101,如果脚本检测到端口8080无法连接,就会 priority-2=99,小于 Backup(15) 的priority(100),此时 Backup 将竞争成为MASTER,这样就实现了Nginx应用的热备


验证:

# ip addr

# ipvsadm -L -n

如果想知道当前测试机(159.226.240.63)的访问请求被转发到那个服务器去了,可以在ipvsadm 命令后带一个选项,其完整形式为:ipvsadm –lcn | grep 159.226.240.63

[root@hld081028-mk ~]# ipvsadm -lcn | grep 159.226.240.63
TCP 14:56 ESTABLISHED 159.226.240.63:39783 172.16.11.16:8080 172.16.11.14:8080


六.测试场景

1.服务器层的双机热备
  1)其中一个服务器宕机
  2)其中一个服务器上的Keepalived宕掉
  3)其中一个服务器网络不通

2.应用层的双机热备
  1)其中一个服务器上的Nginx进程被意外kill
  2) 其中一个服务器上的应用端口(8080)不通






  • 大小: 25.5 KB
  • 大小: 3.1 KB
分享到:
评论

相关推荐

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

    Nginx+keepalived双机热备(主从模式)是一种常见的负载均衡技术,用于实现高可用环境和故障转移。该技术通过将Nginx与keepalived结合,实现了前端负载均衡和高可用性。 Nginx是一款流行的开源Web服务器软件,具有...

    nginx+keepalived实现双机热备高可用

    nginx+keepalived实现双机热备高可用 本文详细介绍了使用nginx和keepalived实现双机热备高可用的技术解决方案。该解决方案旨在解决nginx集群部署时的单点故障问题。通过keepalived软件,实现对nginx服务器的高可用...

    Nginx+keepalived双机热备(主从模式)高可用集群方案-完整部署记录(个人珍藏版)

    本片详细记录了Nginx+keepalived双机热备(主从模式)高可用集群方案-完整部署过程,讲解十分到位,可作为线上实操手册。特在此分享,希望能帮助到有用到的朋友。

    nginx+keepalive主从 双机热备

    nginx+keepalive 主从双机热备解决方案是指使用 nginx 和 keepalive 实现主从双机热备的自动切换解决方案。 一、nginx 的安装 在安装 nginx 之前,需要准备好以下安装包: * pcre-8.31.tar.gz * openssl-1.0.1c....

    keepalived+nginx双机热备+负载均衡 非抢占模式

    "keepalived+nginx双机热备+负载均衡 非抢占模式"是一种常见的解决方案,它能够确保服务的连续性和效率。下面将详细介绍这个主题。 **Keepalived** Keepalived是一款基于VRRP(Virtual Router Redundancy Protocol...

    keepalived+nginx实现双主热备

    keepalived+nginx实现双主热备

    keepalived实现双机热备

    Keepalived 实现双机热备 Keepalived 是一个类似于 Layer3, 4, 5 交换机制的软件,也就是我们平时说的第 3 层、第 4 层和第 5 层交换。Keepalived 的作用是检测 Web 服务器的状态,如果有一台 Web 服务器死机,或...

    nginx+keepalive主从 双机热备 + 自动切换解决方案

    本篇将详细介绍如何通过Nginx 和 Keepalive 实现主从双机热备,并配置自动切换功能,以达到负载均衡及高可用集群的目的。 #### 一、环境搭建概述 根据提供的部分内容,我们可以看出整个部署过程分为以下几个主要...

    redhat6.4+nginx+keepalived__实现双机热备和负载均衡

    redhat6.4+nginx+keepalived__实现双机热备和负载均衡

    高可用之Keepalived+Nginx实现高可用Web负载均衡

    Keepalived 是一种高性能的服务器高可用或热备解决方案,可以防止服务器单点故障的发生,而 Nginx 是一个流行的 Web 服务器软件。通过 Keepalived 和 Nginx 的结合,可以实现高可用的 Web 负载均衡。 Keepalived 是...

    Nginx+keepalived+tomcat实现性负载均衡(包含需要的包)

    在构建高性能、高可用性的Web服务时,使用Nginx+keepalived+tomcat的组合可以实现强大的负载均衡和故障转移功能。这个方案的核心思想是利用Nginx作为前端反向代理服务器,通过keepalived来确保服务的高可用性,并将...

    Nginx负载均衡+keepalived双机热备

    通过上述步骤,我们可以成功地实现一个基于Nginx的负载均衡系统,并利用Keepalived来实现双机热备,确保了系统的高可用性和稳定性。这种架构不仅能够有效分发流量至多个Web服务器,还能在一台服务器出现故障时自动...

    第三十三章:Lvs+Keepalived+Nginx+Tomcat高可用集群1

    本文主要讲述了如何构建一个高可用集群项目,使用 LVS、Keepalived、Nginx 和 Tomcat 实现高可用性和负载均衡。该项目的架构中,Keepalived 负责对 LVS 架构中的调度器进行热备份,至少包含两台热备的负载调度器,两...

    keepalived + nginx 主从热备.zip

    【标题】"keepalived + nginx 主从热备"是一个重要的网络服务高可用性解决方案,主要应用于Web服务器集群,确保在主服务器发生故障时,流量能够无缝切换到备用服务器,保持服务的连续性和稳定性。 【描述】这个...

    Keepalived和nginx实现负载和双机热备

    Keepalived和nginx实现负载和双机热备原理 。

    无标题Keepalived+Nginx+Tomcat+MySQL部署双机热备、负载均衡应用服务器

    本文档旨在详细介绍如何在Linux环境下构建一套基于Keepalived、Nginx、Tomcat及MySQL的服务集群,实现双机热备与负载均衡功能。以下内容将详细阐述配置步骤,特别关注于数据库服务器(5号机)的配置流程。 #### ...

    Keepalived+Nginx实现高可用Web负载均衡.docx

    Keepalived 是一种高性能的服务器高可用或热备解决方案,可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用。Keepalived 以 VRRP 协议为实现基础,用 VRRP 协议来实现高可用性(HA)...

    分布式架构高可用架构-Keepalived+Nginx实现高可用Web负载均衡.pdf

    ### 分布式架构高可用架构-Keepalived+Nginx实现高可用Web负载均衡 #### 一、场景需求 在互联网应用中,随着用户数量的增长和技术的发展,单一服务器已难以满足日益增长的服务需求。分布式系统架构应运而生于解决...

    Nginx++Keepalived+Tomcat负载均衡&动静分离

    二、部署调度器—搭建Nginx+Keepalived(双机热备) 在调度器服务器上,需要安装Nginx和Keepalived软件包。首先,需要安装编译工具和插件,然后添加nginx用户和组,解压Nginx安装包,编译和安装Nginx。接着,需要...

Global site tag (gtag.js) - Google Analytics