[轉帖]keepalived工做原理和配置、使用

keepalived工做原理和配置、使用

https://www.iteye.com/blog/aoyouzi-2288124

 

keepalived是什麼

keepalived是集羣管理中保證集羣高可用的一個服務軟件,其功能相似於heartbeat,用來防止單點故障。html

keepalived工做原理

keepalived是以VRRP協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議linux

虛擬路由冗餘協議,能夠認爲是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組裏面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其餘機器的默認路由爲該vip),master會發組播,當backup收不到vrrp包時就認爲master宕掉了,這時就須要根據VRRP的優先級選舉一個backup當master。這樣的話就能夠保證路由器的高可用了。nginx

keepalived主要有三個模塊,分別是core、check和vrrp。core模塊爲keepalived的核心,負責主進程的啓動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各類檢查方式。vrrp模塊是來實現VRRP協議的。git

keepalived的配置文件

keepalived只有一個配置文件keepalived.conf,裏面主要包括如下幾個配置區域,分別是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。github

global_defs區域

主要是配置故障發生時的通知對象以及機器標識web

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 故障發生時給誰發郵件通知。算法

  • notification_email_from 通知郵件從哪一個地址發出。apache

  • smpt_server 通知郵件的smtp地址。後端

  • smtp_connect_timeout 鏈接smtp服務器的超時時間。瀏覽器

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

  • router_id 標識本節點的字條串,一般爲hostname,但不必定非得是hostname。故障發生時,郵件通知會用到。

static_ipaddress和static_routes區域

static_ipaddress和static_routes區域配置的是是本節點的IP和路由信息。若是你的機器上已經配置了IP和路由,那麼這兩個區域能夠不用配置。其實,通常狀況下你的機器都會有IP地址和路由信息的,所以不必再在這兩個區域配置。

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     ...}

以上分別表示啓動/關閉keepalived時在本機執行的以下命令:

# /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

注意: 請忽略這兩個區域,由於我堅信你的機器確定已經配置了IP和路由。

vrrp_script區域

用來作健康檢查的,當時檢查失敗時會將vrrp_instancepriority減小相應的值。

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

以上意思是若是script中的指令執行失敗,那麼相應的vrrp_instance的優先級會減小10個點。

vrrp_instance和vrrp_sync_group區域

vrrp_instance用來定義對外提供服務的VIP區域及其相關屬性。

vrrp_rsync_group用來定義vrrp_intance組,使得這個組內成員動做一致。舉個例子來講明一下其功能:

兩個vrrp_instance同屬於一個vrrp_rsync_group,那麼其中一個vrrp_instance發生故障切換時,另外一個vrrp_instance也會跟着切換(即便這個instance沒有發生故障)。

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 分別表示切換爲主/備/出錯時所執行的腳本。

  • notify 表示任何一狀態切換時都會調用該腳本,而且該腳本在以上三個腳本執行完成以後進行調用,keepalived會自動傳遞三個參數($1 = "GROUP"|"INSTANCE",$2 = name of group or instance,$3 = target state of transition(MASTER/BACKUP/FAULT))。

  • smtp_alert 表示是否開啓郵件通知(用全局區域的郵件設置來發通知)。

  • state 能夠是MASTER或BACKUP,不過當其餘節點keepalived啓動時會將priority比較大的節點選舉爲MASTER,所以該項其實沒有實質用途。

  • interface 節點固有IP(非VIP)的網卡,用來發VRRP包。

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

  • dont_track_primary 忽略VRRP網卡錯誤。(默認未設置)

  • track_interface 監控如下網卡,若是任何一個不通就會切換到FALT狀態。(可選項)

  • mcast_src_ip 修改vrrp組播包的源地址,默認源地址爲master的IP。(因爲是組播,所以即便修改了源地址,該master仍是能收到迴應的)

  • lvs_sync_daemon_interface 綁定lvs syncd的網卡。

  • garp_master_delay 當切爲主狀態後多久更新ARP緩存,默認5秒。

  • virtual_router_id 取值在0-255之間,用來區分多個instance的VRRP組播。

注意: 同一網段中virtual_router_id的值不能重複,不然會出錯,相關錯誤信息以下。  

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...

