1、 keepalived依賴的包,如何離線使用yum源,請查看前一篇文章
yum install gcc openssl-devel libnl libnl-devel libnfnetlink-devel net-tools vim
在執行編譯的時候,會有提示,按照提示安裝依賴軟件即可
1、 上傳或下載 keepalived
上傳或下載 keepalived(keepalived-1.2.18.tar.gz) 到 /usr/local/ 目錄
解壓安裝
[plain] view plain copy
- # 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
將 keepalived 安裝成 Linux 系統服務
因爲沒有使用 keepalived 的默認路徑安裝(默認是/usr/local) ,安裝完成之後,需要做一些工作複製默認配置文件到默認路徑
[plain] view plain copy
- # mkdir /etc/keepalived
- # cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
複製 keepalived 服務腳本到默認的地址
[plain] view plain copy
- # 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/
設置 keepalived 服務開機啓動
[plain] view plain copy
- # chkconfig keepalived on
4、 修改 Keepalived 配置文件
(1) MASTER 節點配置文件(192.168.1.2)
[plain] view plain copy
- # vi /etc/keepalived/keepalived.conf
- ! Configuration File for keepalived
- global_defs {
- ## keepalived 自帶的郵件提醒需要開啓 sendmail 服務。 建議用獨立的監控或第三方 SMTP
- router_id liuyazhuang133 ## 標識本節點的字條串,通常爲 hostname
- }
- ## keepalived 會定時執行腳本並對腳本執行的結果進行分析,動態調整 vrrp_instance 的優先級。如果腳本執行結果爲 0,並且 weight 配置的值大於 0,則優先級相應的增加。如果腳本執行結果非 0,並且 weight配置的值小於 0,則優先級相應的減少。其他情況,維持原本配置的優先級,即配置文件中 priority 對應的值。
- vrrp_script chk_nginx {
- script "/etc/keepalived/nginx_check.sh" ## 檢測 nginx 狀態的腳本路徑
- interval 2 ## 檢測時間間隔
- weight -20 ## 如果條件成立,權重-20
- }
- ## 定義虛擬路由, VI_1 爲虛擬路由的標示符,自己定義名稱
- vrrp_instance VI_1 {
- state MASTER ## 主節點爲 MASTER, 對應的備份節點爲 BACKUP
- interface eno24 ## 綁定虛擬 IP 的網絡接口,與本機 IP 地址所在的網絡接口相同, 我的是 eno24
- virtual_router_id 33 ## 虛擬路由的 ID 號,相同網段下router_id需要設置爲不同值 不同網段需要設置相同值
- mcast_src_ip 192.168.1.1 ## 本機 IP 地址
- priority 100 ## 節點優先級, 值範圍 0-254, MASTER 要比 BACKUP 高
- nopreempt ## 優先級高的設置 nopreempt 解決異常恢復後再次搶佔的問題
- advert_int 1 ## 組播信息發送間隔,兩個節點設置必須一樣, 默認 1s
- ## 設置驗證信息,兩個節點必須一致
- authentication {
- auth_type PASS
- auth_pass 1111 ## 真實生產,按需求對應該過來
- }
- ## 將 track_script 塊加入 instance 配置塊
- track_script {
- chk_nginx ## 執行 Nginx 監控的服務
- } #
- # 虛擬 IP 池, 兩個節點設置必須一樣
- virtual_ipaddress {
- 192.168.1.100 ## 虛擬 ip,可以定義多個
- }
- }
注意:############啓動keepalived後,nginx檢測可能不執行,查看日誌文件後,發現報了很多 unknow keyword, 若出現空格則需要將空格全部刪掉手動敲上,且 參數名與 "{" 之間必須存在空格vrrp_instance VI_1 { 之間必須存在空格
tail -100 /var/log/messages #命令查看日期報錯信息
※ 報錯信息中若仍報錯, shell腳本進行執行時,可能寫保護不能執行shell腳本,selinux 需要進行關閉
vi /etc/sysconfig/selinux
selinux = disabled
重啓服務
(2)BACKUP 節點配置文件(192.168.1.2)
[plain] view plain copy
- # vi /etc/keepalived/keepalived.conf
- ! Configuration File for keepalived
- global_defs {
- router_id liuyazhuang134
- }
- vrrp_script chk_nginx {
- script "/etc/keepalived/nginx_check.sh"
- interval 2
- weight -20
- }
- vrrp_instance VI_1 {
- state BACKUP
- interface eno24
- virtual_router_id 33
- mcast_src_ip 192.168.1.2
- priority 90
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- track_script {
- chk_nginx
- }
- virtual_ipaddress {
- 192.168.1.100
- }
- }
5、 編寫 Nginx 狀態檢測腳本
編寫 Nginx 狀態檢測腳本 /etc/keepalived/nginx_check.sh (已在 keepalived.conf 中配置)腳本要求:如果 nginx 停止運行,嘗試啓動,如果無法啓動則殺死本機的 keepalived 進程, keepalied將虛擬 ip 綁定到 BACKUP 機器上。 內容如下:
[plain] view plain copy
#!/bin/bash
#時間變量,用於記錄日誌
d=`date +%Y%m%d_%H:%M:%S`
#計算nginx進程數量
n=`ps -C nginx --no-heading|wc -l`
#如果進程爲0,則啓動nginx,並且再次檢測nginx進程數量,
#如果進程還爲0,說明nginx無法啓動,此時需要關閉keepalived
if [ $n -eq "0" ]; then
systemctl start nginx
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalived
fi
fi
保存後,給腳本賦執行權限:
[plain] view plain copy
- # chmod +x /etc/keepalived/nginx_check.sh
6、 啓動 Keepalived
[plain] view plain copy
- # service keepalived start
- Starting keepalived: [ OK ]
7、查看keepalived生成的VIP信息
使用 ip addr命令查看生成的VIP信息,ifconfig命令不顯示VIP信息
我們可以看到在eno24網口生成了一個VIP,就是配置文件中配置的訪問的vip地址。可能出現未能生成vip的情況,將SELinux關閉。重啓服務。修改selinux的配置文件,重啓後生效。
打開 selinux 配置文件
[root@localhost ~]# vim /etc/selinux/config
修改 selinux 配置文件
將SELINUX=enforcing改爲SELINUX=disabled,保存後退出
重啓
[root@localhost ~]# reboot
驗證
[root@localhost ~]# /usr/sbin/sestatus SELinux status: disabled [root@localhost ~]# getenforce Disabled
7、測試訪問
訪問 http://192.168.1.100:80
這兩個tomcat主頁是兩臺應用服務器下的tomcat服務器,一臺是8080,8081,8082 一臺是8083,8084,8085,通過訪問統一VIP 192.168.1.100,訪問到了ngnix服務再轉發到配置的應用服務。
任意關閉其中的某臺nginx服務,訪問仍然可以訪問的到,說明keepalived實現了nginx服務器的高可用,可自動檢測nginx服務狀態,進行訪問節點的漂移