乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      keepalived工作原理和配置說明

       浸心閣 2015-12-28

      keepalived是什么

      keepalived是集群管理中保證集群高可用的一個(gè)服務(wù)軟件,其功能類似于heartbeat,用來防止單點(diǎn)故障。

      keepalived工作原理

      keepalived是以VRRP協(xié)議為實(shí)現(xiàn)基礎(chǔ)的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協(xié)議。

      虛擬路由冗余協(xié)議,可以認(rèn)為是實(shí)現(xiàn)路由器高可用的協(xié)議,即將N臺(tái)提供相同功能的路由器組成一個(gè)路由器組,這個(gè)組里面有一個(gè)master和多個(gè)backup,master上面有一個(gè)對(duì)外提供服務(wù)的vip(該路由器所在局域網(wǎng)內(nèi)其他機(jī)器的默認(rèn)路由為該vip),master會(huì)發(fā)組播,當(dāng)backup收不到vrrp包時(shí)就認(rèn)為master宕掉了,這時(shí)就需要根據(jù)VRRP的優(yōu)先級(jí)選舉一個(gè)backup當(dāng)master。這樣的話就可以保證路由器的高可用了。

      keepalived主要有三個(gè)模塊,分別是core、check和vrrp。core模塊為keepalived的核心,負(fù)責(zé)主進(jìn)程的啟動(dòng)、維護(hù)以及全局配置文件的加載和解析。check負(fù)責(zé)健康檢查,包括常見的各種檢查方式。vrrp模塊是來實(shí)現(xiàn)VRRP協(xié)議的。

      keepalived的配置文件

      keepalived只有一個(gè)配置文件keepalived.conf,里面主要包括以下幾個(gè)配置區(qū)域,分別是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。

      global_defs區(qū)域

      主要是配置故障發(fā)生時(shí)的通知對(duì)象以及機(jī)器標(biāo)識(shí)

      global_defs {
          notification_email {
              a@abc.com
              b@abc.com
              ...
          }
          notification_email_from alert@abc.com
          smtp_server smtp.abc.com
          smtp_connect_timeout 30
          enable_traps
          router_id host163
      }
      • notification_email 故障發(fā)生時(shí)給誰發(fā)郵件通知。

      • notification_email_from 通知郵件從哪個(gè)地址發(fā)出。

      • smpt_server 通知郵件的smtp地址。

      • smtp_connect_timeout 連接smtp服務(wù)器的超時(shí)時(shí)間。

      • enable_traps 開啟SNMP陷阱(Simple Network Management Protocol)。

      • router_id 標(biāo)識(shí)本節(jié)點(diǎn)的字條串,通常為hostname,但不一定非得是hostname。故障發(fā)生時(shí),郵件通知會(huì)用到。

      static_ipaddress和static_routes區(qū)域

      static_ipaddress和static_routes區(qū)域配置的是是本節(jié)點(diǎn)的IP和路由信息。如果你的機(jī)器上已經(jīng)配置了IP和路由,那么這兩個(gè)區(qū)域可以不用配置。其實(shí),一般情況下你的機(jī)器都會(huì)有IP地址和路由信息的,因此沒必要再在這兩個(gè)區(qū)域配置。

      static_ipaddress {
          10.210.214.163/24 brd 10.210.214.255 dev eth0
          ...
      }
      static_routes {
          10.0.0.0/8 via 10.210.214.1 dev eth0
          ...
      }

      以上分別表示啟動(dòng)/關(guān)閉keepalived時(shí)在本機(jī)執(zhí)行的如下命令:

      # /sbin/ip addr add 10.210.214.163/24 brd 10.210.214.255 dev eth0
      # /sbin/ip route add 10.0.0.0/8 via 10.210.214.1 dev eth0
      # /sbin/ip addr del 10.210.214.163/24 brd 10.210.214.255 dev eth0
      # /sbin/ip route del 10.0.0.0/8 via 10.210.214.1 dev eth0

      注意: 請(qǐng)忽略這兩個(gè)區(qū)域,因?yàn)槲覉?jiān)信你的機(jī)器肯定已經(jīng)配置了IP和路由。

      vrrp_script區(qū)域

      用來做健康檢查的,當(dāng)時(shí)檢查失敗時(shí)會(huì)將vrrp_instancepriority減少相應(yīng)的值。

      vrrp_script chk_http_port {
          script "</dev/tcp/127.0.0.1/80"
          interval 1
          weight -10
      }

      以上意思是如果script中的指令執(zhí)行失敗,那么相應(yīng)的vrrp_instance的優(yōu)先級(jí)會(huì)減少10個(gè)點(diǎn)。

      vrrp_instance和vrrp_sync_group區(qū)域

      vrrp_instance用來定義對(duì)外提供服務(wù)的VIP區(qū)域及其相關(guān)屬性。

      vrrp_rsync_group用來定義vrrp_intance組,使得這個(gè)組內(nèi)成員動(dòng)作一致。舉個(gè)例子來說明一下其功能:

      兩個(gè)vrrp_instance同屬于一個(gè)vrrp_rsync_group,那么其中一個(gè)vrrp_instance發(fā)生故障切換時(shí),另一個(gè)vrrp_instance也會(huì)跟著切換(即使這個(gè)instance沒有發(fā)生故障)。

      vrrp_sync_group VG_1 {
          group {
              inside_network   # name of vrrp_instance (below)
              outside_network  # One for each moveable IP.
              ...
          }
          notify_master /path/to_master.sh
          notify_backup /path/to_backup.sh
          notify_fault "/path/fault.sh VG_1"
          notify /path/notify.sh
          smtp_alert
      }
      vrrp_instance VI_1 {
          state MASTER
          interface eth0
          use_vmac <VMAC_INTERFACE>
          dont_track_primary
          track_interface {
              eth0
              eth1
          }
          mcast_src_ip <IPADDR>
          lvs_sync_daemon_interface eth1
          garp_master_delay 10
          virtual_router_id 1
          priority 100
          advert_int 1
          authentication {
              auth_type PASS
              auth_pass 12345678
          }
          virtual_ipaddress {
              10.210.214.253/24 brd 10.210.214.255 dev eth0
              192.168.1.11/24 brd 192.168.1.255 dev eth1
          }
          virtual_routes {
              172.16.0.0/12 via 10.210.214.1
              192.168.1.0/24 via 192.168.1.1 dev eth1
              default via 202.102.152.1
          }
          track_script {
              chk_http_port
          }
          nopreempt
          preempt_delay 300
          debug
          notify_master <STRING>|<QUOTED-STRING>
          notify_backup <STRING>|<QUOTED-STRING>
          notify_fault <STRING>|<QUOTED-STRING>
          notify <STRING>|<QUOTED-STRING>
          smtp_alert
      }
      • notify_master/backup/fault 分別表示切換為主/備/出錯(cuò)時(shí)所執(zhí)行的腳本。

      • notify 表示任何一狀態(tài)切換時(shí)都會(huì)調(diào)用該腳本,并且該腳本在以上三個(gè)腳本執(zhí)行完成之后進(jìn)行調(diào)用,keepalived會(huì)自動(dòng)傳遞三個(gè)參數(shù)($1 = "GROUP"|"INSTANCE",$2 = name of group or instance,$3 = target state of transition(MASTER/BACKUP/FAULT))。

      • smtp_alert 表示是否開啟郵件通知(用全局區(qū)域的郵件設(shè)置來發(fā)通知)。

      • state 可以是MASTER或BACKUP,不過當(dāng)其他節(jié)點(diǎn)keepalived啟動(dòng)時(shí)會(huì)將priority比較大的節(jié)點(diǎn)選舉為MASTER,因此該項(xiàng)其實(shí)沒有實(shí)質(zhì)用途。

      • interface 節(jié)點(diǎn)固有IP(非VIP)的網(wǎng)卡,用來發(fā)VRRP包。

      • use_vmac 是否使用VRRP的虛擬MAC地址。

      • dont_track_primary 忽略VRRP網(wǎng)卡錯(cuò)誤。(默認(rèn)未設(shè)置)

      • track_interface 監(jiān)控以下網(wǎng)卡,如果任何一個(gè)不通就會(huì)切換到FALT狀態(tài)。(可選項(xiàng))

      • mcast_src_ip 修改vrrp組播包的源地址,默認(rèn)源地址為master的IP。(由于是組播,因此即使修改了源地址,該master還是能收到回應(yīng)的)

      • lvs_sync_daemon_interface 綁定lvs syncd的網(wǎng)卡。

      • garp_master_delay 當(dāng)切為主狀態(tài)后多久更新ARP緩存,默認(rèn)5秒。

      • virtual_router_id 取值在0-255之間,用來區(qū)分多個(gè)instance的VRRP組播。

      注意: 同一網(wǎng)段中virtual_router_id的值不能重復(fù),否則會(huì)出錯(cuò),相關(guān)錯(cuò)誤信息如下。  

      Keepalived_vrrp[27120]: ip address associated with VRID not present in received packet :
      one or more VIP associated with VRID mismatch actual MASTER advert
      bogus VRRP packet received on eth1 !!!
      receive an invalid ip number count associated with VRID!
      VRRP_Instance(xxx) ignoring received advertisment...

      可以用這條命令來查看該網(wǎng)絡(luò)中所存在的vrid:tcpdump -nn -i any net 224.0.0.0/8

      • priority 用來選舉master的,要成為master,那么這個(gè)選項(xiàng)的值最好高于其他機(jī)器50個(gè)點(diǎn),該項(xiàng)取值范圍是1-255(在此范圍之外會(huì)被識(shí)別成默認(rèn)值100)。

      • advert_int 發(fā)VRRP包的時(shí)間間隔,即多久進(jìn)行一次master選舉(可以認(rèn)為是健康查檢時(shí)間間隔)。

      • authentication 認(rèn)證區(qū)域,認(rèn)證類型有PASS和HA(IPSEC),推薦使用PASS(密碼只識(shí)別前8位)。

      • virtual_ipaddress vip,不解釋了。

      • virtual_routes 虛擬路由,當(dāng)IP漂過來之后需要添加的路由信息。

      • virtual_ipaddress_excluded 發(fā)送的VRRP包里不包含的IP地址,為減少回應(yīng)VRRP包的個(gè)數(shù)。在網(wǎng)卡上綁定的IP地址比較多的時(shí)候用。

      • nopreempt 允許一個(gè)priority比較低的節(jié)點(diǎn)作為master,即使有priority更高的節(jié)點(diǎn)啟動(dòng)。

      首先nopreemt必須在state為BACKUP的節(jié)點(diǎn)上才生效(因?yàn)槭荁ACKUP節(jié)點(diǎn)決定是否來成為MASTER的),其次要實(shí)現(xiàn)類似于關(guān)閉auto failback的功能需要將所有節(jié)點(diǎn)的state都設(shè)置為BACKUP,或者將master節(jié)點(diǎn)的priority設(shè)置的比BACKUP低。我個(gè)人推薦使用將所有節(jié)點(diǎn)的state都設(shè)置成BACKUP并且都加上nopreempt選項(xiàng),這樣就完成了關(guān)于autofailback功能,當(dāng)想手動(dòng)將某節(jié)點(diǎn)切換為MASTER時(shí)只需去掉該節(jié)點(diǎn)的nopreempt選項(xiàng)并且將priority改的比其他節(jié)點(diǎn)大,然后重新加載配置文件即可(等MASTER切過來之后再將配置文件改回去再reload一下)。

      當(dāng)使用track_script時(shí)可以不用加nopreempt,只需要加上preempt_delay 5,這里的間隔時(shí)間要大于vrrp_script中定義的時(shí)長。

      • preempt_delay master啟動(dòng)多久之后進(jìn)行接管資源(VIP/Route信息等),并提是沒有nopreempt選項(xiàng)。

      virtual_server_group和virtual_server區(qū)域

      virtual_server_group一般在超大型的LVS中用到,一般LVS用不過這東西,因此不多說。

      virtual_server IP Port {
          delay_loop <INT>
          lb_algo rr|wrr|lc|wlc|lblc|sh|dh
          lb_kind NAT|DR|TUN
          persistence_timeout <INT>
          persistence_granularity <NETMASK>
          protocol TCP
          ha_suspend
          virtualhost <STRING>
          alpha
          omega
          quorum <INT>
          hysteresis <INT>
          quorum_up <STRING>|<QUOTED-STRING>
          quorum_down <STRING>|<QUOTED-STRING>
          sorry_server <IPADDR> <PORT>
          real_server <IPADDR> <PORT> {
              weight <INT>
              inhibit_on_failure
              notify_up <STRING>|<QUOTED-STRING>
              notify_down <STRING>|<QUOTED-STRING>
              # HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
              HTTP_GET|SSL_GET {
                  url {
                      path <STRING>
                      # Digest computed with genhash
                      digest <STRING>
                      status_code <INT>
                  }
                  connect_port <PORT>
                  connect_timeout <INT>
                  nb_get_retry <INT>
                  delay_before_retry <INT>
              }
          }
      }
      • delay_loop 延遲輪詢時(shí)間(單位秒)。

      • lb_algo 后端調(diào)試算法(load balancing algorithm)。

      • lb_kind LVS調(diào)度類型NAT/DR/TUN。

      • virtualhost 用來給HTTP_GET和SSL_GET配置請(qǐng)求header的。

      • sorry_server 當(dāng)所有real server宕掉時(shí),sorry server頂替。

      • real_server 真正提供服務(wù)的服務(wù)器。

      • weight 權(quán)重。

      • notify_up/down 當(dāng)real server宕掉或啟動(dòng)時(shí)執(zhí)行的腳本。

      • 健康檢查的方式,N多種方式。

      • path 請(qǐng)求real serserver上的路徑。

      • digest/status_code 分別表示用genhash算出的結(jié)果和http狀態(tài)碼。

      • connect_port 健康檢查,如果端口通則認(rèn)為服務(wù)器正常。

      • connect_timeout,nb_get_retry,delay_before_retry分別表示超時(shí)時(shí)長、重試次數(shù),下次重試的時(shí)間延遲。

      其他選項(xiàng)暫時(shí)不作說明。

      keepalived主從切換

      主從切換比較讓人蛋疼,需要將backup配置文件的priority選項(xiàng)的值調(diào)整的比master高50個(gè)點(diǎn),然后reload配置文件就可以切換了。當(dāng)時(shí)你也可以將master的keepalived停止,這樣也可以進(jìn)行主從切換。

      keepalived僅做HA時(shí)的配置

      請(qǐng)看該文檔同級(jí)目錄下的配置文件示例。

      說明:
      10.210.214.113 為keepalived的備機(jī),其配置文件為113.keepalived.conf
      10.210.214.163 為keepalived的主機(jī),其配置文件為163.keepalived.conf
      10.210.214.253 為Virtual IP,即提供服務(wù)的內(nèi)網(wǎng)IP地址,在網(wǎng)卡eth0上面
      192.168.1.11 為模擬的提供服務(wù)的公網(wǎng)IP地址,在網(wǎng)卡eth1上面

      用tcpdump命令來捕獲的結(jié)果如下:

      17:20:07.919419 IP 10.210.214.163 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 200, authtype simple, intvl 1s, length 20

      LVS+Keepalived配置

      注Keepalived與LVS結(jié)合使用時(shí)一般還會(huì)用到一個(gè)工具ipvsadm,用來查看相關(guān)VS相關(guān)狀態(tài),關(guān)于ipvsadm的用法可以參考man手冊(cè)。

      10.67.15.95為keepalived master,VIP為10.67.15.94,配置文件為95-lvs-keepalived.conf
      10.67.15.96為keepalived master,VIP為10.67.15.94,配置文件為96-lvs-keepalived.conf
      10.67.15.195為real server  

      注意:

      當(dāng)使用LVS+DR+Keepalived配置時(shí),需要在real server上添加一條iptables規(guī)則(其中dport根據(jù)情況添加或缺省):

      # iptables -t nat -A PREROUTING -p tcp -d 10.67.15.94 --dport 80 -j REDIRECT

      當(dāng)使用LVS+NAT+Keepalived配置時(shí),需要將real server的默認(rèn)路由配置成Director的VIP10.67.15.94,必須確保client的請(qǐng)求是通過10.67.15.94到達(dá)real server的。

      安裝keepalived

      從keepalived官網(wǎng)下載合適的版本,解壓并執(zhí)行如下命令完成安裝。

      # cd keepalived-xxx
      # ./configure --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --mandir=/usr/share
      # make && make install

      你也可以打成RPM包,然后安裝。

      說明

      我們用到的HA場(chǎng)景如下: 兩臺(tái)主機(jī)host113和host163,內(nèi)網(wǎng)IP在eth1網(wǎng)卡上,分別是10.210.214.113和10.210.214.163,VIP為公網(wǎng)IP在eth0上,IP地址是202.102.152.253,網(wǎng)關(guān)為202.102.152.1。當(dāng)VIP在host113上提供服務(wù)時(shí),host113上的默認(rèn)路由為202.102.152.1,提供服務(wù)的端口為202.102.152.253:443。host113發(fā)生故障需要將VIP及服務(wù)切回到host163上的時(shí)候,需要以下幾步,第一將VIP接管過來,第二添加默認(rèn)路由202.102.152.1,第三啟動(dòng)在端口202.102.152.253:443上的服務(wù)。

      如此一來,keepalived需要另外的腳本來完成添加默認(rèn)路由和啟動(dòng)服務(wù)工作,這點(diǎn)和heartbeat中的resources是相同的。目前我進(jìn)行了測(cè)試,發(fā)現(xiàn)keepalived速度要比heartbeat快,也就是說效率比heartbeat高。并且,最重要的一點(diǎn),keepalived支持多個(gè)backup。

      不要問我為何有以上需求。要為兩個(gè)不同的域名提供https服務(wù),由于SSL證書問題,必須有兩個(gè)公網(wǎng)IP地址分別綁定443端口。

      當(dāng)然,通過SNI也可以實(shí)現(xiàn)一個(gè)公網(wǎng)IP綁定443端口來為多個(gè)域名提供https服務(wù),但是這需要瀏覽器支持(M$的IE瀏覽器不支持)。(nginx/apache

      吐槽

      keepalived的主從切換比較讓人蛋疼,需要修改配置文件或停止一方的運(yùn)行。但是由于keepalived是通過vrrp協(xié)議來實(shí)現(xiàn)failover(故障轉(zhuǎn)移)的,因此也決定了手動(dòng)主從切換的不便。

      keepalived的文檔也很舊了,一直都找不到合適的文檔,之前我就一直忽略了vrrp_script這個(gè)區(qū)域,導(dǎo)致很多事情想不通。

      另外,我發(fā)現(xiàn)我越來越喜歡keepalived了。。。

      參考資料

      1.http://www./
      2.http://www./LVS-NAT-Keepalived-HOWTO.html

      推薦閱讀:

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多