Nginx+keepalived 高可用雙機熱備(主從模式/雙主模式)
基礎介紹
負載均衡技術對於一個網站尤其是大型網站的web伺服器叢集來說是至關重要的!做好負載均衡架構,可以實現故障轉移和高可用環境,避免單點故障,保證網站健康持續執行。
由於業務擴充套件,網站的訪問量不斷加大,負載越來越高。現需要在web前端放置nginx負載均衡,同時結合keepalived對前端nginx實現HA高可用。
1:
nginx程序 基於Master+Slave(worker)多程序模型
,自身具有非常穩定的子程序管理功能。
在Master程序分配模式下,Master程序永遠不進行業務處理,只是進行任務分發,從而達到Master程序的存活高可靠性,Slave(worker)程序所有的業務訊號都 由主程序發出,Slave(worker)程序所有的超時任務都會被Master中止,屬於非阻塞式任務模型。
2:
Keepalived 是Linux下面實現VRRP備份路由的高可靠性執行件
。基於Keepalived設計的服務模式能夠真正做到主伺服器和備份伺服器故障時IP瞬間無縫交接。二者結合,可以構架出比較穩定的軟體LB方案。
Keepalived介紹:
Keepalived是一個基於VRRP協議來實現的服務高可用方案,可以利用其來避免IP單點故障,類似的工具還有heartbeat、corosync、pacemaker。但是它一般不會單獨出現,而是與其它負載均衡技術(如lvs、haproxy、nginx)一起工作來達到叢集的高可用。
keepalived可以認為是VRRP協議在Linux上的實現,主要有三個模組,分別是core、check和vrrp。
core模組為keepalived的核心,負責主程序的啟動、維護以及全域性配置檔案的載入和解析。
check負責健康檢查,包括常見的各種檢查方式。
vrrp模組是來實現VRRP協議的。
VRRP協議:
VRRP全稱 Virtual Router Redundancy Protocol,即 虛擬路由冗餘協議。可以認為它是實現路由器高可用的容錯協議,即將N臺提供相同功能的路由器組成一個路由器組(RouterGroup),這個組裡面有一個master和多個backup,但在外界看來就像一臺一樣,構成虛擬路由器,擁有一個虛擬IP(vip,也就是路由器所在區域網內其他機器的預設路由),佔有這個IP的master實際負責ARP相應和轉發IP資料包,組中的其它路由器作為備份的角色處於待命狀態。master會發組播訊息,當backup在超時時間內收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先順序來選舉一個backup當master,保證路由器的高可用。
在VRRP協議實現裡,虛擬路由器使用 00-00-5E-00-01-XX 作為虛擬MAC地址,XX就是唯一的 VRID (VirtualRouter IDentifier),這個地址同一時間只有一個物理路由器佔用。在虛擬路由器裡面的物理路由器組裡面通過多播IP地址224.0.0.18 來定時傳送通告訊息。每個Router都有一個 1-255 之間的優先級別,級別最高的(highest priority)將成為主控(master)路由器。通過降低master的優先權可以讓處於backup狀態的路由器搶佔(pro-empt)主路由器的狀態,兩個backup優先順序相同的IP地址較大者為master,接管虛擬IP。
nginx 雙機高可用一般是通過虛擬IP(飄移IP)方法來實現的,基於Linux/Unix的IP別名技術。
雙機高可用方法目前分為兩種:
1)Nginx+keepalived 雙機主從模式:
即前端使用兩臺伺服器,一臺主伺服器和一臺熱備伺服器,正常情況下,主伺服器繫結一個公網虛擬IP,提供負載均衡服務,熱備伺服器處於空閒狀態;當主伺服器發生故障時,熱備伺服器接管主伺服器的公網虛擬IP,提供負載均衡服務;但是熱備伺服器在主機器不出現故障的時候,永遠處於浪費狀態,對於伺服器不多的網站,該方案不經濟實惠。
2)Nginx+keepalived 雙機主主模式:
即前端使用兩臺負載均衡伺服器,互為主備,且都處於活動狀態,同時各自繫結一個公網虛擬IP,提供負載均衡服務;當其中一臺發生故障時,另一臺接管發生故障伺服器的公網虛擬IP(這時由非故障機器一臺負擔所有的請求)。這種方案,經濟實惠,非常適合於當前架構環境。
今天在此分享下,Nginx+keepalived 實現高可用負載均衡的兩種模式:
一:Nginx+keepalived 雙機 主從模式
1.環境介紹
作業系統:centos6.8 64位
centos6-1 192.168.139.130 nginx+keepalived-master
centos6-2 192.168.139.129 nginx+keepalived-backup
VIP: 192.168.139.200 //負載均衡器上配置的域名都解析到這個VIP上
2.環境安裝
在安裝nginx和keepalive服務(master和backup兩臺伺服器上的安裝操作完全一樣)
安裝依賴,關閉selinux(記得重啟)
臨時關閉:
[[email protected] ~]# getenforce Enforcing
[[email protected] ~]# setenforce 0
[[email protected] ~]# getenforce
Permissive永久關閉:
[[email protected] ~]# vim /etc/sysconfig/selinux
SELINUX=enforcing 改為 SELINUX=disabled
重啟服務reboot
[root@centos6-1 ~]# yum -y install gcc pcre-devel zlib-devel openssl-devel
[root@centos6-1 ~]# service iptables stop
下載最新安裝包
[root@centos6-1 ~]# cd /usr/local/src/
[root@centos6-1 src]# wget https://nginx.org/download/nginx-1.9.9.tar.gz
[root@centos6-1 src]# wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz
安裝nginx
[root@centos6-1 src]# tar -zxvf nginx-1.9.9.tar.gz
[root@centos6-1 src]# cd nginx-1.9.9
[root@centos6-1 nginx-1.9.9]# useradd www -M -s /sbin/nologin
[root@centos6-1 nginx-1.9.9]# vim auto/cc/gcc
小插曲 注:
1.新增www使用者,其中 -M
引數表示不新增使用者家目錄,-s
引數表示指定shell型別
2. vim auto/cc/gcc 檔案,將這句“#CFLAGS="$CFLAGS -g
“”註釋掉 取消Debug編譯模式 大概在179行
繼續安裝nginx
[[email protected]-1 nginx-1.9.9]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre
[[email protected]-1 nginx-1.9.9]# make && make install
安裝keepalived
[root@centos6-1 nginx-1.9.9]# cd ..
[root@centos6-1 src]# ll
total 1728
-rw-r--r--. 1 root root 873480 Aug 23 23:18 keepalived-2.0.7.tar.gz
drwxr-xr-x. 9 1001 1001 4096 Aug 28 18:26 nginx-1.9.9
-rw-r--r--. 1 root root 887908 Dec 9 2015 nginx-1.9.9.tar.gz
[root@centos6-1 src]# tar -zxvf keepalived-2.0.7.tar.gz
[root@centos6-1 src]# cd keepalived-2.0.7
[root@centos6-1 keepalived-2.0.7]# ./configure
小插曲 注:
編譯提示警告如上,解決如下:
[root@centos6-1 keepalived-2.0.7]# yum -y install libnl libnl-devel
[root@centos6-1 keepalived-2.0.7]# yum install -y libnfnetlink-devel
繼續安裝 keepalived,這裡更換版本為keepalived-1.3.2.tar.gz, 再次編譯
小插曲: 在keepalived-2.0.7版本,無論是編譯,還是make
都會報錯,如下,因此更換版本。估計是keepalived-1.4.5直接跳到2.0版本改動的問題
[root@centos6-1 src]# wget http://www.keepalived.org/software/keepalived-1.3.2.tar.gz
[root@centos6-1 src]# tar -zxvf keepalived-1.3.2.tar.gz
[root@centos6-1 src]# cd keepalived-1.3.2
[root@centos6-1 keepalived-1.3.2]# ./configure
[root@centos6-1 keepalived-1.3.2]# make && make install
[root@centos6-1 keepalived-1.3.2]# cp /usr/local/src/keepalived-1.3.2/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/
[root@centos6-1 keepalived-1.3.2]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
[root@centos6-1 keepalived-1.3.2]# mkdir /etc/keepalived
[root@centos6-1 keepalived-1.3.2]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
[root@centos6-1 keepalived-1.3.2]# cp /usr/local/sbin/keepalived /usr/sbin/
#將nginx和keepalive服務加入開機啟動服務
[root@centos6-1 keepalived-1.3.2]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
[root@centos6-1 keepalived-1.3.2]# echo "/etc/init.d/keepalived start" >> /etc/rc.local
3.配置Nginx服務
master和backup兩臺伺服器的nginx的配置完全一樣
。主要是配置/usr/local/nginx/conf/nginx.conf的http,當然也可以配置vhost虛擬主機目錄,然後配置vhost下的比如LB.conf檔案。
其中:
多域名指向是通過虛擬主機(配置http下面的server)實現;
同一域名的不同虛擬目錄通過每個server下面的不同location實現;
到後端的伺服器在vhost/LB.conf下面配置upstream,然後在server或location中通過proxy_pass引用。
要實現前面規劃的接入方式,LB.conf的配置如下(新增proxy_cache_path和proxy_temp_path
這兩行,表示開啟nginx的快取功能):
[[email protected]1 conf]# vim /usr/local/nginx/conf/nginx.conf
user www;
worker_processes 8;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
charset utf-8;
######
## set access log format
######
log_format main '$http_x_forwarded_for $remote_addr $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_cookie" $host $request_time';
#######
## http setting
#######
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
#便於測試,快取功能先取消
#proxy_cache_path /var/www/cache levels=1:2 keys_zone=mycache:20m max_size=2048m inactive=60m;
#proxy_temp_path /var/www/cache/tmp;
fastcgi_connect_timeout 3000;
fastcgi_send_timeout 3000;
fastcgi_read_timeout 3000;
fastcgi_buffer_size 256k;
fastcgi_buffers 8 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
client_header_timeout 600s;
client_body_timeout 600s;
# client_max_body_size 50m;
client_max_body_size 100m; #允許客戶端請求的最大單個檔案位元組數
client_body_buffer_size 256k; #緩衝區代理緩衝請求的最大位元組數,可以理解為先儲存到本地再傳給使用者
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
gzip_vary on;
## includes vhosts
include vhosts/*.conf;
}
[root@centos6-1 conf]# mkdir /usr/local/nginx/conf/vhosts
[root@centos6-1 conf]# mkdir /var/www/cache
[root@centos6-1 conf]# ulimit 65535
[root@centos6-1 conf]# cd vhosts/
[root@centos6-1 vhosts]# vim LB.conf
upstream LB-WWW {
ip_hash;
server 192.168.139.129:8080 max_fails=3 fail_timeout=30s;
#max_fails = 3 為允許失敗的次數,預設值為1
server 192.168.139.130:8080 max_fails=3 fail_timeout=30s;
#fail_timeout = 30s 當max_fails次失敗後,暫停將請求分發到該後端伺服器的時間
}
server {
listen 80;
server_name dev.hanginx.com;
access_log /usr/local/nginx/logs/dev-access.log;
error_log /usr/local/nginx/logs/dev-error.log;
location / {
proxy_pass http://LB-WWW;
proxy_redirect off ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300; #跟後端伺服器連線超時時間,發起握手等候響應時間
proxy_send_timeout 300; #後端伺服器回傳時間,就是在規定時間內後端伺服器必須傳完所有資料
proxy_read_timeout 600; #連線成功後等待後端伺服器的響應時間,已經進入後端的排隊之中等候處理
proxy_buffer_size 256k; #代理請求緩衝區,會儲存使用者的頭資訊以供nginx進行處理
proxy_buffers 4 256k; #同上,告訴nginx儲存單個用幾個buffer最大用多少空間
proxy_busy_buffers_size 256k; #如果系統很忙時候可以申請最大的proxy_buffers
proxy_temp_file_write_size 256k; #proxy快取臨時檔案的大小
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size 128m;
# proxy_cache mycache;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
}
}
驗證方法
(保證從負載均衡器本機到後端真實伺服器之間能正常通訊):1)首先在本機用IP訪問上面LB.cong中配置的各個後端真實伺服器的url
2)然後在本機用域名和路徑訪問上面LB.cong中配置的各個後端真實伺服器的域名/虛擬路徑
由於是內網演示,因此暫時只用IP訪問後端web
[[email protected] bin]# curl http://192.168.139.130:8080
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>master 130</title>
</head>
<body>
master 130
</body>
</html>
[[email protected]ntos6-1 bin]# curl http://192.168.139.129:8080
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>backup 129</title>
</head>
<body>
backup 129
</body>
</html>
4.配置keepalived服務
注:
4.1.master-130負載機上的keepalived配置(sendmail部署可以參考:linux下sendmail郵件系統安裝操作記錄)
當然,sendmail 不安裝也可以,不影響我們的主從模式。
[root@centos6-1 keepalived]# pwd
/etc/keepalived
[root@centos6-1 keepalived]# cp keepalived.conf keepalived.conf.bak
[root@centos6-1 keepalived]# vim keepalived.conf
! Configuration File for keepalived #全域性定義
global_defs {
notification_email { #指定keepalived在發生事件時(比如切換)傳送通知郵件的郵箱
xiaochong@then.com #設定報警郵件地址,可以設定多個,每行一個。 需開啟本機的sendmail服務
109971736883@qq.com
}
notification_email_from xiaochong@then.com #keepalived在發生諸如切換操作時需要傳送email通知地址
smtp_server 127.0.0.1 #指定傳送email的smtp伺服器
smtp_connect_timeout 30 #設定連線smtp server的超時時間
router_id HAmaster-130 #執行keepalived的機器的一個標識,通常可設為hostname。故障發生時,發郵件時顯示在郵件主題中的資訊。
}
vrrp_script chk_http_port { #檢測nginx服務是否在執行。有很多方式,比如程序,用指令碼檢測等等
script "/opt/chk_nginx.sh" #這裡通過指令碼監測
interval 2 #指令碼執行間隔,每2s檢測一次
weight -5 #指令碼結果導致的優先順序變更,檢測失敗(指令碼返回非0)則優先順序 -5
fall 2 #檢測連續2次失敗才算確定是真失敗。會用weight減少優先順序(1-255之間)
rise 1 #檢測1次成功就算成功。但不修改優先順序
}
vrrp_instance VI_1 { #keepalived在同一virtual_router_id中priority(0-255)最大的會成為master,也就是接管VIP,當priority最大的主機發生故障後次priority將會接管
state MASTER #指定keepalived的角色,MASTER表示此主機是主伺服器,BACKUP表示此主機是備用伺服器。注意這裡的state指定instance(Initial)的初始狀態,就是說在配置好後,這臺伺服器的初始狀態就是這裡指定的,但這裡指定的不算,還是得要通過競選通過優先順序來確定。如果這裡設定為MASTER,但如若他的優先順序不及另外一臺,那麼這臺在傳送通告時,會發送自己的優先順序,另外一臺發現優先順序不如自己的高,那麼他會就回搶佔為MASTER
interface eth0 #指定HA監測網路的介面。例項繫結的網絡卡,因為在配置虛擬IP的時候必須是在已有的網絡卡上新增的
mcast_src_ip 192.168.139.130 # 傳送多播資料包時的源IP地址,這裡注意了,這裡實際上就是在哪個地址上傳送VRRP通告,這個非常重要,一定要選擇穩定的網絡卡埠來發送,這裡相當於heartbeat的心跳埠,如果沒有設定那麼就用預設的繫結的網絡卡的IP,也就是interface指定的IP地址
virtual_router_id 51 #虛擬路由標識,這個標識是一個數字,同一個vrrp例項使用唯一的標識。即同一vrrp_instance下,MASTER和BACKUP必須是一致的
priority 101 #定義優先順序,數字越大,優先順序越高,在同一個vrrp_instance下,MASTER的優先順序必須大於BACKUP的優先順序
advert_int 1 #設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
authentication { #設定驗證型別和密碼。主從必須一樣
auth_type PASS #設定vrrp驗證型別,主要有PASS和AH兩種
auth_pass 1111 #設定vrrp驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通訊
}
virtual_ipaddress { #VRRP HA 虛擬地址 如果有多個VIP,繼續換行填寫
192.168.139.200
}
track_script { #執行監控的服務。注意這個設定不能緊挨著寫在vrrp_script配置塊的後面(實驗中碰過的坑),否則nginx監控失效!!
chk_http_port #引用VRRP指令碼,即在 vrrp_script 部分指定的名字。定期執行它們來改變優先順序,並最終引發主備切換。
}
}
4.2.backup-129負載機上的keepalived配置
[root@centos6-2 keepalived]# pwd
/etc/keepalived
[root@centos6-2 keepalived]# cp keepalived.conf keepalived.conf.bak
[root@centos6-2 keepalived]# vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
xiaochong@then.com
10997173638883@qq.com
}
notification_email_from xiaochong@then.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id HAbackup-129
}
vrrp_script chk_http_port {
script "/opt/chk_nginx.sh"
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
mcast_src_ip 192.168.139.129
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.139.200
}
track_script {
chk_http_port
}
}
讓keepalived監控Nginx的狀態:
1)經過前面的配置,如果master主伺服器的keepalived停止服務,backup從伺服器會自動接管VIP對外服務;
一旦主伺服器的keepalived恢復,會重新接管VIP。 但這並不是我們需要的,我們需要的是當Nginx停止服務的時候能夠自動切換。
2)keepalived支援配置監控指令碼,我們可以通過指令碼監控Nginx的狀態,如果狀態不正常則進行一系列的操作,最終仍不能恢復Nginx則殺掉keepalived,使得從伺服器能夠接管服務。
如何監控NginX的狀態:
最簡單的做法是監控Nginx程序,更靠譜的做法是檢查NginX埠,最靠譜的做法是檢查多個url能否獲取到頁面。
注意
,這裡要提示一下keepalived.conf中vrrp_script配置區的script一般有2種寫法:1)通過指令碼執行的返回結果,改變優先順序,keepalived繼續傳送通告訊息,backup比較優先順序再決定。這是直接監控Nginx程序的方式。
2)腳本里面檢測到異常,直接關閉keepalived程序,backup機器接收不到advertisement會搶佔IP。這是檢查NginX埠的方式。
上文script配置部分,”killall -0 nginx”屬於第1種情況,”/opt/chk_nginx.sh” 屬於第2種情況。
個人更傾向於通過shell指令碼判斷,但有異常時exit 1,正常退出exit 0,然後keepalived根據動態調整的 vrrp_instance 優先順序選舉決定是否搶佔VIP:
如果指令碼執行結果為0,並且weight配置的值大於0,則優先順序相應的增加
如果指令碼執行結果非0,並且weight配置的值小於0,則優先順序相應的減少
其他情況,原本配置的優先順序不變,即配置檔案中priority對應的值。
提示:
優先順序不會不斷的提高或者降低,可以編寫多個檢測指令碼併為每個檢測指令碼設定不同的weight(在配置中列出就行)
不管提高優先順序還是降低優先順序,最終優先順序的範圍在[1,254],不會出現優先順序小於等於0或者優先順序大於等於255的情況
在MASTER節點的 vrrp_instance 中 配置 nopreempt ,當它異常恢復後,即使它 prio 更高也不會搶佔,這樣可以避免正常情況下做無謂的切換,以上可以做到利用指令碼檢測業務程序的狀態,並動態調整優先順序從而實現主備切換。
另外:在預設的keepalive.conf裡面還有 virtual_server,real_server,這樣的配置,我們這用不到,它是為lvs準備的。。。
如何嘗試恢復服務
由於keepalived只檢測本機和他機keepalived是否正常並實現VIP的漂移,而如果本機nginx出現故障不會則不會漂移VIP。
所以編寫指令碼來判斷本機nginx是否正常,如果發現NginX不正常,重啟之。等待3秒再次校驗,仍然失敗則不再嘗試,關閉keepalived,其他主機此時會接管VIP;
根據上述策略很容易寫出監控指令碼。此指令碼必須在keepalived服務執行的前提下才有效!如果在keepalived服務先關閉的情況下,那麼nginx服務關閉後就不能實現自啟動了。
該指令碼檢測ngnix的執行狀態,並在nginx程序不存在時嘗試重新啟動ngnix,如果啟動失敗則停止keepalived,準備讓其它機器接管。
監控指令碼如下(master和backup都要有這個監控指令碼):
[[email protected]1 keepalived]# more /opt/chk_nginx.sh
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
echo "$counter"
if [ "${counter}" = "0" ]; then
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
sleep 2
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/etc/init.d/keepalived stop
fi
fi
[[email protected]1 keepalived]# chmod 755 /opt/chk_nginx.sh
[[email protected]1 keepalived]# sh /opt/chk_nginx.sh
9
此架構需考慮的問題:
1)master沒掛,則master佔有vip且nginx執行在master上
2)master掛了,則slave搶佔vip且在backup上執行nginx服務
3)如果master上的nginx服務掛了,則nginx會自動重啟,重啟失敗後會自動關閉keepalived,這樣vip資源也會轉移到backup上。
4)檢測後端伺服器的健康狀態
5)master和backup兩邊都開啟nginx服務,無論master還是backup,當其中的一個keepalived服務停止後,vip都會漂移到keepalived服務還在的節點上;
如果要想使nginx服務掛了,vip也漂移到另一個節點,則必須用指令碼或者在配置檔案裡面用shell命令來控制。(nginx服務宕停後會自動啟動,啟動失敗後會強制關閉keepalived,從而致使vip資源漂移到另一臺機器上)
最後驗證(將配置的後端應用域名都解析到VIP地址上):
關閉主伺服器上的keepalived或nginx,vip都會自動飄到從伺服器上。
驗證keepalived服務故障情況:
1)先後在master、slave伺服器上啟動nginx和keepalived,保證這兩個服務都正常開啟:
[root@centos6-1 keepalived]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
[root@centos6-1 keepalived]# /etc/init.d/keepalived start
[root@centos6-2 keepalived]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
[root@centos6-2 keepalived]# /etc/init.d/keepalived start
2)在主伺服器上檢視是否已經綁定了虛擬IP
先檢視master,再看backup:
3)停止主伺服器上的keepalived:
[root@centos6-1 keepalived]# /etc/init.d/keepalived stop
Stopping keepalived: [ OK ]
[root@centos6-1 keepalived]# /etc/init.d/keepalived status
keepalived is stopped
4)然後在從伺服器上檢視,發現已經接管了VIP:
[[email protected]2 bin]# ip addr
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:7c:3e:39 brd ff:ff:ff:ff:ff:ff
inet 192.168.139.129/24 brd 192.168.139.255 scope global eth0
inet 192.168.139.200/32 scope global eth0
inet6 fe80::20c:29ff:fe7c:3e39/64 scope link
valid_lft forever preferred_lft forever
發現master的keepalived服務掛了後,vip資源自動漂移到slave上,並且網站正常訪問,絲毫沒有受到影響!
5)重新啟動主伺服器上的keepalived,發現主伺服器又重新接管了VIP,此時slave機器上的VIP已經不在了。
[[email protected]1 keepalived]# /etc/init.d/keepalived start
Starting keepalived: [ OK ]
[[email protected]1 keepalived]# ip addr
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:ab:a3:5e brd ff:ff:ff:ff:ff:ff
inet 192.168.139.130/24 brd 192.168.139.255 scope global eth0
inet 192.168.139.200/32 scope global eth0
inet6 fe80::20c:29ff:feab:a35e/64 scope link
valid_lft forever preferred_lft forever
接著驗證下nginx服務故障,看看keepalived監控nginx狀態的指令碼是否正常?
如下:手動關閉master機器上的nginx服務,最多2秒鐘後就會自動起來(因為keepalive監控nginx狀態的指令碼執行間隔時間為2秒)。域名訪問幾乎不受影響!
最後可以檢視兩臺伺服器上的/var/log/messages
,觀察VRRP日誌資訊的vip漂移情況~~~~
二:Nginx+keepalived 雙機 雙主模式
1.只是需要更改下keepalived配置檔案即可,增加新的VIP 192.168.139.201,192.168.139.200是130機器上主虛擬VIP,192.168.139.201是129 機器上主虛擬VIP.
配置檔案例項如下:
130 的keepalived配置檔案,在最後一行新加內容
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 52
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.139.201
}
}
129 的keepalived配置檔案,在最後一行新加內容
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.139.201
}
}
分別重新啟動 2臺 nginx和keepalived服務,分別在130 和129 檢視新新增的虛擬IP
[[email protected]1 keepalived]# ip addr
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:ab:a3:5e brd ff:ff:ff:ff:ff:ff
inet 192.168.139.130/24 brd 192.168.139.255 scope global eth0
inet 192.168.139.200/32 scope global eth0
inet6 fe80::20c:29ff:feab:a35e/64 scope link
valid_lft forever preferred_lft forever
[[email protected]2 keepalived]# ip addr
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:7c:3e:39 brd ff:ff:ff:ff:ff:ff
inet 192.168.139.129/24 brd 192.168.139.255 scope global eth0
inet 192.168.139.201/32 scope global eth0
inet6 fe80::20c:29ff:fe7c:3e39/64 scope link
valid_lft forever preferred_lft forever
最後,模擬故障,檢驗結果。
附 129的keepalived的配置檔案:
[root@centos6-2 bin]# more /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
xiaochong@then.com
109736383323@qq.com
}
notification_email_from xiaochong@then.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id HAbackup-129
}
vrrp_script chk_http_port {
script "/opt/chk_nginx.sh"
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
mcast_src_ip 192.168.139.129
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.139.200
}
track_script {
chk_http_port
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.139.201
}
}
相關推薦
Nginx+keepalived 高可用雙機熱備(主從模式/雙主模式)
基礎介紹 負載均衡技術對於一個網站尤其是大型網站的web伺服器叢集來說是至關重要的!做好負載均衡架構,可以實現故障轉移和高可用環境,避免單點故障,保證網站健康持續執行。 由於業務擴充套件,網站的訪問量不斷加大,負載越來越高。現需要在web前端放置ngin
Nginx + keepalived 雙機熱備(主從模式)
綁定 html 負載均衡 基於 模式 主備 class 接管 主主 雙機高可用一般是通過虛擬IP(飄移IP)方法來實現的,基於Linux/Unix的IP別名技術。 雙機高可用方法目前分為兩種: 1)雙機主從模式:即前端使用兩臺服務器,一臺主服務器和一臺熱備服務器,正常情況
Nginx+keepalived雙機熱備(主從模式)
負載均衡技術對於一個網站尤其是大型網站的web伺服器叢集來說是至關重要的!做好負載均衡架構,可以實現故障轉移和高可用環境,避免單點故障,保證網站健康持續執行。 關於負載均衡介紹,可以參考:linux負載均衡總結性說明(四層負載/七層負載) 由於業務擴充套件,網站的訪
Nginx+keepalived雙機熱備(主主模式)
實現 nginx keepalived Nginx+keepalived實現高可用負載均衡的主主模式由於網站的訪問需求不斷加大,負載越來越高。現需要在web前端放置nginx負載均衡,同時結合keepalived對前端nginx實現HA高可用。1、nginx進程基於Master+Slave(wor
nginx+tomcat實現負載均衡以及雙機熱備(tomcat宕機導致客戶端無法訪問)
首先,在這裡分享一個java技術交流群,純粹技術交流,拒絕廣告,歡迎各位進群交流。QQ群:817997079 大家都知道nginx可以代理多臺伺服器(以tomcat為例),那麼當被nginx代理的tomcat伺服器宕機時,我們怎麼保證客戶端能繼續訪問系統?接下來就說一下ng
windows server2016雙機熱備(安裝服務)
1首先,點選管理2 下一步3預設下一步4下一步5選擇Active Directory 域服務和DNS伺服器6 下一步7下一步8下一步9下一步10終於到了安裝了11在兩個伺服器上都要安裝以上的AD服務和DNS。(MasterZhu,Slave)12 在node1上配置,提升為域控制器13 新增新林,根域名為:l
使用win8 r2的故障轉移叢集實現雙機熱備(自己實現)
(網上的教程太不全,浪費了我大量時間,自己總結!圖就不用了) 準備工作: 軟體準備:本地裝虛擬機器,虛擬機器裝三臺win8 server r2系統,都使用橋接上網(公司通過代理上網)配置兩塊網絡卡,記憶體分配2G,硬碟分配40G。 理論準備:(1)故障轉移群集要求 使用者為
postgresql雙機熱備(流複製)及主備切換
一、環境 系統:redhat6.5 64位 ip:192.168.11.68(主) 192.168.11.70(備) 資料庫版本:postgresql9.4.4 二、雙機熱備的過程 兩臺系統之中安裝
Linux系統中postgresql雙機熱備(流複製)
環境:宿主機系統:windows7 虛擬機器:Oracle VMVirtualBox Linux: ubuntukylin-14.04.1-amd64.iso postgresql:9.3.12 虛擬主機2臺 MASTER: 192.16.41.125 SLAVE:
解決Nginx + Keepalived主從雙機熱備+自動切換,實現負載均衡及高可用
解決Nginx + Keepalived主從雙機熱備+自動切換,實現負載均衡及高可用 IP 伺服器 服務 192.168.1.10 lb-node1 Nginx、kee
Keepalived + Nginx 實現高可用(雙機熱備) Web 負載均衡 安裝測試筆記
system ati 根據 properly 節點配置 sys .gz ive error: keepalived是什麽 keepalived是集群管理中保證集群高可用的一個服務軟件,其功能類似於heartbeat,用來防止單點故障。 keepalived工作原理 k
Haproxy+Keepalived(雙機熱備)搭建高可用web架構
ise mark 高可用web keepalive email protocol rip 火墻 詳情 1、目的搭建web高可用架構,用haproxy作為前段負載均衡分攤後端web服務器壓力,Keepalived保證haproxy的存活(雙機熱備:一臺haproxy掛了,自動
mysql雙機熱備以及使用keepalived實現mysql雙主高可用
根據蒐集的資料安裝測試並在安裝測試過程中整理的文件,部分參考文件在相應位置有標記。如有不足希望不吝賜教。 mysql雙機熱備的方式有兩種: 主-從伺服器雙機熱備 主-主伺服器雙機熱備 下文以主-主伺服器雙機熱備為例,主-從配置類似。 兩臺centos7,ip分別為:
NEC高可用集群軟件NEC EXPRESSCLUSTER是一款專業的高可用集群軟件產品(雙機熱備軟件)
雙機軟件 集群軟件NEC高可用集群軟件NEC EXPRESSCLUSTER是一款專業的高可用集群軟件產品(雙機熱備軟件)商務qq1912078946,可為您提供Windows和Linux平臺上完整的高可用性解決方案。當集群中的某個節點由於軟件或硬件原因發生故障時,集群系統可以把IP、客戶業務等資源切換到其他
keepalived+nginx雙機熱備+負載均衡
ethernet auth 超時任務 collision boot .rpm ocl bnl host keepalived+nginx雙機熱備+負載均衡最近因業務擴展,需要將當前的apache 轉為nginx(web), 再在web前端放置nginx(負載均衡)。同時結合
Nginx+keepalived做雙機熱備,實現負載均衡(主主模式)
nginx keepalive Keepalived: 簡介:Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepali
Rabbitmq+Nginx+keepalived高可用熱備
追蹤 eight tool pan global all 物理 並且 emp 摘自: http://www.cnblogs.com/wangyichen/p/4917241.html 公司兩臺文件服務器要做高可用,避免單點故障,故采用keepalived實現,其中一臺宕機,
Nginx+keepalived雙機熱備
nginx ha keepalive 一、nginx簡介Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。其特點是占有內存少,並發能力強,事實上nginx的並發能力確實在同類型的網頁服務器中表現較好,中國大陸使用
群集架構篇——nginx反向代理+keepalived雙機熱備+tomcat伺服器池+後端資料庫
群集架構篇——nginx反向代理+keepalived雙機熱備+tomcat伺服器池+後端資料庫 實驗所需 兩臺nginx都佈置了keepalived 漂移地址 192.168.30.100 Nginx
群集架構篇 ——nginx反向代理+keepalived雙機熱備+tomcat伺服器池+後端資料庫
首先準備好兩臺nginx,兩臺tomcat,一臺mysql資料庫,如下NginxIP地址:192.168.20.39(lvs01)192.168.20.40(lvs02)漂移地址:192.168.20.66TomcatIP地址:192.168.20.41(TM01)192.168.20.42(TM02)Mys