Keepalived+nginx實現高可用


(keepalived只是解決代理的單點和地址漂流問題,因此只能對本機服務進行的Nginx服務進行健康監控檢測)nginx


在部署站點規模不大的網站架構是通常一般使用keepalived+nginx來實現、從而實現輕量級的調度服務功能;用到lvs的場景不是不少,只有大規模的站點部署是纔有可能用到。Nginx實現高可用,經過DNS服務解析,編輯兩條A記錄,從而實現真正的高可用,可是須要兩個公網地址。雖然DNS調度效果不是很理想,可是有後端的nginx來爲其進行優化、填坑,從而達到最理想的部署。
Keepalived+nginx實現高可用web


Nginx配置文件

http {}中配置 後端

upstream websrvs {  #定義組
                server 10.10.10.111:80 weight=1;   #定義組內站點,權重都爲1
                server 10.10.10.112:80 weight=1;    #定義組內站點,權重都爲1
}

server {}中配置 服務器

location / {
proxy_pass http://websrvs; #引用定義的組
                }
Keepalived配置文件#vrrp中

Keepalived+nginx的配置文件參考示例:(僅供參考)

Server-1: 網絡

[root@keepalived-1 keepalived]# cat keepalived.conf
! Configuration File for keepalived
#全局配置
global_defs {
notification_email {
                 root@loaclhost    #定義收件人地址
     }
notification_email_from keepalived@localhost  #郵件發件人地址
     smtp_server 127.0.0.1          #發送郵件服務器地址
smtp_connect_timeout 10           #鏈接郵件服務器的超時時間
     router_id 10.10.10.101         #當前路由的id信息網絡中的節點標識(物理IP地址或主機名)
vrrp_mcast_group4 224.0.122.22    #組播地址
}
#腳本實現本機nginx服務運行狀態監控
vrrp_script chk_ngx{
         script   "killall -0 nginx"   #使用killall命令探測nginx服務運行是否正常,從而實現健康檢測。
                interval 1
                weight -5
}

#vrrp1
vrrp_instance VI_1 {   #一個虛擬路由器的標識,
        state MASTER       #一個虛擬路由器的標識,
        interface ens33    # 綁定爲當前虛擬路由器使用的物理接口;通常爲網卡地址;
virtual_router_id 11   #當前虛擬路由器的唯一標識(相同組的兩臺機器必須一致)
        priority 100       #當前主機在此虛擬路徑器中的優先級;範圍1-254;
        advert_int 1       #vrrp通告的時間間隔;心跳間隔時間。
authentication {       #認證方式爲:域共享密鑰
auth_type PASS        
auth_pass 11112222     #最多不要超過8位
        }
virtual_ipaddress {
10.10.1.1/16 dev ens33  #(接口輔助地址,vip地址,虛擬地址)
        }
#調用服務監控
                track_script {    #調用vrrp內部定義指令,跟蹤所指定執行腳本的健康狀態
                                chk_ngx    #調用vrrp中定義的chk_ngx 
                }
#監控接口
                 track_interface { 
                                    ens33   #追蹤/監控 接口
                 }
#觸發通知腳本
notify_master "/etc/keepalived/keepmail.sh master" #當前節點成爲主節點時觸發的腳本;
notify_backup "/etc/keepalived/keepmail.sh backup" #當前節點轉爲備節點時觸發的腳本;
notify_fault "/etc/keepalived/keepmail.sh fault"   #當前節點轉爲「失敗」狀態時觸發的腳本;
}

#vrrp2
vrrp_instance VI_2 {           #一個虛擬路由器的標識,
     state BACKUP                #重要選項,初始或狀態;只能有一個是MASTER,餘下的都應該爲BACKUP;
     interface ens33             # 綁定爲當前虛擬路由器使用的物理接口;通常爲網卡地址;
virtual_router_id 22           #當前虛擬路由器的唯一標識(相同組的兩臺機器必須一致)
     priority 98                 #當前主機在此虛擬路徑器中的優先級;範圍1-254;
     advert_int 1                #vrrp通告的時間間隔;心跳間隔時間。
authentication {        
             auth_type PASS          #認證方式爲:域共享密鑰
             auth_pass 11112222      #最多不要超過8位
     } 
virtual_ipaddress {
10.10.1.2/16  dev ens33        #(接口輔助地址,vip地址,虛擬地址)
     }
#調用服務監控
                track_script {       #調用vrrp內部定義指令,跟蹤所指定執行腳本的健康狀態
                                chk_ngx      #調用vrrp中定義的chk_ngx 
                }
#監控接口
                track_interface {
                                ens33        #追蹤/監控 接口
                }

#觸發通知腳本  
notify_master "/etc/keepalived/keepmail.sh master"     #當前節點成爲主節點時觸發的腳本;
notify_backup "/etc/keepalived/keepmail.sh backup"     #當前節點轉爲備節點時觸發的腳本;
notify_fault "/etc/keepalived/keepmail.sh fault"       #當前節點轉爲「失敗」狀態時觸發的腳本;

}

