日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

CentOS6.5 keepalived详解及实现Nginx服务的高可用性

發布時間:2025/5/22 Nginx 160 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CentOS6.5 keepalived详解及实现Nginx服务的高可用性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

keepalived基礎概念

? ?Keepalived是一個基于VRRP協議來實現的WEB服務高可用方案,可以利用其來避免單點故障。一個WEB服務至少會有2臺服務器運行Keepalived,一臺為主服務器(MASTER),一臺為備份服務器(BACKUP),但是對外表現為一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候,備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。


? ?keepalived最初的誕生就是為ipvs提供高可用性的,它可以自己調用ipvs來生成規則,并且可以自動實現把用戶設定好的ip地址轉移動別的節點上去的,還可以實現后端服務器的健康狀態檢測,說白了就是對vrrp的實現而已,那vrrp是什么呢:它叫虛擬冗余路由協議;vrrp可以把兩個網關虛擬成一個網關來使用,當一個網關不可以用了,另一個會取而代之,keepalived其實就是linux操作系統上實現vrrp的,keepalived就是這樣來實現vip地址轉移的,也是實現的地址的高可用性;

? ?在VRRP協議中,有兩組重要的概念:VRRP路由器和虛擬路由器,主控路由器和備份路由器。 VRRP路由器是指運行VRRP的路由器,是物理實體,虛擬路由器是指VRRP協議創建的,是邏輯概念。一組VRRP路由器協同工作,共同構成一臺虛擬路由器。該虛擬路由器對外表現為一個具有唯一固定IP地址和MAC地址的邏輯路由器。處于同一個VRRP組中的路由器具有兩種互斥的角色:主控路由器和備份路由器,一個VRRP組中有且只有一臺處于主控角色的路由器,可以有一個或者多個處于備份角色的路由器。VRRP協議使用選擇策略從路由器組中選出一臺作為主控,負責ARP相應和轉發IP數據包,組中的其它路由器作為備份的角色處于待命狀態。當由于某種原因主控路由器發生故障時,備份路由器能在幾秒鐘的時延后升級為主路由器。由于此切換非常迅速而且不用改變IP地址和MAC地址,故對終端使用者系統是透明的。

keepalived的核心組成
? ?1、vrrp(Virtual Redundancy Router Protocol)的實現,虛擬冗余路由協議,它可以把兩個或多個網關虛擬成一個網關來使用,就是在兩個或多個路由之前用一種協議,讓兩個或多個路由通過選舉不決定哪個是活動的路由,當活動的不再提供服務了,另一個將取而代之,
? ?2、virtual server虛擬服務器
? ?3、vrrp_script,

keepalived配置文件分為三段:
? ?第一段:Global configuration全局配置段;
? ? ? ?Global definitions ? ?全局定義;
? ? ? ?Static route ? ?靜態路由;

? ?第二段:VRRP configuration配置段;
? ? ? ?VRRP synchronization groups同步組,假如在一個節點上配置兩個IP要把VIP同時轉移出去,也就是說這兩個VIP要同步工作,定義成一個組,而后當也一個資源來轉移;
? ? ? ?VRRP instances實例,定義虛擬路由器的;要實現虛擬路由轉移時要轉移IP地址;

? ?第三段:LVS configuration配置段;
? ? ? ?virtual server groups,虛擬路由服務器組,把多個路由定義在一起同時使用;
? ? ? ?virtual servers虛擬服務器,一般都是單獨定義的;

keepalived的實現過程:

第一步:安裝配置keepalived程序,有多少個節點就安裝多少個,都得安裝上;

# yum -y install keepalived # cd /etc/keepalived/ # vim keepalived.conf ! Configuration File for keepalived global_defs { #全局定義notification_email { #定義郵件通知root@localhost #定義收件人,一行一個,有多少個就可以寫多少行}notification_email_from kaadmin@localhost #以什么人的身份發郵件,就是發件人smtp_server 127.0.0.1 #指定發郵件的服務器smtp_connect_timeout 30 #連接郵件服務器超時時長router_id LVS_DEVEL #路由ID } vrrp_script chk_mantaince_down { #手動定義檢測機制#判斷/etc/keepalived/這個路徑下是否存在down文件,如果存在即退出為1,否則退出為0script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"interval 1 #每隔多久發送一次檢測信息,單位為秒weight -6 #如果上面的判斷有down文件即權后重-6,只要減后的權重大于master的就可以 } vrrp_instance VI_1 { #定義vrrp實例state MASTER #定義該節點為主節點,一個節點定義了master,另一臺或其實的就要定義成backup;interface eth0 #通告經過哪個接口進行virtual_router_id 88#虛擬路由ID號,不能大于255的priority 100 #定義初始優先級,定義主的優先級要高于BACKUP的advert_int 1 #通告幾個authentication { #定義認證auth_type PASS #定義認證機制,pass是明白認證auth_pass 1111 #認證密碼}virtual_ipaddress { #虛擬地址,VIP地址172.16.27.100 #可以定義得很詳細,<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>,可以用man keepalived.conf查看相關的詳細說明的;}track_script { #在vrrp實現中要追蹤到上面定義的檢測腳本chk_haproxychk_mantaince_down #調用上面定義好的檢測}# 調用編寫好的通知腳本notify_master "/etc/keepalived/notify.sh master"notify_backup "/etc/keepalived/notify.sh backup"notify_fault "/etc/keepalived/notify.sh fault" }




