keepalived+nginx安装
安裝keepalived+nginx做為公司服務(wù)器前端高可用反向代理
安裝nginx 1、yum install -y pcre pcre-devel gcc-c++ zlib zlib-devel openssl openssl-devel
2、cd /usr/local/soft
3、wget http://nginx.org/download/nginx-1.12.2.tar.gz
4、tar -zxvf nginx-1.12.2.tar.gz
5、cd nginx-1.12.2
6、./configure?--with-http_stub_status_module #這個模塊獲取nginx的一些狀態(tài),以后zabbix會用到,其他的參數(shù)(nginx做反向代理)暫時不需要。具體的參數(shù)設(shè)置可以看?Nginx編譯參數(shù)詳細(xì)介紹
7、make
8、make install
9、firewall-cmd --zone=public --add-port=80/tcp --permanent
10、systemctl restart firewalld.service
?安裝完成后添加到開機(jī)啟動
echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
?
檢查是否啟動成功:
netstat?-ano|grep?80?有結(jié)果輸入說明啟動成功
?
nginx的一些命令和詳細(xì)參數(shù)
nginx -s reload|reopen|stop|quit? #重新加載配置|重啟|停止|退出 nginx
nginx -t?? #測試配置是否有語法錯誤
?
nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]
?
-?,-h?????????? : 打開幫助信息
-v????????????? : 顯示版本信息并退出
-V????????????? : 顯示版本和配置選項(xiàng)信息,然后退出
-t????????????? : 檢測配置文件是否有語法錯誤,然后退出
-q????????????? : 在檢測配置文件期間屏蔽非錯誤信息
-s signal?????? : 給一個 nginx 主進(jìn)程發(fā)送信號:stop(停止), quit(退出), reopen(重啟), reload(重新加載配置文件)
-p prefix?????? : 設(shè)置前綴路徑(默認(rèn)是:/usr/local/Cellar/nginx/1.2.6/)
-c filename???? : 設(shè)置配置文件(默認(rèn)是:/usr/local/etc/nginx/nginx.conf)
-g directives?? : 設(shè)置配置文件外的全局指令
?
?
安裝keepalived
1、yum -y install libnl libnl-devel libnfnetlink-devel
2、tar -zxvf? keepalived-1.3.9.tar.gz
3、cd keepalived-1.3.9
4、./configure --prefix=/usr/local/keepalived
5、make && make install
安裝完成后添加到開機(jī)啟動
echo "/usr/local/keepalived/sbin/keepalived –f /usr/local/keepalived/etc/ keepalived/ keepalived.conf " >> /etc/rc.local
?
keepalived的VIP基本設(shè)置
vrrp_instance VI_1 {? ????state MASTER?? #指定A節(jié)點(diǎn)為主節(jié)點(diǎn) 備用節(jié)點(diǎn)上設(shè)置為BACKUP即可?
????interface eth0?? #綁定虛擬IP的網(wǎng)絡(luò)接口?
????virtual_router_id 51? #VRRP組名,兩個節(jié)點(diǎn)的設(shè)置必須一樣,以指明各個節(jié)點(diǎn)屬于同一VRRP組?
????priority 100?? #主節(jié)點(diǎn)的優(yōu)先級(1-254之間),備用節(jié)點(diǎn)必須比主節(jié)點(diǎn)優(yōu)先級低?
????advert_int 1?? #組播信息發(fā)送間隔,兩個節(jié)點(diǎn)設(shè)置必須一樣?
????authentication {?? #設(shè)置驗(yàn)證信息,兩個節(jié)點(diǎn)必須一致? ????????auth_type PASS?
????????auth_pass 1111?
????}?
????virtual_ipaddress {?? #指定虛擬IP, 兩個節(jié)點(diǎn)設(shè)置必須一樣? ????????192.168.200.16/24?
????????192.168.200.17 /24?
????????192.168.200.18 /24?
????}?
}??
?
按同樣的方法配置節(jié)點(diǎn)B并修改配置文件,可將A節(jié)點(diǎn)的配置文件復(fù)制到B節(jié)點(diǎn),并修改以下幾項(xiàng):
router_id? NodeB
state?? BACKUP
priority?? 99
其它項(xiàng)不必修改。
測試及驗(yàn)證:
執(zhí)行命令 ip a (注意ifconfig命令無法查看到配置的虛擬IP),可以看到節(jié)點(diǎn)A已經(jīng)綁定了16/17/18的ip,此時,拔掉節(jié)點(diǎn)A的網(wǎng)線,在節(jié)點(diǎn)B上上執(zhí)行ip a就發(fā)現(xiàn)虛擬IP已經(jīng)綁定到節(jié)點(diǎn)B上,再恢復(fù)A節(jié)點(diǎn)的網(wǎng)線,虛擬IP又綁定回節(jié)點(diǎn)A之上。
?
(主從模式)腦裂問題
上述主從配置方式存在腦裂的可能,即兩個節(jié)點(diǎn)實(shí)際都處于正常工作狀態(tài),但是無法接收到彼此的組播通知,這時兩個節(jié)點(diǎn)均強(qiáng)行綁定虛擬IP,導(dǎo)致不可預(yù)料的后果。
這時就需要設(shè)置仲裁,即每個節(jié)點(diǎn)必須判斷自身的狀態(tài)(應(yīng)用服務(wù)狀態(tài)及自身網(wǎng)絡(luò)狀態(tài)),要實(shí)現(xiàn)這兩點(diǎn)可使用自定義shell腳本實(shí)現(xiàn),通過周期性地檢查自身應(yīng)用服務(wù)狀態(tài),并不斷ping網(wǎng)關(guān)(或其它可靠的參考IP)均可。當(dāng)自身服務(wù)異常、或無法ping通網(wǎng)關(guān),則認(rèn)為自身出現(xiàn)故障,就應(yīng)該移除掉虛擬IP(停止keepalived服務(wù)即可)。主要借助keepalived提供的vrrp_script及track_script實(shí)現(xiàn):
在keepalived的配置文件最前面加入以下代碼,定義一個跟蹤腳本:
vrrp_script check_local { #定義一個名稱為check_local的檢查腳本?
?? ?script "/usr/local/keepalived/bin/check_local.sh" #shell腳本的路徑?
??? interval 5? #運(yùn)行間隔?
}?
再在vrrp_instance配置中加入以下代碼使用上面定義的檢測腳本:
track_script {?
? check_local?
}??
我們在/usr/local/keepalived/bin/check_local.sh定義的檢測規(guī)則可以是:
a.自身web服務(wù)故障(超時,http返回狀態(tài)不是200)
b.無法ping通網(wǎng)關(guān)
c.產(chǎn)生以上任何一個問題,均應(yīng)該移除本機(jī)的虛擬IP(停止keepalived實(shí)例即可)
但這里有個小問題,如果本機(jī)或是網(wǎng)關(guān)偶爾出現(xiàn)一次故障,那么我們不能認(rèn)為是服務(wù)故障。更好的做法是如果連續(xù)N次檢測本機(jī)服務(wù)不正常或連接N次無法ping通網(wǎng)關(guān),才認(rèn)為是故障產(chǎn)生,才需要進(jìn)行故障轉(zhuǎn)移。另一方面,如果腳本檢測到故障產(chǎn)生,并停止掉了keepalived服務(wù),那么當(dāng)故障恢復(fù)后,keepalived是無法自動恢復(fù)的。我覺得利用獨(dú)立的腳本以秒級的間隔檢查自身服務(wù)及網(wǎng)關(guān)連接性,再根據(jù)故障情況控制keepalived的運(yùn)行或是停止。
這里提供一個思路,具體腳本內(nèi)容請大家根據(jù)自己的需要編寫即可。
?
(示例)nginx + keepalived 實(shí)現(xiàn)HA 主從模式
vi /etc/keepalived/keepalived.conf
編輯文件(主):
global_defs {?
?? router_id nginx_master?
}?
#監(jiān)控服務(wù).NGINX mysql等?
vrrp_script chk_nginx {?
??? script "/usr/local/nginx/check_nginx.sh"?
??? interval 2?
??? weight 2?
}?
?
vrrp_instance VI_1 {?
??? state MASTER?
??? interface eth0?
??? virtual_router_id 51?
??? priority 101?
??? advert_int 1?
??? authentication {?
??????? auth_type PASS?
??????? auth_pass 1111?
??? }?
??? virtual_ipaddress {?
??????? 192.168.1.254?
??? }?
??? track_script {?
??????? chk_nginx? #檢測腳本 上面配置的?
??? }?
}?
?
vi /etc/keepalived/keepalived.conf
編輯文件(從):
global_defs {?
?? router_id nginx_backup?
}?
#監(jiān)控服務(wù).NGINX mysql等?
vrrp_script chk_nginx {?
??? script "/usr/local/nginx/check_nginx.sh"?
??? interval 2?
??? weight 2?
}?
?
vrrp_instance VI_1 {?
??? state BACKUP?
??? interface eth0?
??? virtual_router_id 51?
??? priority 99?
??? advert_int 1?
??? authentication {?
??????? auth_type PASS?
??????? auth_pass 1111?
??? }?
??? virtual_ipaddress {?
??????? 192.168.1.254?
??? }?
??? track_script {?
??????? chk_nginx? #檢測腳本 上面配置的?
??? }?
}?
?
腳本/usr/local/nginx/check_nginx.sh"內(nèi)容:
#!/bin/bash?
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]?
then?
/usr/local/nginx/sbin/nginx?
sleep 5?
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]?
then?
killall keepalived?
fi?
fi?
啟動并測試:
1.啟動兩臺機(jī)器上的nginx
2.啟動兩臺機(jī)器上的keepalived
此時使用命令 ip addr 查看虛擬IP綁定 可以看到主 有,從沒有,將主機(jī)的keepalived關(guān)掉,可以看到vip綁定到了從的上面
使用其他機(jī)器訪問進(jìn)行訪問
查看是否能夠訪問,然后讓本機(jī)的nginx關(guān)掉,繼續(xù)看是否能夠訪問,如果能夠訪問則HA配置成功。
轉(zhuǎn)載于:https://www.cnblogs.com/xuyingzhong/p/8064144.html
總結(jié)
以上是生活随笔為你收集整理的keepalived+nginx安装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有谁知道这几双女鞋是什么型号,叫什么名字
- 下一篇: 快速排序的实现与注意点