Server-2: 架構

[root@keepalived-2 keepalived]# cat keepalived.conf
! Configuration File for keepalived
#全局配置
global_defs {
notification_email {     #定義收件人地址
root@localhost
                 }
notification_email_from keepalived@localhost      #郵件發件人地址
smtp_server 127.0.0.1                 #發送郵件服務器地址
smtp_connect_timeout 10               #鏈接郵件服務器的超時時間
router_id 10.10.10.102                #當前路由的id信息網絡中的節點標識(物理IP地址或主機名)
vrrp_mcast_group4 224.0.122.22        #組播地址
}

#腳本實現本機nginx服務監控
vrrp_script chk_ngx   {        
script   "killall -0 nginx"     
interval 1                      
weight -5
}
vrrp_instance VI_1 {            #一個虛擬路由器的標識,
state BACKUP                    #重要選項,初始或狀態;只能有一個是MASTER,餘下的都應該爲BACKUP;
interface ens33                 # 綁定爲當前虛擬路由器使用的物理接口;通常爲網卡地址;
virtual_router_id 11            #當前虛擬路由器的唯一標識(相同組的兩臺機器必須一致)
        priority 98                 #當前主機在此虛擬路徑器中的優先級;範圍1-254;
advert_int 1                    #vrrp通告的時間間隔;心跳間隔時間。
authentication {                #認證方式爲:域共享密鑰
auth_type PASS
auth_pass 11112222              #最多不要超過8位
}

virtual_ipaddress {
                 10.10.1.1/16 dev ens33  #(接口輔助地址,vip地址,虛擬地址)

#調用服務監控
                track_script {          #調用vrrp內部定義指令,跟蹤所指定執行腳本的健康狀態
                                chk_ngx         #調用vrrp中定義的chk_ngx 
                }
#監控接口
                 track_interface {
                                    ens33         #追蹤/監控 接口
                 }
#觸發通知腳本
notify_master "/etc/keepalived/keepmail.sh master"    #當前節點成爲主節點時觸發的腳本;
notify_backup "/etc/keepalived/keepmail.sh backup"    #當前節點轉爲備節點時觸發的腳本;
notify_fault "/etc/keepalived/keepmail.sh fault"      #當前節點轉爲「失敗」狀態時觸發的腳本;
}
vrrp_instance VI_2 {   #一個虛擬路由器的標識,
state MASTER           #重要選項,初始或狀態;只能有一個是MASTER,餘下的都應該爲BACKUP;
interface ens33        # 綁定爲當前虛擬路由器使用的物理接口;通常爲網卡地址;
virtual_router_id 22   #當前虛擬路由器的唯一標識(相同組的兩臺機器必須一致)
priority 100           #當前主機在此虛擬路徑器中的優先級;範圍1-254;
advert_int 1           #vrrp通告的時間間隔;心跳間隔時間。  
authentication {     
auth_type PASS         #認證方式爲:域共享密鑰
auth_pass 11112222     #最多不要超過8位
     }

virtual_ipaddress {   
10.10.1.2/16 dev ens33       #(接口輔助地址,vip地址,虛擬地址)

}
#調用服務監控
                track_script {       #調用vrrp內部定義指令,跟蹤所指定執行腳本的健康狀態
                                chk_ngx      #調用vrrp中定義的chk_ngx 
                }
#監控接口
                track_interface {
                                ens33        #追蹤/監控 接口
                }
#觸發通知腳本  
notify_master "/etc/keepalived/keepmail.sh master"     #當前節點成爲主節點時觸發的腳本;
notify_backup "/etc/keepalived/keepmail.sh backup"     #當前節點轉爲備節點時觸發的腳本;
notify_fault "/etc/keepalived/keepmail.sh fault"       #當前節點轉爲「失敗」狀態時觸發的腳本;
 }
相關文章
相關標籤/搜索