使用Nginx+Keepalived搭建高可用服務,乾貨!
Nginx+Keepalived實現高可用服務
Nginx可以實現高並發反向代理,實現負載均衡,但是有個問題就是Nginx是單點的。如果Nginx故障,則整個服務將會處於不可用狀態。所以我們就需要想辦法讓nginx高可用,即使一個Nginx宕機,還可以有其他的Nginx來支持服務。現在我們通過Keepalived的就可以實現多台Nginx作為主備機,當主機宕機時,可以讓備機切換成主機繼續提供服務,對整個用戶服務幾乎沒有影響。
1. Keepalived介紹
Keepalived是一個基於VRRP協議來實現的服務高可用方案,可以利用其來避免IP單點故障,類似的工具還有heartbeat、corosync、pacemaker。但是它一般不會單獨出現,而是與其它負載均衡技術(如lvs、haproxy、nginx)一起工作來達到集群的高可用。
2. keepalived 安裝(同Nginx安裝類似)
a. 下載安裝包:
b. 解壓 keepalived-1.2.18.tar.gz(我下載到Windows下,使用ftp上傳到linux虛擬機上,可以直接在linux上使用wget url 進行下載),解壓到/usr/local目錄下
tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
c. 安裝依賴包
yum -y install openssl,openssl-devel
d. 檢查環境,設置安裝目錄
cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived
如上說明環境檢查通過。
e. 安裝: make && make install
3. 將安裝的keepalived配置成服務,並且開機啟動:
a. 因為沒有使用keepalived的默認安裝路徑(默認路徑:/usr/local),安裝完成之後,需要做一些修改工作,首先創建文件夾,將keepalived配置文件進行複製:
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
b. 然後複製keepalived腳本文件:
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/
c. 可以設置開機啟動:
chkconfig keepalived on;
到此我們安裝完畢,開機則keepalived就已經啟動!
4. 配置主備機keepalived配置文件:keepalived.conf
a. master配置文件如下:
! Configuration File for keepalived global_defs { router_id aries114 ##真實主機名或者ip} vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" ##要執行的檢查腳本 interval 2 ##keepalived多久執行一次 weight -20 ##權重-20} vrrp_instance VI_1 { state MASTER ##主備機配置 interface eth0 ##默認使用網卡 virtual_router_id 88 ##虛擬id號,主備機配置一致 mcast_src_ip 192.168.137.114 ##真實主機ip Nopreempt ##非搶佔式 priority 100 ##權重優先順序 advert_int 1 ##組播信息發送間隔,倆個節點必須配置一致,默認1s authentication { auth_type PASS auth_pass 1111 ##驗證密碼,主備機一致 } track_script { chk_nginx } virtual_ipaddress { 192.168.137.110 ##虛擬ip(vip)可以配置多個 } }
b. backup配置文件:
! Configuration File for keepalived global_defs { router_id aries111} vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 weight -20} vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 88 mcast_src_ip 192.168.137.111 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_nginx } virtual_ipaddress { 192.168.137.110 } }
不同點已用紅色標出:
router_id 主機名或者ip
mcast_src_ip 真實主機ip
state 表示主備機master表示主BACKUP表示備,兩個也可以都設置成backup,則兩個搶佔主機服務,一個宕機另一個就做為主機。
virtual_ipaddress 虛擬出來的主機ip , 可配置多個;
script "/etc/keepalived/nginx_check.sh" 這個是keepalived要執行的檢查Nginx服務是否正常的腳本,需要我們去編寫。
c. 編寫檢查腳本,命名nginx_check.sh,然後置於"/etc/keepalived/"目錄下
#!/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 fifi
以上腳本的作用是,檢查是否有nginx服務進程,如果有則執行結束不做處理;如果沒有,則啟動Nginx服務,間隔兩秒鐘再去檢查是否有Nginx服務,如果沒有就殺死此keepalived進程,如果有
則不做處理。
到此就通過keepalived配置完了Nginx的高可用服務。
使用 ip a 查看主節點則有一個虛擬IP:
客戶機訪問: 192.168.137.110 此時 192.168.137.114 提供服務;如果讓192.168.137.114宕機,則vip則會浮動到備機 192.168.137.111上,有192.168.137.111提供服務。
如下是一個訪問模型圖:
※恩佐·法拉利Ferrari·Enzo—人稱:賽車之父,贏得了9次F1總冠軍
TAG:等待奔跑的企鵝 |