nginx+keepalived搭建高可用負載均衡(雙主模式)

原文地址,轉載請註明出處:http://blog.csdn.net/qq_34021712/article/details/73441168    ©王賽超前端

前言
上一篇博客已經實現了nginx+keepalived主從配置,這篇博客來實現雙主配置,若是Nginx只有單臺的話就會出現單點問題,那麼整個網站就會掛掉,因此要實現Nginx的高可用,一臺掛掉還會有另外一臺頂上去,從而保證網站能夠持續的提供服務。nginx

高可用分爲如下兩種方式:centos

一、Nginx+keepalived 主從配置
這種方案,使用一個vip地址,前端使用2臺機器,一臺作主,一臺作備,但同時只有一臺機器工做,另外一臺備份機器在主機器不出現故障的時候,永遠處於浪費狀態,對於服務器很少的網站,該方案不經濟實惠。tomcat

二、Nginx+keepalived 雙主配置
這種方案,使用兩個vip地址,前端使用2臺機器,互爲主備,同時有兩臺機器工做,當其中一臺機器出現故障,兩臺機器的請求轉移到一臺機器負擔,很是適合於當前架構環境。
環境說明bash

服務器名稱    版本    安裝的服務    ip/vip
Nginx主服務器    CentOS 7    nginx+keepalived    192.168.1.115/192.168.1.155
Nginx從服務器    CentOS 7    nginx+keepalived    192.168.1.120/192.168.1.156
我這裏並無將tomcat集羣配置進來,只是爲了測試nginx和keepalive高可用,若是想要搞一套完整版的,參考下面的博客配置
Nginx配置負載均衡見:http://blog.csdn.net/qq_34021712/article/details/68927676
Nginx配置動靜分離見:http://blog.csdn.net/qq_34021712/article/details/68928650
主備模式搭建
第一步:安裝keepalived依賴的包
yum install gcc openssl-devel libnl3-devel popt-devel iptables-devel libnfnetlink-devel net-snmp-devel -y
第二步:編譯安裝keepalived
將keepalived的安裝包 上傳到/usr/local/software 目錄下
cd /usr/local/software
tar -zxvf keepalived-1.3.5.tar.gz
cd keepalived-1.3.5
./configure --prefix=/usr/local/keepalived
make && make install
第三步:將 keepalived 安裝成 Linux 系統服務
安裝完成以後, 須要作一些工做複製默認配置文件到 默認路徑
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cd /usr/local/software/keepalived-1.3.5
cp ./keepalived/etc/init.d/keepalived /etc/init.d/
chmod 755 /etc/init.d/keepalived
第四步:編寫nginx檢測腳本
vi /etc/keepalived/nginx_check.sh
內容以下:
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi
賦予執行權限
chmod +x /etc/keepalived/nginx_check.sh
第五步:修改keepalived的Master配置文件(192.168.1.115)服務器

