Keepalived + Nginx 實現(xiàn)高可用 Web 負載均衡

一、場景需求

解決Nginx的高可用集群問題

1、 阿里云: SLB

2簸喂、 硬件負載均衡器(如: F5、 Radware)

3燎潮、 軟件方式實現(xiàn)高可用或負載均衡

Keepalive喻鳄、 LVS……

二、Keepalived 簡要介紹

Keepalived 是一種高性能的服務(wù)器高可用或熱備解決方案确封, Keepalived 可以用來防止服務(wù)器單點故障的發(fā)生除呵,通過配合 Nginx 可以實現(xiàn) web 前端服務(wù)的高可用。

Keepalived 以 VRRP 協(xié)議為實現(xiàn)基礎(chǔ)爪喘,用 VRRP 協(xié)議來實現(xiàn)高可用性(HA)颜曾。 VRRP(Virtual RouterRedundancy Protocol)協(xié)議是用于實現(xiàn)路由器冗余的協(xié)議, VRRP 協(xié)議將兩臺或多臺路由器設(shè)備虛擬成一個設(shè)備腥放,對外提供虛擬路由器 IP(一個或多個)泛啸,而在路由器組內(nèi)部,如果實際擁有這個對外 IP 的路由器如果工作正常的話就是 MASTER秃症,或者是通過算法選舉產(chǎn)生候址, MASTER 實現(xiàn)針對虛擬路由器 IP 的各種網(wǎng)絡(luò)功能,如 ARP 請求种柑, ICMP岗仑,以及數(shù)據(jù)的轉(zhuǎn)發(fā)等;其他設(shè)備不擁有該虛擬 IP聚请,狀態(tài)是 BACKUP荠雕,除了接收 MASTER 的VRRP 狀態(tài)通告信息外稳其,不執(zhí)行對外的網(wǎng)絡(luò)功能。當主機失效時炸卑, BACKUP 將接管原先 MASTER 的網(wǎng)絡(luò)功能既鞠。

VRRP 協(xié)議使用多播數(shù)據(jù)來傳輸 VRRP 數(shù)據(jù), VRRP 數(shù)據(jù)使用特殊的虛擬源 MAC 地址發(fā)送數(shù)據(jù)而不是自身網(wǎng)卡的 MAC 地址盖文, VRRP 運行時只有 MASTER 路由器定時發(fā)送 VRRP 通告信息嘱蛋,表示 MASTER 工作正常以及虛擬路由器 IP(組), BACKUP 只接收 VRRP 數(shù)據(jù)五续,不發(fā)送數(shù)據(jù)洒敏,如果一定時間內(nèi)沒有接收到 MASTER 的通告信息,各 BACKUP 將宣告自己成為 MASTER疙驾,發(fā)送通告信息凶伙,重新進行 MASTER 選舉狀態(tài)。


三它碎、規(guī)劃方案

四函荣、安裝 Nginx

1、 安裝編譯 Nginx 所需的依賴包

#yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel

openssl openssl-devel

2链韭、 上傳 Nginx(nginx-1.6.2.tar.gz)到/usr/local/src目錄

3偏竟、 編譯安裝 Nginx

#cd /usr/local/src/

#tar -zxvf nginx-1.6.2.tar.gz

#cd nginx-1.6.2

#./configure --prefix=/usr/local/nginx

#make && make install

4、 配置 Nginx

#vi /usr/local/nginx/conf/nginx.conf

userroot;

worker_processes 1;

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid logs/nginx.pid;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '

# '$status $body_bytes_sent "$http_referer" '

# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;

#tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

#gzip on;

server {

listen88;

server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

root html;

index index.html index.htm;

}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

}

修改 Nginx 歡迎首頁內(nèi)容(用于后面測試敞峭, 用于區(qū)分兩個節(jié)點的 Nginx):

# vi /usr/local/nginx/html/index.html

192.168.1.51 中的標題加 1

Welcome to nginx!1

192.168.1.52 中的標題加 2

Welcome to nginx!2

5踊谋、系統(tǒng)防火墻打開對應(yīng)的端口 88

#vi /etc/sysconfig/iptables

## Nginx

-A INPUT -m state --state NEW -m tcp -p tcp --dport88-j ACCEPT

#service iptables restart

6、 測試 Nginx 是否安裝成功

#/usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

7旋讹、啟動 Nginx

#/usr/local/nginx/sbin/nginx

重啟 Nginx

#/usr/local/nginx/sbin/nginx -s reload

