分步LVS: 詳解利用Keepalived+Nginx解決站點高可用性

方案:前端

利用keepalived+nginx實現官網web的高可用性linux

兩臺服務器一臺爲主,一臺爲備機,使兩臺機器公用一個虛擬IP,當主服務器宕機,106.3.32.6這個IP會自動切換到備機上,前端機恢復以後再自動切換回主服務機nginx

而後,主服務機和備機利用rsync實現實時同步數據,web

rsync的安裝配置能夠參照我以前的一篇文章:http://cuimk.blog.51cto.com/6649029/1322241shell


環境:bash

CentOS 6.4服務器

nginx-1.2.1併發

keepalived-1.2.2負載均衡

1、安裝

主和輔都須要安裝keepalived,安裝方法相同dom

yum -y install  kernel-devel
yum install openssl-* -y
wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
tar xzf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure --prefix=/usr/local/keepalived
make && make install
ln -s /usr/src/kernels/2.6.18-238.el5-i686/ /usr/src/linux
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/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

加入開機啓動:chkconfigkeepalived on


2、配置

主和輔配置的差異只在stateMASTER和priority 100

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
#   notification_email {    ####此處定義發生替換會郵件通知
#     cuimingkun@yinwuweiye.com
#   }
#   notification_email_from keepalived@domain.com
#   smtp_server 127.0.0.1
#   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_http_port {
                script "/root/shell/nginx_pid.sh" ##監控腳本位置
                interval 2
                weight 2
}
track_script {
       chk_http_port
       }
vrrp_instance VI_1 {
    state MASTER        #####備機爲BACKUP
    interface em1
    virtual_router_id 51
    priority 100        #####備機要小於主
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        106.3.32.6  ####虛擬IP
    }
}

3、分別在主和輔服務器上創建nginx的監控腳本

Keepalived管理虛IP是經過組播和優先級實現的,優先級高的會擁有虛IP的管理權,因此要實現IP自動切換,只須要創建一個監控腳本,讓keepalived進行調用,一旦發現nginx出現故障就kill掉keepalived的進程,讓其餘keepalived管理此IP

vi /root/shell/nginx_pid.sh

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

注意給腳本添加執行權限:chmod+x /root/shell/nginx_pid.sh

兩臺機器啓動keepalived:service keepalived start

4、測試

#ip a查看IP

查看主的IP,目前虛IP在主這裏


Kill掉主的keepalived,再查看,虛IP消失

查看輔的這邊,能夠看到虛IP

再啓動主的keepalived,虛IP又回到主的這邊

5、總結

此方案沒有作負載均衡,只是作了一個故障自動切換的處理,適用於PV不是很高的環境(固然Nginx作好調優其負載能力也是很強的),不過能夠以一樣的原理觸類旁通,把他作在高併發的負載均衡器上,來實現高必發的容災方案!

相關文章
相關標籤/搜索