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