8殖蚕、 設(shè)置 Nginx 開機啟動

#vi /etc/rc.local

加入:

/usr/local/nginx/sbin/nginx

9、 分別訪問兩個 Nginx

五沉迹、安裝 Keepalived (http://www.keepalived.org/download.html)

1睦疫、 上傳或下載 keepalived(keepalived-1.2.18.tar.gz) 到/usr/local/src目錄

2、 解壓安裝

#cd /usr/local/src

#tar -zxvf keepalived-1.2.18.tar.gz

#cd keepalived-1.2.18

#./configure --prefix=/usr/local/keepalived

#make && make install

3鞭呕、 將 keepalived 安裝成 Linux 系統(tǒng)服務(wù):

因為沒有使用 keepalived 的默認路徑安裝(默認是/usr/local) ,安裝完成之后蛤育,需要做一些工作

復制默認配置文件到默認路徑

#mkdir /etc/keepalived

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

復制 keepalived 服務(wù)腳本到默認的地址

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

#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

#ln -s /usr/local/sbin/keepalived /usr/sbin/

#ln -s /usr/local/keepalived/sbin/keepalived /sbin/

設(shè)置 keepalived 服務(wù)開機啟動

#chkconfig keepalived on

4、 修改 Keepalived 配置文件

(1) MASTER 節(jié)點配置文件(192.168.1.51)

#vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

## keepalived 自帶的郵件提醒需要開啟 sendmail 服務(wù)葫松。 建議用獨立的監(jiān)控或第三方 SMTP

router_idedu-proxy-01## 標識本節(jié)點的字條串瓦糕,通常為 hostname

}

## keepalived 會定時執(zhí)行腳本并對腳本執(zhí)行的結(jié)果進行分析,動態(tài)調(diào)整 vrrp_instance 的優(yōu)先級腋么。如果

腳本執(zhí)行結(jié)果為 0咕娄,并且 weight 配置的值大于 0,則優(yōu)先級相應(yīng)的增加珊擂。如果腳本執(zhí)行結(jié)果非 0圣勒,并且 weight

配置的值小于 0费变,則優(yōu)先級相應(yīng)的減少。其他情況圣贸,維持原本配置的優(yōu)先級挚歧,即配置文件中 priority 對應(yīng)

的值。

vrrp_script chk_nginx {

script "/etc/keepalived/nginx_check.sh" ## 檢測 nginx 狀態(tài)的腳本路徑

interval 2 ## 檢測時間間隔

weight -20 ## 如果條件成立旁趟,權(quán)重-20

}

## 定義虛擬路由昼激, VI_1 為虛擬路由的標示符,自己定義名稱

vrrp_instance VI_1 {

stateMASTER## 主節(jié)點為 MASTER锡搜, 對應(yīng)的備份節(jié)點為 BACKUP

interface eth1 ## 綁定虛擬 IP 的網(wǎng)絡(luò)接口,與本機 IP 地址所在的網(wǎng)絡(luò)接口相同瞧掺, 我的是 eth1

virtual_router_id 51 ## 虛擬路由的 ID 號耕餐, 兩個節(jié)點設(shè)置必須一樣, 可選 IP 最后一段使用, 相同的 VRID 為一個組辟狈,他將決定多播的 MAC 地址

mcast_src_ip192.168.1.51## 本機 IP 地址

priority100## 節(jié)點優(yōu)先級肠缔, 值范圍 0-254,MASTER 要比 BACKUP 高

nopreempt## 優(yōu)先級高的設(shè)置 nopreempt 解決異澈咦恢復后再次搶占的問題

advert_int 1 ## 組播信息發(fā)送間隔明未,兩個節(jié)點設(shè)置必須一樣, 默認 1s

## 設(shè)置驗證信息壹蔓,兩個節(jié)點必須一致

authentication {

auth_type PASS

auth_pass 1111 ## 真實生產(chǎn)趟妥,按需求對應(yīng)該過來

}

## 將 track_script 塊加入 instance 配置塊

track_script {

chk_nginx ## 執(zhí)行 Nginx 監(jiān)控的服務(wù)

}

## 虛擬 IP 池, 兩個節(jié)點設(shè)置必須一樣

virtual_ipaddress {

192.168.1.50 ## 虛擬 ip,可以定義多個

}

}

(2)BACKUP 節(jié)點配置文件(192.168.1.52)

#vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

router_idedu-proxy-02

}