能夠用這條命令來查看該網絡中所存在的vrid:tcpdump -nn -i any net 224.0.0.0/8

  • priority 用來選舉master的,要成爲master,那麼這個選項的值最好高於其餘機器50個點,該項取值範圍是1-255(在此範圍以外會被識別成默認值100)。

  • advert_int 發VRRP包的時間間隔,即多久進行一次master選舉(能夠認爲是健康查檢時間間隔)。

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

  • virtual_ipaddress vip,不解釋了。

  • virtual_routes 虛擬路由,當IP漂過來以後須要添加的路由信息。

  • virtual_ipaddress_excluded 發送的VRRP包裏不包含的IP地址,爲減小回應VRRP包的個數。在網卡上綁定的IP地址比較多的時候用。

  • nopreempt 容許一個priority比較低的節點做爲master,即便有priority更高的節點啓動。

首先nopreemt必須在state爲BACKUP的節點上才生效(由於是BACKUP節點決定是否來成爲MASTER的),其次要實現相似於關閉auto failback的功能須要將全部節點的state都設置爲BACKUP,或者將master節點的priority設置的比BACKUP低。我我的推薦使用將全部節點的state都設置成BACKUP而且都加上nopreempt選項,這樣就完成了關於autofailback功能,當想手動將某節點切換爲MASTER時只需去掉該節點的nopreempt選項而且將priority改的比其餘節點大,而後從新加載配置文件便可(等MASTER切過來以後再將配置文件改回去再reload一下)。

當使用track_script時能夠不用加nopreempt,只須要加上preempt_delay 5,這裏的間隔時間要大於vrrp_script中定義的時長。

  • preempt_delay master啓動多久以後進行接管資源(VIP/Route信息等),並提是沒有nopreempt選項。

virtual_server_group和virtual_server區域

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 延遲輪詢時間(單位秒)。

  • lb_algo 後端調試算法(load balancing algorithm)。

  • lb_kind LVS調度類型NAT/DR/TUN

  • virtualhost 用來給HTTP_GET和SSL_GET配置請求header的。

  • sorry_server 當全部real server宕掉時,sorry server頂替。

  • real_server 真正提供服務的服務器。

  • weight 權重。

  • notify_up/down 當real server宕掉或啓動時執行的腳本。

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

  • path 請求real serserver上的路徑。

  • digest/status_code 分別表示用genhash算出的結果和http狀態碼。

  • connect_port 健康檢查,若是端口通則認爲服務器正常。

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

其餘選項暫時不做說明。

keepalived主從切換

主從切換比較讓人蛋疼,須要將backup配置文件的priority選項的值調整的比master高50個點,而後reload配置文件就能夠切換了。當時你也能夠將master的keepalived中止,這樣也能夠進行主從切換。

keepalived僅作HA時的配置

請看該文檔同級目錄下的配置文件示例。

說明:
10.210.214.113 爲keepalived的備機,其配置文件爲113.keepalived.conf
10.210.214.163 爲keepalived的主機,其配置文件爲163.keepalived.conf
10.210.214.253 爲Virtual IP,即提供服務的內網IP地址,在網卡eth0上面
192.168.1.11 爲模擬的提供服務的公網IP地址,在網卡eth1上面

用tcpdump命令來捕獲的結果以下:

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結合使用時通常還會用到一個工具ipvsadm,用來查看相關VS相關狀態,關於ipvsadm的用法能夠參考man手冊。

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  

注意:

當使用LVS+DR+Keepalived配置時,須要在real server上添加一條iptables規則(其中dport根據狀況添加或缺省):

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

當使用LVS+NAT+Keepalived配置時,須要將real server的默認路由配置成Director的VIP10.67.15.94,必須確保client的請求是經過10.67.15.94到達real server的。

安裝keepalived

從keepalived官網下載合適的版本,解壓並執行以下命令完成安裝。

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

你也能夠打成RPM包,而後安裝。

說明

咱們用到的HA場景以下: 兩臺主機host113和host163,內網IP在eth1網卡上,分別是10.210.214.113和10.210.214.163,VIP爲公網IP在eth0上,IP地址是202.102.152.253,網關爲202.102.152.1。當VIP在host113上提供服務時,host113上的默認路由爲202.102.152.1,提供服務的端口爲202.102.152.253:443。host113發生故障須要將VIP及服務切回到host163上的時候,須要如下幾步,第一將VIP接管過來,第二添加默認路由202.102.152.1,第三啓動在端口202.102.152.253:443上的服務。

如此一來,keepalived須要另外的腳原本完成添加默認路由和啓動服務工做,這點和heartbeat中的resources是相同的。目前我進行了測試,發現keepalived速度要比heartbeat快,也就是說效率比heartbeat高。而且,最重要的一點,keepalived支持多個backup。

不要問我爲什麼有以上需求。要爲兩個不一樣的域名提供https服務,因爲SSL證書問題,必須有兩個公網IP地址分別綁定443端口。

