綜合架構(gòu)之keepalived(高可用)

內(nèi)容涉及

高可用原理
高可用配置文件
高可用服務(wù)常見問題
實現(xiàn)高可用服務(wù)雙主功能

keepalivd----------->解決單點故障

作用:
01. 利用keepalived軟件管理配置lvs
02. 利用keepalived軟件可以配合lvs對后端節(jié)點進行健康檢查(后端的服務(wù))
03. 利用keepalived實現(xiàn)高可用功能


keepalived原理:

利用vrrp(虛擬路由冗余協(xié)議)協(xié)議實現(xiàn)高可用功能

vrrp抓包信息

image

原理圖:

  • 確保負載均衡服務(wù)器和后端web集群可以通信
  • 安裝keepalived軟件后兩臺主機VRRP進行通訊
  • 通過VRRP協(xié)議根據(jù)優(yōu)先級去競選主備
  • 主不間斷向所有備機發(fā)送組播包224.0.0.18(組播包可以加密片仿,推薦不要加密括儒。)
  • 主機會生成一個vip,當主機宕機的話會飄逸到備機上。
  • 如果主機恢復的話谣沸,根據(jù)優(yōu)先級重新恢復為主機。

keepalived服務(wù)部署過程

第一個歷程: web集群節(jié)點進行配置

    www.conf 
    server {
    listen            80;
    server_name  www.oldboy.com;
         location / {
             root   /html/www;
             index  index.php oldboy.jpg index.html index.htm;
         }
         location ~ \.php$ {
             root /html/www;
             fastcgi_pass  127.0.0.1:9000;
             fastcgi_index index.php;
             fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
             include /etc/nginx/fastcgi_params;
         }
     }

測試lb01lb02能否正常的文本

    web01
    echo "www.oldboy.com web01" >/html/www/oldboy.html  
    web02
    echo "www.oldboy.com web02" >/html/www/oldboy.html      
    web03
    echo "www.oldboy.com web03" >/html/www/oldboy.html  

負載均衡 lb01 lb02 進行web集群節(jié)點測試

[root@lb01 ~]# curl -H host:www.oldboy.com 10.0.0.7/oldboy.html
    www.oldboy.com web01
    [root@lb01 ~]# curl -H host:www.oldboy.com 10.0.0.8/oldboy.html
    www.oldboy.com web02
    [root@lb01 ~]# curl -H host:www.oldboy.com 10.0.0.9/oldboy.html
    www.oldboy.com web03

    [root@lb02 ~]# curl -H host:www.oldboy.com 10.0.0.7/oldboy.html
    www.oldboy.com web01
    [root@lb02 ~]# curl -H host:www.oldboy.com 10.0.0.8/oldboy.html
    www.oldboy.com web02
    [root@lb02 ~]# curl -H host:www.oldboy.com 10.0.0.9/oldboy.html
    www.oldboy.com web03

第二個歷程: 安裝部署keepalived服務(wù)
yum install -y keepalived

第三個歷程: 編寫keepalived配置文件

lb01 配置信息
vim /etc/keepalived/keepalived.conf
 /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
    
    global_defs {                       --- 全局配置區(qū)域
       notification_email {             --- 當主服務(wù)器發(fā)生變化進行郵件通知
         330882721@qq.com
       }
       notification_email_from 17778058507@163.com
       smtp_server smtp.163.com
       smtp_connect_timeout 30
       router_id lb01                   --- 表示高可用集群中節(jié)點身份信息(相當于ospf router id )
    }
    
    vrrp_instance oldboy {              --- vrrp實例配置區(qū)域  家族
        state MASTER                    --- 說明標識服務(wù)器為主服務(wù)器 (MASTER BACKUP)
        interface eth0                  --- 指定vip地址出現(xiàn)在哪個網(wǎng)卡上                
        virtual_router_id 62            --- 家族標識 62
        priority 150                    --- 決定服務(wù)器是否是主服務(wù)器  優(yōu)先級越高越有可能成為主
        advert_int 1                    --- 間隔1s鐘發(fā)送一個組播包,主備要一致
        authentication {                --- 身份認證 認證主服務(wù)真實性
            auth_type PASS
            auth_pass 1234
        }
        virtual_ipaddress {             --- 生成虛擬IP地址信息
            10.0.0.3
        }
    }

實際配置

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id lb01
}

vrrp_instance oldboy {
    state MASTER
    interface eth0
    virtual_router_id 62
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        10.0.0.3
    }
}