vrrp_script chk_nginx {

script "/etc/keepalived/nginx_check.sh"

interval 2

weight -20

}

vrrp_instance VI_1 {

stateBACKUP

interface eth1

virtual_router_id 51

mcast_src_ip192.168.1.52

priority90

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

chk_nginx

}

virtual_ipaddress {

192.168.1.50

}

}

5佣蓉、編寫 Nginx 狀態(tài)檢測腳本/etc/keepalived/nginx_check.sh(已在 keepalived.conf 中配置)

腳本要求:如果 nginx 停止運行覆劈,嘗試啟動戴差,如果無法啟動則殺死本機的 keepalived 進程, keepalied將虛擬 ip 綁定到 BACKUP 機器上。 內(nèi)容如下:

# 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

---------------------------------------------------------------------------------------------------------------------

保存后,給腳本賦執(zhí)行權(quán)限:

#chmod +x /etc/keepalived/nginx_check.sh

6淮阐、 啟動 Keepalived

#service keepalived start

Starting keepalived: [OK]

7辣垒、 Keepalived+Nginx 的高可用測試

(1)關(guān)閉 192.168.1.51 中的 Nginx, Keepalived 會將它重新啟動

#/usr/local/nginx/sbin/nginx -s stop

(2)關(guān)閉 192.168.1.51 中的 Keepalived璧函, VIP 會切換到 192.168.1.52 中

#service keepalived stop

Keepalived 停止后傀蚌,該節(jié)點的網(wǎng)絡(luò)接口中的 VIP 將消失

查看此時 VIP 對應(yīng)的 MAC, Windows 下使用 CMD 命令查看:

說明此時 VIP 已經(jīng)漂移到物理主機 192.168.1.52 上了

再通過 VIP 來訪問 Nginx 集群柳譬, 訪問到的也是 192.168.1.52

(3)重新啟動 192.168.1.51 中的 Keepalived喳张, VIP 又會切回到 192.168.1.51 中來

#service keepalived start

查看虛擬 IP 狀態(tài)

#ip add

Keepalived 啟動后, 網(wǎng)絡(luò)接口上又會創(chuàng)建出 VIP 192.168.1.50

Keepalived 服務(wù)管理命令:

停止:service keepalived stop

啟動:service keepalived start

重啟:service keepalived restart

查看狀態(tài):service keepalived status

其他參考資料:

keepalived 之 vrrp_script 總結(jié):http://my.oschina.net/hncscwc/blog/158746

keepalived 雙機熱備實現(xiàn)故障時發(fā)送郵件通知:http://www.2cto.com/os/201407/317795.html

基于 keepalived 實現(xiàn) VIP 轉(zhuǎn)移美澳, lvs销部, nginx 的高可用:http://www.tuicool.com/articles/eu26Vz

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摸航,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子舅桩,更是在濱河造成了極大的恐慌酱虎,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件擂涛,死亡現(xiàn)場離奇詭異读串,居然都是意外死亡,警方通過查閱死者的電腦和手機撒妈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門恢暖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狰右,你說我怎么就攤上這事杰捂。” “怎么了棋蚌?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵嫁佳,是天一觀的道長。 經(jīng)常有香客問我谷暮,道長蒿往,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任湿弦,我火速辦了婚禮瓤漏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘省撑。我一直安慰自己赌蔑,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布竟秫。 她就那樣靜靜地躺著娃惯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肥败。 梳的紋絲不亂的頭發(fā)上趾浅,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音馒稍,去河邊找鬼。 笑死纽谒,一個胖子當著我的面吹牛证膨,可吹牛的內(nèi)容都是我干的央勒。 我是一名探鬼主播不见,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼稳吮,長吁一口氣:“原來是場噩夢啊……” “哼灶似!你這毒婦竟也來了瑞你?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤撞蚕,失蹤者是張志新(化名)和其女友劉穎过牙,沒想到半個月后纺铭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡扫倡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年撵溃,在試婚紗的時候發(fā)現(xiàn)自己被綠了缘挑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡语淘,死狀恐怖惶翻,靈堂內(nèi)的尸體忽然破棺而出鹅心,到底是詐尸還是另有隱情,我是刑警寧澤旭愧,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站垃沦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏靶剑。R本人自食惡果不足惜池充,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坑匠。 院中可真熱鬧卧惜,春花似錦、人聲如沸设凹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奋姿。三九已至称诗,卻和暖如春糯钙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背再榄。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工享潜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疾就。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像鸟废,于是被迫代替她去往敵國和親姑荷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容