vi /etc/keepalived/keepalived.conf
內容以下:
! Configuration File for keepalived  
# 全局配置,配置收件人  
global_defs {  
   notification_email {               ##通知機制,收件人  
     820518302@qq.com  
   }  
   notification_email_from keepalived@domain.com ####發件人  
   smtp_server 192.168.1.115                     ##發件服務器  
   smtp_connect_timeout 30                       ##服務器鏈接超時時間  
   router_id LVS_DEVEL                           ##路由器標誌  
}  
# 集羣資源監控,組合track_script進行  
vrrp_script check_haproxy {  
script "/etc/keepalived/nginx_check.sh"  #檢測 nginx 狀態的腳本路徑
interval 2  #檢測時間間隔
weight -20  #條件成立 權重減20
}  
vrrp_instance HAPROXY_HA {  
# 設置當前主機爲主節點,若是是備用節點,則設置爲BACKUP 
state MASTER  
# 指定HA監測網絡接口,能夠用ifconfig查看來決定設置哪個  
interface eno16777736  
# 虛擬路由標識,同一個VRRP實例要使用同一個標識,主備機  
virtual_router_id 80  
# 由於當前環境中VRRP組播有問題,改成使用單播發送VRRP報文  若是VRRP組播沒問題,如下這塊的內容能夠註釋掉。
# 這個地方須要關注,以前未作此設置,結果主備節點互相不能發現,所以主備節點都升級成了MASTER,而且綁定了VIP  
# 主節點時,內容爲:  
#unicast_src_ip 192.168.1.115  
# unicast_peer {  
# 192.168.1.120 
#}  
# 設置優先級,確保主節點的優先級高過備用節點
priority 100  
# 用於設定主備節點間同步檢查時間間隔  
advert_int 2  
# 設置高可用集羣中不搶佔功能,在主機down後,從機接管,當主機從新恢復後,設置此功能,備機將繼續提供服務,從而避免因切換致使的隱患  
#nopreempt  
# 設置主備節點間的通訊驗證類型及密碼,同一個VRRP實例中需一致  
authentication {  
auth_type PASS  
auth_pass 1234  
}  
# 集羣資源監控,組合vrrp_script進行  
track_script {  
check_haproxy  
}  
# 設置虛擬IP地址,當keepalived狀態切換爲MASTER時,此IP會自動添加到系統中  
# 當狀態切換到BACKUP時,此IP會自動從系統中刪除  
# 能夠經過命令ip add查看切換後的狀態  
virtual_ipaddress {  
192.168.1.155  #虛擬ip配置完以後就用它訪問  
}  
}
vrrp_instance HAPROXY_HA2 {  
# 設置當前主機爲主節點,若是是備用節點,則設置爲BACKUP 
state BACKUP  
# 指定HA監測網絡接口,能夠用ifconfig查看來決定設置哪個  
interface eno16777736  
# 虛擬路由標識,同一個VRRP實例要使用同一個標識,主備機  
virtual_router_id 81  
# 由於當前環境中VRRP組播有問題,改成使用單播發送VRRP報文  若是VRRP組播沒問題,如下這塊的內容能夠註釋掉。
# 這個地方須要關注,以前未作此設置,結果主備節點互相不能發現,所以主備節點都升級成了MASTER,而且綁定了VIP  
# 主節點時,內容爲:  
#unicast_src_ip 192.168.1.115  
# unicast_peer {  
# 192.168.1.120 
#}  
# 設置優先級,確保主節點的優先級高過備用節點
priority 90  
# 用於設定主備節點間同步檢查時間間隔  
advert_int 2  
# 設置高可用集羣中不搶佔功能,在主機down後,從機接管,當主機從新恢復後,設置此功能,備機將繼續提供服務,從而避免因切換致使的隱患  
#nopreempt  
# 設置主備節點間的通訊驗證類型及密碼,同一個VRRP實例中需一致  
authentication {  
auth_type PASS  
auth_pass 1234  
}  
# 集羣資源監控,組合vrrp_script進行  
track_script {  
check_haproxy  
}  
# 設置虛擬IP地址,當keepalived狀態切換爲MASTER時,此IP會自動添加到系統中  
# 當狀態切換到BACKUP時,此IP會自動從系統中刪除  
# 能夠經過命令ip add查看切換後的狀態  
virtual_ipaddress {  
192.168.1.156  #虛擬ip配置完以後就用它訪問  
}  
}
注意:若是配置雙主模式,必定要將nopreempt這個屬性註釋掉,搭建主備的時候須要他,搭建雙主模式的時候,若是開啓它,會將兩個虛擬ip綁定到同一個服務器上。
第六步:修改keepalived的BACKUP配置文件(192.168.1.120)網絡

! Configuration File for keepalived  
# 全局配置,配置收件人  
global_defs {  
   notification_email {               ##通知機制,收件人  
     820518302@qq.com  
   }  
   notification_email_from keepalived@domain.com ####發件人  
   smtp_server 192.168.1.120                     ##發件服務器  
   smtp_connect_timeout 30                       ##服務器鏈接超時時間  
   router_id LVS_DEVEL                           ##路由器標誌  
}  
# 集羣資源監控,組合track_script進行  
vrrp_script check_haproxy {  
script "/etc/keepalived/nginx_check.sh"  #檢測 nginx 狀態的腳本路徑
interval 2  #檢測時間間隔
weight -20  #條件成立 權重減20
}  
vrrp_instance HAPROXY_HA {  
# 設置當前主機爲主節點,若是是備用節點,則設置爲BACKUP 
state BACKUP  
# 指定HA監測網絡接口,能夠用ifconfig查看來決定設置哪個  
interface eno16777736  
# 虛擬路由標識,同一個VRRP實例要使用同一個標識,主備機  
virtual_router_id 80  
# 由於當前環境中VRRP組播有問題,改成使用單播發送VRRP報文  若是VRRP組播沒問題,如下這塊的內容能夠註釋掉。
# 這個地方須要關注,以前未作此設置,結果主備節點互相不能發現,所以主備節點都升級成了MASTER,而且綁定了VIP  
# 主節點時,內容爲:  
#unicast_src_ip 192.168.1.120  
# unicast_peer {  
# 192.168.1.115 
#}  
# 設置優先級,確保主節點的優先級高過備用節點
priority 90  
# 用於設定主備節點間同步檢查時間間隔  
advert_int 2  
# 設置主備節點間的通訊驗證類型及密碼,同一個VRRP實例中需一致  
authentication {  
auth_type PASS  
auth_pass 1234  
}  
# 集羣資源監控,組合vrrp_script進行  
track_script {  
check_haproxy  
}  
# 設置虛擬IP地址,當keepalived狀態切換爲MASTER時,此IP會自動添加到系統中  
# 當狀態切換到BACKUP時,此IP會自動從系統中刪除  
# 能夠經過命令ip add查看切換後的狀態  
virtual_ipaddress {  
192.168.1.155  #虛擬ip配置完以後就用它訪問  
}  
}
vrrp_instance HAPROXY_HA2 {  
# 設置當前主機爲主節點,若是是備用節點,則設置爲BACKUP 
state MASTER  
# 指定HA監測網絡接口,能夠用ifconfig查看來決定設置哪個  
interface eno16777736  
# 虛擬路由標識,同一個VRRP實例要使用同一個標識,主備機  
virtual_router_id 81  
# 由於當前環境中VRRP組播有問題,改成使用單播發送VRRP報文  若是VRRP組播沒問題,如下這塊的內容能夠註釋掉。
# 這個地方須要關注,以前未作此設置,結果主備節點互相不能發現,所以主備節點都升級成了MASTER,而且綁定了VIP  
# 主節點時,內容爲:  
#unicast_src_ip 192.168.1.115  
# unicast_peer {  
# 192.168.1.120 
#}  
# 設置優先級,確保主節點的優先級高過備用節點
priority 100  
# 用於設定主備節點間同步檢查時間間隔  
advert_int 2  
# 設置高可用集羣中不搶佔功能,在主機down後,從機接管,當主機從新恢復後,設置此功能,備機將繼續提供服務,從而避免因切換致使的隱患  
#nopreempt  
# 設置主備節點間的通訊驗證類型及密碼,同一個VRRP實例中需一致  
authentication {  
auth_type PASS  
auth_pass 1234  
}  
# 集羣資源監控,組合vrrp_script進行  
track_script {  
check_haproxy  
}  
# 設置虛擬IP地址,當keepalived狀態切換爲MASTER時,此IP會自動添加到系統中  
# 當狀態切換到BACKUP時,此IP會自動從系統中刪除  
# 能夠經過命令ip add查看切換後的狀態  
virtual_ipaddress {  
192.168.1.156  #虛擬ip配置完以後就用它訪問  
}  
}
測試高可用
第一步:啓動nginx和keepalived服務
啓動nginx:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
啓動keepalived:keepalived
啓動以後,使用ip addr(centos6以前版本使用 ifconfig) 兩臺服務器分別綁定不一樣的虛擬ip到網卡架構


第二步:經過虛擬ip訪問服務
經過虛擬ip訪問服務,會跳轉到nginx的服務上。負載均衡


第三步:殺掉192.168.1.120上的keepalived再次訪問服務
注意:殺掉nginx是不行的,由於上面的腳本 是檢測到nginx宕機 會重啓nginx的dom


第四步:再次訪問服務
再次使用192.168.1.156這個虛擬ip訪問nginx服務,原本指向120的,如今指向115了

第五步:重啓120上的keepalived,再次訪問服務,發現又從115切換回120

相關文章
相關標籤/搜索