lb02 配置信息

    vim /etc/keepalived/keepalived.conf
    [root@lb01 ~]# cat /etc/keepalived/keepalived.conf 
    ! Configuration File for keepalived
    
    global_defs {                       --- 全局配置區(qū)域
       notification_email {             --- 當主服務(wù)器發(fā)生變化進行郵件通知
         330882721@qq.com
       }
       notification_email_from 17778058507@163.com
       smtp_server smtp.163.com
       smtp_connect_timeout 30
       router_id lb02                   --- 表示高可用集群中節(jié)點身份信息
    }
    
    vrrp_instance oldboy {              --- vrrp實例配置區(qū)域  家族
        state BACKUP                    --- 說明標識服務(wù)器為主服務(wù)器 (MASTER BACKUP)
        interface eth0                  --- 指定vip地址出現(xiàn)在哪個網(wǎng)卡上                
        virtual_router_id 62            --- 家族標識 62
        priority 100                    --- 決定服務(wù)器是否是主服務(wù)器  優(yōu)先級越高越有可能成為主
        advert_int 1                    --- 間隔1s鐘發(fā)送一個組播包
        authentication {                --- 身份認證 認證主服務(wù)真實性
            auth_type PASS
            auth_pass 1234
        }
        virtual_ipaddress {             --- 生成虛擬IP地址信息
            10.0.0.3
        }
    }   

實際配置

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id lb02
}

vrrp_instance oldboy {
    state BACKUP
    interface eth0
    virtual_router_id 62
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        10.0.0.3
    }
}

測試:
將lb01將掛起掂为,模仿lb01宕機啡邑,查看lb02能否正常提供負載服務(wù)。


高可用服務(wù)常見問題:

腦裂問題
出現(xiàn)原因:

  • a 服務(wù)配置問題: vrrp實例配置 (組播包發(fā)送)
  • b 有安全策略影響主備通訊:
  • c 物理線路出現(xiàn)問題 連接線路(心跳線)

總結(jié): 備服務(wù)器收不到主服務(wù)器發(fā)送的vrrp組播包

解決問題的方法:

  • a. 利用系統(tǒng)日志查看主備通訊問題
    tail -f /var/log/messages
  • b. 利用防火墻命令, 配置允許組播包通過策略
  • c. 多個心跳線做冗余
  • d .監(jiān)控及時報警:()
    備服務(wù)器有vip出現(xiàn),幾種情況:
    1) 正常主備切換
    2) 出現(xiàn)腦裂
    編寫腳本刚操,當檢測到備服務(wù)器有虛擬IP時及時報警
  vi /server/scripts/inotify_vip.sh 
       #!/bin/bash
       ip a s eth0|grep "10.0.0.3" &>/dev/null
       if [ $? -eq 0 ]
       then
          echo "備服務(wù)器產(chǎn)生的vip地址,請關(guān)注"|mail -s "keepalived_error" 330882721@qq.com
       fi
vi /etc/mail.rc進行設(shè)置
systemctl restart postfix.service

負載均衡服務(wù)出現(xiàn)異常,高可用服務(wù)無法實現(xiàn)切換

負載均衡服務(wù)活著---keepalived服務(wù)活著
負載均衡服務(wù)死了---keepalived殉情

編寫腳本

 vim check_lb.sh
       #!/bin/bash 
       count=$(ps -ef|grep -c [n]ginx) #grep隨便加一個[]就把grep過濾的行也給去掉
       if [ $count -lt 2 ]
       then 
          systemctl stop keepalived
       fi

只要nginx服務(wù)停止, 就立即切換

/etc/keepalived/keepalived.conf 
       ! Configuration File for keepalived
       
       global_defs {
          notification_email {
            acassen@firewall.loc
            failover@firewall.loc
            sysadmin@firewall.loc
          }
          notification_email_from Alexandre.Cassen@firewall.loc
          smtp_server 192.168.200.1
          smtp_connect_timeout 30
          router_id lb01
       }
       
       vrrp_script check_web {                    --- 定義監(jiān)控腳本信息
          script "/server/scripts/check_lb.sh"    --- 指定監(jiān)控執(zhí)行的腳本
          interval 2                              --- 腳本執(zhí)行間隔周期             
          weight 2                                 
       }
       
       vrrp_instance oldboy {
           state MASTER
           interface eth0
           virtual_router_id 62
           priority 150
           advert_int 1
           authentication {
               auth_type PASS
               auth_pass 1234
           }
           virtual_ipaddress {
               10.0.0.3
       
           }
           track_script {
                check_web ------調(diào)用這個腳本
           }
       }

確認腳本有執(zhí)行權(quán)限
chmod +x /server/scripts/check_lb.sh
keepalived服務(wù)需要進行重啟

keepalived權(quán)重配置

權(quán)重數(shù)值: 正數(shù)

  • 判斷腳本: 執(zhí)行結(jié)果信息
    腳本執(zhí)行為真(成功) 腳本返回值為0
    優(yōu)先級+weight求和運算
    腳本執(zhí)行為假(失敗) 腳本返回不為0
    優(yōu)先級不變

