您的位置:首页 > 运维架构 > Nginx

nginx+keepalived实现双机热备

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

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



 

准备4台虚拟机来做这个实验:

192.168.223.111       node1   web服务器

192.168.223.112       node2   web服务器

192.168.223.13        node13   keepalived nginx (主)

192.168.223.14        node14   keepalived nginx (从)

 

虚拟IP(VIP):192.168.223.200

 

Node1 node2 上已配置好tomcat 、启动tomcat

在node1,node2上面设置VIP:ifconfig lo:1 192.168.223.200 netmask 255.255.255.255 broadcast192.168.223.100

如下图是node2上的VIP配置情况



 

在node13、node14上安装nginx或Tengine,此处安装的是Tengine,并配置好反向代理(即负载均衡)

 

Yum安装keepalived:yum –y installkeepalived

修改配置文件

vi /etc/keepalived/keepalived.conf

(红色的为修改)

! Configuration File for keepalived

 

global_defs {

  notification_email {

       root@location

   }

  notification_email_from Alexandre.Cassen@firewall.loc

  smtp_server 127.0.0.1

  smtp_connect_timeout 30

  router_id LVS_DEVEL

}

 

vrrp_script chk_http_port{

        script"/opt/keepalived/nginx.sh" #脚本

        interval 1

        weight -2

}

 

vrrp_instance VI_1 {

   state MASTER #BACKUP

   interface eth0

   virtual_router_id 51

   priority 100

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

    }

   virtual_ipaddress {

       192.168.223.200 #虚拟IP(VIP)

    }

track_script {

    chk_http_port

}

}

 

Node14 上的keepalived 的配置文件修改和node13基本一致,只需改变state为BACKUP 、priority的值小于100

 


 

上图中的nginx.sh 脚本如下:

#!/bin/bash

A=`ps -C nginx –no-header |wc -l`

if [ $A -eq 0 ];then

 /usr/local/nginx/sbin/nginx #nginx命令的路径

 sleep 3

  if[ `ps -C nginx --no-header |wc -l` -eq 0 ];then

   killall keepalived

  fi

fi

 

需要在/opt 下新建keepalived文件夹并写入脚本

mkdir –p /opt/keepalived

vim /opt/keepalived/nginx.sh

chmod +x /opt/keepalived/nginx.sh

 

分别在node13、node14上设置虚拟IP(VIP):ifconfig eth0:1 192.168.223.200/24

启动node13、node14上的nginx、keepalived

/usr/local/nginx/sbin/nginx -s start

service keepalived start

 

访问192.168.223.200,成功访问到node1和node2上的tomcat

 

停掉node13上的nginx服务:/usr/local/nginx/sbin/nginx -s stop

访问192.168.223.200,成功访问到node1和node2上的tomcat 此时node14成功接管node13成为master

 

再次启动192.168.223.13(node13)的nginx进程,192.168.223.13会自动接管成为master,192.168.223.14(node14)自动转为backup,从测试结果看,备机能成功接管,已经实现了热备
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: