原文地址,轉載請註明出處: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