權(quán)重數(shù)值: 負數(shù)

  • 判斷腳本: 執(zhí)行結(jié)果信息
    腳本執(zhí)行為真(成功) 腳本返回值為0
    優(yōu)先級不變
    腳本執(zhí)行為假(失敗) 腳本返回不為0
    優(yōu)先級-weight 求差運算



    需求01: 當lb01 nginx服務(wù)停止, 將資源切換到lb02, 當lb01 nginx恢復, 自動搶占資源
    nginx服務(wù)停止 lb01<lb02
    腳本為假
    優(yōu)先級-weight < lb02

    nginx服務(wù)恢復 lb01>lb02
    腳本為真
    優(yōu)先級 > lb02
    測試代碼

if [ $count -lt 2 ]
       then
          exit 1
       else
          exit 0
       fi

調(diào)整權(quán)重值
01. 調(diào)整權(quán)重值
02. 調(diào)整優(yōu)先級

提高負載均衡服務(wù)安全性

第一個歷程: 修改lb01 lb02 nginx配置文件

     lb01 -- 主
     server {
        listen        10.0.0.3:80;#監(jiān)聽地址必須為本地網(wǎng)卡監(jiān)聽地址
        server_name   localhost;
        include  proxy_params;
        location / {
           proxy_pass  http://default;
        }
     }

systemctl restart nginx-------->不能reload重啟服務(wù)

     lb02 -- 備
     server {
        listen        10.0.0.3:80;
        server_name   localhost;
        include  proxy_params;
        location / {
           proxy_pass  http://default;
        }
     }
     systemctl restart nginx       

可以修改內(nèi)核,讓服務(wù)監(jiān)聽沒有的地址
解決方法:
echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
##/etc/sysctl.conf 加上
sysctl -p

利用高可用服務(wù)實現(xiàn)雙主配置

原因:解決多個網(wǎng)站都通過一個負載均衡設(shè)備增加了一臺負載均衡設(shè)備的壓力。
可以實現(xiàn)不同的網(wǎng)站走不同的負載設(shè)備再芋。

第一個歷程: 修改keepalived配置文件

    lb01 修改 
    vrrp_instance oldboy {
        state MASTER
        interface eth0
        virtual_router_id 62
        priority 150
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1234
        }
        virtual_ipaddress {
            10.0.0.3
        }
    }
    vrrp_instance oldgirl {
        state BACKUP
        interface eth0
        virtual_router_id 63
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1234
        }
        virtual_ipaddress {
            10.0.0.4
        }
    }   
    
    lb02 修改
    vrrp_instance oldboy {
        state BACKUP
        interface eth0
        virtual_router_id 62
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1234
        }
        virtual_ipaddress {
            10.0.0.3
        }
    }
    vrrp_instance oldgirl {
        state MASTER
        interface eth0
        virtual_router_id 63
        priority 150
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1234
        }
        virtual_ipaddress {
            10.0.0.4
        }
    }

第二個歷程: 修改lb01/02nginx配置文件

    26     server {
    27         listen        10.0.0.3:80;
    28         server_name   www.oldboy.com;
    29         include  proxy_params;
    30         location / {
    31            proxy_pass  http://default;
    32         }
    33     }
    34     server {
    35         listen        10.0.0.4:80;
    36         server_name   bbs.oldboy.com;
    37         include  proxy_params;
    38         location / {
    39            proxy_pass  http://default;
    40         }
    41     }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末菊霜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子济赎,更是在濱河造成了極大的恐慌鉴逞,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件司训,死亡現(xiàn)場離奇詭異构捡,居然都是意外死亡,警方通過查閱死者的電腦和手機豁遭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門叭喜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蓖谢,你說我怎么就攤上這事∑┪校” “怎么了闪幽?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涡匀。 經(jīng)常有香客問我盯腌,道長,這世上最難降的妖魔是什么陨瘩? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任腕够,我火速辦了婚禮,結(jié)果婚禮上舌劳,老公的妹妹穿的比我還像新娘帚湘。我一直安慰自己,他們只是感情好甚淡,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布大诸。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪资柔。 梳的紋絲不亂的頭發(fā)上焙贷,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音贿堰,去河邊找鬼辙芍。 笑死,一個胖子當著我的面吹牛羹与,可吹牛的內(nèi)容都是我干的故硅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼注簿,長吁一口氣:“原來是場噩夢啊……” “哼契吉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诡渴,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤捐晶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后妄辩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惑灵,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年眼耀,在試婚紗的時候發(fā)現(xiàn)自己被綠了英支。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡哮伟,死狀恐怖干花,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情楞黄,我是刑警寧澤池凄,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站鬼廓,受9級特大地震影響肿仑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碎税,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一尤慰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雷蹂,春花似錦伟端、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蕉饼。三九已至,卻和暖如春玛歌,著一層夾襖步出監(jiān)牢的瞬間昧港,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工支子, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留创肥,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓值朋,卻偏偏與公主長得像叹侄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子昨登,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354