固然,經過SNI也能夠實現一個公網IP綁定443端口來爲多個域名提供https服務,可是這須要瀏覽器支持(M$的IE瀏覽器不支持)。(nginx/apache

 

===========================================

一般說的雙機熱備是指兩臺機器都在運行,但並非兩臺機器都同時在提供服務。
當提供服務的一臺出現故障的時候,另一臺會立刻自動接管而且提供服務,並且切換的時間很是短。
下面來以keepalived結合tomcat來實現一個web服務器的雙機熱備。
keepalived的工做原理是VRRP(Virtual Router Redundancy Protocol)虛擬路由冗餘協議。
在VRRP中有兩組重要的概念:VRRP路由器和虛擬路由器,主控路由器和備份路由器。
VRRP路由器是指運行VRRP的路由器,是物理實體,虛擬路由器是指VRRP協議建立的,是邏輯概念。一組VRRP路由器協同工做,共同構成一臺虛擬路由器。 Vrrp中存在着一種選舉機制,用以選出提供服務的路由即主控路由,其餘的則成了備份路由。當主控路由失效後,備份路由中會從新選舉出一個主控路由,來繼續工做,來保障不間斷服務。
咱們在本文中的測試環境以下
兩臺物理服務器和一個虛擬服務器(vip):
master:redhat 2.6.18-53.el5  192.168.8.4
backup: redhat 2.6.18-53.el5  192.168.8.6
vip: 192.168.8.100
測試環境的網絡topology圖以下:

節點A 192.168.8.4 (主節點), 節點B 192.168.8.6(備用節點),虛擬IP(對外提供服務的IP 192.168.8.100)
在這種模式下,虛擬IP在某時刻只能屬於某一個節點,另外一個節點做爲備用節點存在。
當主節點不可用時,備用節點接管虛擬IP(即虛擬IP漂移至節點B),提供正常服務。
keepalived的原理能夠這樣簡單理解:
keepalived安裝在兩臺物理服務器上,並相互監控對方是否在正常運行。
當節點A正常的時候:節點A上的keepalived會將下面的信息廣播出去:
192.168.8.100 這個IP對應的MAC地址爲節點A網卡的MAC地址
圖中的其它電腦如客戶端和NodeB會更新本身的ARP表,對應192.168.8.100的MAC地址=節點A網卡的MAC地址。
當節點A發生故障的時候,節點B上的keepalived會檢測到,而且將下面的信息廣播出去:
192.168.8.100 這個IP對應的MAC地址爲節點B網卡的MAC地址
圖中的其它電腦如客戶端會更新本身的ARP表,對應192.168.8.100的MAC地址=節點B網卡的MAC地址。

1,在主備機器上安裝keepalived,
步驟以下:下載keepalived-1.1.15.tar.gz,而後解壓安裝
#tar zxvf keepalived-1.1.15.tar.gz
#cd keepalived-1.1.15
#./configure
#make
#make install
2,配置keepalived
配置中的state MASTER決定了節點爲主節點
priority決定了優先級,好比在有多個備用節點的時候,主節點故障後優先級值大的接管。
主節點的配置以下:

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. global_defs {  
  2.     router_id NodeA  
  3. }  
  4. vrrp_instance VI_1 {  
  5.     state MASTER    #設置爲主服務器  
  6.     interface eth0  #監測網絡接口  
  7.     virtual_router_id 51  #主、備必須同樣  
  8.     priority 100   #(主、備機取不一樣的優先級,主機值較大,備份機值較小,值越大優先級越高)  
  9.     advert_int 1   #VRRP Multicast廣播週期秒數  
  10.     authentication {  
  11.     auth_type PASS  #VRRP認證方式,主備必須一致  
  12.     auth_pass 1111   #(密碼)  
  13. }  
  14. virtual_ipaddress {  
  15.     192.168.8.100/24  #VRRP HA虛擬地址  
  16. }  

備用節點的配置以下:

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. global_defs {  
  2.     router_id NodeB  
  3. }  
  4. vrrp_instance VI_1 {  
  5.     state BACKUP    #設置爲主服務器  
  6.     interface eth0  #監測網絡接口  
  7.     virtual_router_id 51  #主、備必須同樣  
  8.     priority 90   #(主、備機取不一樣的優先級,主機值較大,備份機值較小,值越大優先級越高)  
  9.     advert_int 1   #VRRP Multicast廣播週期秒數  
  10.     authentication {  
  11.     auth_type PASS  #VRRP認證方式,主備必須一致  
  12.     auth_pass 1111   #(密碼)  
  13. }  
  14. virtual_ipaddress {  
  15.     192.168.8.100/24  #VRRP HA虛擬地址  
  16. }  

3,啓動keepalived:
keepalived -D -f /usr/local/etc/keepalived/keepalived.conf
查看log消息:
tail -f /var/log/messages
啓動主節點A後的日誌爲:會廣播ARP消息

[html]  view plain  copy
 

  1. [root@srv4 ~]# tail -f /var/log/messages  
  2. Sep 20 01:45:29 srv4 Keepalived_vrrp: Configuration is using : 34546 Bytes  
  3. Sep 20 01:45:29 srv4 Keepalived_vrrp: VRRP sockpool: [ifindex(2), proto(112), fd(8,9)]  
  4. Sep 20 01:45:30 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE  
  5. Sep 20 01:45:31 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE  
  6. Sep 20 01:45:31 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.  
  7. Sep 20 01:45:31 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100  
  8. Sep 20 01:45:31 srv4 Keepalived_vrrp: Netlink reflector reports IP 192.168.8.100 added  
  9. Sep 20 01:45:31 srv4 Keepalived_healthcheckers: Netlink reflector reports IP 192.168.8.100 added  
  10. Sep 20 01:45:31 srv4 avahi-daemon[4029]: Registering new address record for 192.168.8.100 on eth0.  
  11. Sep 20 01:45:36 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100  

經過ip a 命令能夠看到192.168.8.100/24綁定到了eth0上

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. [root@srv4 bin]# ip a  
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue   
  3.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  
  4.     inet 127.0.0.1/8 scope host lo  
  5.     inet6 ::1/128 scope host   
  6.        valid_lft forever preferred_lft forever  
  7. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000  
  8.     link/ether 00:0c:29:50:2d:9d brd ff:ff:ff:ff:ff:ff  
  9.     inet 192.168.8.4/24 brd 192.168.8.255 scope global eth0  
  10.     inet 192.168.8.100/24 scope global secondary eth0  
  11.     inet6 fe80::20c:29ff:fe50:2d9d/64 scope link   
  12.        valid_lft forever preferred_lft forever  

啓動備用節點B後的日誌爲:

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. Sep 20 01:47:31 hadoopsrv Keepalived_vrrp: Configuration is using : 34262 Bytes  
  2. Sep 20 01:47:31 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE  
  3. Sep 20 01:47:31 hadoopsrv Keepalived_vrrp: VRRP sockpool: [ifindex(2), proto(112), fd(7,8)]  
  4. Sep 20 01:47:31 hadoopsrv Keepalived: Starting VRRP child process, pid=20567  


4,在兩臺機器上安裝tomcat,安裝步驟省略
安裝完成後在節點A的機器上建立一個html文件內容以下

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. this is the test page  
  2. <br>  
  3. from server 192.168.8.4  

經過下面的url驗證可以正常訪問
http://192.168.8.4:8080/test/test.html

安裝完成後在節點B的機器上建立一個html文件內容以下

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. this is the test page  
  2. <br>  
  3. from server 192.168.8.6  

經過下面的url驗證可以正常訪問
http://192.168.8.6:8080/test/test.html
在主節點,節點A正常的時候經過下面的url訪問
192.168.8.100:8080/test/test.html
返回的內容應該爲主節點上的html

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. this is the test page  
  2. <br>  
  3. from server 192.168.8.4  

將節點A的keepalived中止: killall keepalived
經過下面的url訪問
192.168.8.100:8080/test/test.html
返回的內容應該爲備用節點上的內容

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. this is the test page  
  2. <br>  
  3. from server 192.168.8.6  

同時查看節點B的日誌:發現節點B轉爲主節點而且會廣播ARP消息

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. Sep 20 01:55:44 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE  
  2. Sep 20 01:55:45 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE  
  3. Sep 20 01:55:45 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.  
  4. Sep 20 01:55:45 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100  
  5. Sep 20 01:55:45 hadoopsrv avahi-daemon[3769]: Registering new address record for 192.168.8.100 on eth0.  
  6. Sep 20 01:55:50 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100  


本文的目的主要是演示keepalived實現雙機熱備的功能和過程。
對於應用自己(tomcat)發生錯誤,以及"腦裂"等問題是不能解決的

 

 

http://blog.csdn.net/kkdelta/article/details/39433137

http://outofmemory.cn/wiki/keepalived-configuration

相關文章
相關標籤/搜索