nginx+keepalived负载均衡及高可用部署

原理说明

Keepalived的作用是检测服务器的状态,如果有一台节点的Nginx出现故障,Keepalived将检测到,杀死自身进程,这样客户端访问虚拟IP时就会走备节点,不会访问出故障的机器

 

安装流程

1: 下载最新的源码包

http://www.keepalived.org/download.html

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

2:安装编译时依赖

yum install  openssl-devel

3: 安装流程

tar -zxvf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure

#--prefix=/usr/local/keepalived --sysconf=/etc
make && make install

#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
#mkdir –pv /etc/keepalived
#cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

 

启动keepalived ,service keepalived start/stop/stauts

或cd /etc/init.d ,./keepalived start/stop/status

 

cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalilved

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/#

cp /usr/local/sbin/keepalived /usr/sbin/#

service  keepalived start

ps -ef | grep keepalived

说明:1. Linux目录/etc/init.d 与 /etc/rc.d/init.d

在Linux中,/etc/init.d 和 /etc/rc.d/init.d这两个目录,都是用来放服务脚本的,当Linux启动时,会寻找这些目录中的服务脚本,并根据脚本的run level确定不同的启动级别。

在制作服务脚本的过程中,使用了Linux的两个版本,CentOS和Ubuntu,需要在两个版本中都可以开机启动服务。但Ubuntu没有 /etc/rc.d/init.d这个目录,所以,为了保持同一种服务在CentOS和Ubuntu使用的统一性,将服务脚本(注:服务脚本在两个不同版本中是不同的)都放在 /etc/init.d 目录下,最终达到的效果是相同的。

需要说明的是:在CentOS和Ubuntu两个版本中,除了服务脚本放置的目录是相同的,服务脚本的编写及服务配置都是不同的。比如CentOS使用Chkconfig进行配置,而Ubuntu使用sysv-rc-conf进行配置。

2. /etc/sysconfig/,存放的都是系统配置文件,想使keepalived开机启动,相关的配置要放进来。

配置流程

配置/etc/keepalived/keepalived.conf

Master节点配置:

! Configuration File for keepalived

 

global_defs {

   notification_email {

   }#失败发送邮件配置

   notification_email_from [email protected]

   smtp_server 192.168.200.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

   vrrp_skip_check_adv_addr

   vrrp_strict

   vrrp_garp_interval 0

   vrrp_gna_interval 0

}

 

vrrp_script Monitor_Nginx {#监听

         script "/etc/keepalived/trace.sh"

         interval 2

         weight 2

}

 

vrrp_instance VI_1 {

    state MASTER #主节点

    interface bond0 #监听的网卡

    virtual_router_id 51 #主备此处一致

    mcast_src_ip 172.19.189.53 #主nginx地址

    priority 100 #优先级,主高于备

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {#虚拟ip

      172.19.189.90

    }

    track_script {#配置监听脚本

       Monitor_Nginx

    }

}

 

BACKUP节点配置:

!Configuration File for keepalived

 

global_defs {

   notification_email {

   }

   notification_email_from [email protected]

   smtp_server 192.168.200.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

   vrrp_skip_check_adv_addr

   vrrp_strict

   vrrp_garp_interval 0

   vrrp_gna_interval 0

}

 

 

vrrp_script Monitor_Nginx {

         script "/etc/keepalived/trace.sh"

         interval 2

         weight 2

}

 

 

vrrp_instance VI_1 {

    state SLAVER #备用节点

    interface bond0

    virtual_router_id 51

    mcast_src_ip 172.19.189.51#备用nginx地址

    priority 90 #优先级要低于主的

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {#对外提供的服务ip地址

      172.19.189.90

    }

   track_script {

      Monitor_Nginx

    }

 

}

 

检测脚本trace.sh 放在/etc/keepalived下面

#!/bin/bash

if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]

then

killall keepalived

fi

猜你喜欢

转载自blog.csdn.net/javajxz008/article/details/53264197