(原文連接:http://www.studyshare.cn/blog-front//blog/details/1159/0 )nginx
1、準備工做算法
一、準備兩個項目,發佈到不一樣的服務器上,此處使用2個虛擬機發布了兩個項目分別爲:http://192.168.28.128:8081,後端
http://192.168.28.129:8081bash
二、在兩個虛擬機上都安裝好nginx服務器
2、配置upstreamsession
一、在任意一臺虛擬機上所安裝的nginx的nginx.conf配置文件中配置upstream以下:負載均衡
以上是負載均衡的基本配置,當前模式採用的是輪詢的方式負載。除了輪詢,還有weight(權重)、ip_hash(根據訪測試
問ip,解決session問題)、第三方。url
二、根據weight負載router
upstream blog {
server 192.168.28.128:8081 weight=2;
server 192.168.28.129:8081 weight=1;
}
說明:以上配置表示三次訪問的時候weight=2的服務被訪問兩次,weight=1的服務只被訪問一次。
三、根據ip_hash負載
upstream blog {
ip_hash;
server 192.168.28.128:8081;
server 192.168.28.129:8081;
}
說明:用戶第一次訪問落在128上,那麼之後該用戶的訪問都會在128的服務器上,如此便可解決session問題。
四、fair第三方
這種方式是按後端服務的響應時間來分配請求,相應時間短的優先分配。
upstream blog {
server 192.168.28.128:8081;
server 192.168.28.129:8081;
fair;
}
五、url_hash第三方
這種方式是按url的hash結果來分配請求,使沒一個url請求定向到同一個後端服務器。也可解決session問題,但需
要注意,使用這種方式後,server語句中不能寫入weight等其餘參數。
upstream blog {
server 192.168.28.128:8081;
server 192.168.28.129:8081;
hash $request_uri;
hash_method crc32; #使用crc32 hash算法
}
3、配置keepalived
使用以上配置能夠達到負載均衡的目的,若是使其中一臺機器的服務掛掉,例如使用kill -9將192.168.28.128
的服務(注意:不是nginx掛掉,而是服務掛掉),此時nginx的負載均衡會檢測到128的服務中止,只未來自
客戶端的請求發到129所在的服務器上去,所以也保證了高可用。
那麼若是128機器上的nginx也掛了呢?整個服務確定就不可用了,如何保證nginx也高可用呢?此處使用keepalived
來保證nginx的高可用。
首先在192.168.28.128虛擬機上安裝配置keepalived,以下:
一、安裝keepalived:請參考:http://www.studyshare.cn/blog-front//software/details/1158/1 ,此處再也不贅述
二、配置keepalived
命令:cd /etc/keepalived #進入keepalived配置文件目錄
命令:vi keepalived.conf #編輯keepalived.conf配置文件
global_defs {
router_id LVS_1
}
vrrp_instance VI_1 {
state MASTER #主機
interface eth0 #網卡
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.28.200 #配置一個虛擬vip
}
}
啓動keepalived
命令:/usr/local/keepalived/sbin/keepalived
命令:ps -ef|grep keepalived #查看啓動進程
命令:ip addr #查看eth0網卡
而後在192.168.28.129虛擬機上安裝配置keepalived,以下:
一、安裝略
二、配置keepalived配置文件
global_defs {
router_id LVS_2
}
vrrp_instance VI_1 {
state BACKUP #從機
interface eth0 #網卡
virtual_router_id 51
priority 50 #優先級
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.28.200 #配置一個虛擬vip,此ip與主機配置在虛擬ip須要一致
}
}
啓動從機器的keepalived,啓動方式與主機啓動方式相同。
三、測試
(1)、主機的keepalive被kill前與kill後,從機器上eth0綁定vip狀況以下:
總結:keepalived保證了vip在主從機器之間漫遊。誰被kill掉後,vip就漫遊到未被kill掉
四、配置keepalived監控nginx,實現nginx的高可用
(1)、新建一個文件並寫入監控nginx執行腳本
命令:cd /usr/local/src
命令:vi check_nginx.sh
寫入如下腳本命令:
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #重啓nginx,根據本身本機nginx安裝路徑編寫
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重啓失敗,則停掉keepalived服務,進行VIP轉移
killall keepalived #殺掉,vip就漫遊到另外一臺機器
fi
fi
保存退出。
(2)、修改keepalived.conf配置文件,加入如下兩段
配置完成,重啓keepalived。
總結:以上就完成了keepalived監控nginx的配置,當中止nginx的時候,監控腳本會自動檢測nginx
是否存活,否就重啓。達到nginx不死鳥的目的。
原創文章,轉載請註明出處。更多技術文章:http://www.studyshare.cn/blog-front/blog/index