第二步:編寫通告腳本,當某一節點發生VIP地址轉移時就會發郵件通知管理員,在/etc/keepalived/目錄下創建一個腳本文件,然后再在腳本文件中調用這個腳本就可以了,上面配置文件中已經有調用腳本內容了:

? ?# vim /etc/keepalived/notify.sh

#!/bin/bash # Author:Tanxw.com <tan_xw@hotmail.com> # Description: An example of notify script # vip=172.16.27.100 # 定義VIP地址 contact='root@localhost' # 這定義收件人 # 獲取當前主機的IP地址 currentIP=`ifconfig eth0 | awk '/inet addr/{print $2}' | awk -F: '{print $2}'` notify() { # 定義通告方法# 定義一個發件的主體內容mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname`($currentIP) changed to be $1"# 定義發件的主題mailsubject="$currentIP to be $1: $vip floating"# 用mail命令把郵件發送出去echo $mailbody | mail -s "$mailsubject" $contact } case "$1" in # 判斷傳進來的三個參數是什么,調用notify方法master)notify masterexit 0;;backup)notify backupexit 0;;fault)notify faultexit 0;;*)echo "Usage: `basename $0` {master|backup|fault}"exit 1;; esac


第三步:配置LVS的集群服務,把下面代碼加入到/etc/keepalived/keepalived.conf配置文件中即可,默認的配置文件中也有示例:

virtual_server 172.16.27.100 80 { # 定義一個虛擬服務 VIP PORTdelay_loop 6 # 大概延遲幾個周期再去做服務檢測的lb_algo rr # 定義調度方法lb_kind DR # LVS的模型,NET也可以nat_mask 255.255.0.0 # 掩碼persistence_timeout 0 # 持久時間protocol TCP # 協議,默認也是TCPreal_server 172.16.27.1 80 { # 定義真正的real_server ip portweight 1 # 定義權重HTTP_GET { # 請求方法url { # 聲明檢測哪個URLpath /status_code 200}connect_timeout 3 # 連接超時時間nb_get_retry 3 # 至少嘗試幾次delay_before_retry 3# 在每次嘗試時要等上幾秒鐘}}real_server 172.16.27.2 80 { # 定義真正的real_server ip portweight 1 # 定義權重HTTP_GET { # 請求方法url { # 聲明檢測哪個URLpath /status_code 200}connect_timeout 3 # 連接超時時間nb_get_retry 3 # 至少嘗試幾次delay_before_retry 3# 在每次嘗試時要等上幾秒鐘}} }

即使沒安裝有ipvsadm,只要配置有keepalived的lvs,啟動服務后就會自動生成LVS規則,但是如果沒安裝有ipvsadm就查看不了規則了,裝上來查看一下吧。


第四步:兩個節點都配置有MASTER/BACKUP,定義兩個實例,一個定義為MASTER,另一個定義為BACKUP就可以了,分別配置不同的VIP,node1上配置了MASTER的VIP為172.16.27.100,BACKUP的VIP為172.16.27.200;node2為上配置了MASTER的VIP為172.16.27.200,BACKUP的VIP為172.16.27.100。

# 這段代碼在node1的節點上加,同樣加為vrrp實例就可以了 vrrp_instance VI_2 {state BACKUPinterface eth0virtual_router_id 33priority 99advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.16.27.200}track_script {chk_mantaince_down # chk_nginx}notify_master "/etc/keepalived/notify.sh master"notify_backup "/etc/keepalived/notify.sh backup"notify_fault "/etc/keepalived/notify.sh fault" } # 下面這段代碼加到node2節點的配置文件上就可以了,就是需要改一個master和權重 vrrp_instance VI_2 {state MASTERinterface eth0virtual_router_id 33priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.16.27.200}track_script {chk_mantaince_down # chk_nginx}notify_master "/etc/keepalived/notify.sh master"notify_backup "/etc/keepalived/notify.sh backup"notify_fault "/etc/keepalived/notify.sh fault" }


結束:

? ?經過不懈的努力,終于把keepalived的vrrp的大概實現出來了,不管是LVS還是高可用VIP地址的自動轉移,還是服務的高用,都需要認真的配置好,更有需要寫好很多的腳本,使服務更回高效,更高可用,在此,如果大神發現在什么不妥還望多多指點,不勝感激。


轉載于:https://blog.51cto.com/tanxw/1405461

總結

以上是生活随笔為你收集整理的CentOS6.5 keepalived详解及实现Nginx服务的高可用性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。