05.24 Keepalived高可用軟件

第一章 Keepalived簡介

Keepalived軟件起初是專爲LVS負載均衡軟件設計的,用來管理並監控LVS集羣系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟件外,還可以作爲其它服務(例如nginx、Haproxy、MySQL等)的高可用解決方案軟件。

Keepalived軟件主要是通過VRRP協議實現高可用功能的,VRRP是Virtual Router Redundancy Protocol(虛擬路由器冗餘協議)的縮寫,VRRP出現的目的就是爲了解決靜態路由單點故障問題的,它能夠保證當別的節點宕機時,整個網絡可以不間斷的運行。所以Keepalived一方面具有配置管理LVS的功能,同時還具有LVS下面節點進行健康檢查的功能,另一方面也可實現系統網絡服務的高可用功能。


第二章 Keepalived服務三個重要功能

1. 管理LVS負載均衡軟件
早期的LVS軟件,需要通過命令行或腳本實現管理,並且沒有針對LVS節點的健康檢查功能。爲了解LVS的這些使用不便的問題, Keepalived就誕生了,可以說Keepalived軟件起初是專爲解決LVS的問題而誕生的。因此Keepalived和LVS的感情很深,可以緊密的結合,愉快的工作。Keepalived可以通過讀取自身的配置文件實現通過更底層的接口直接管理LVS的配置以及控制服務的啓動、停止等功能,這使得LVS的應用更加簡單方便了。

2. 實現對LVS集羣節點健康檢查功能(healthcheck)
Keepalived可以通過自身的keepalived.conf文件裏配置LVS的節點IP和相關參數實現對LVS的直接管理;除此之外,當LVS集羣中的某一個甚至幾個節點服務器同時發生故障無法提供服務時,Keepalived服務會自動將失效的節點服務器從LVS的正常轉發隊列中清楚出去,並轉換到別的正常節點服務器上,從而保證最終用戶的訪問不受影響;當故障的節點服務器被修復以後,Keepalived服務又會自動地把他們加入到正常轉發隊列中,對客戶提供服務。

3. 作爲系統服務的高可用功能(failover)


第三章 VRRP工作原理

  1. VRRP協議,全稱Virtual Router RedundancyProtocol,中文名爲虛擬路由冗餘協議,VRRP的出現是爲了解決靜態路由點單故障。
  2. VRRP是通過一種競選協議機制來將路由任務交給某臺VRRP路由器的。
  3. VRRP是用過IP多播的方式(默認多播地址224.0.0.18)實現高可用對之間通信的。
  4. 工作時主節點發包,備節點接包,當備節點接收不到主節點發的數據包的時候,就啓動接管程序接管主節點的資源。備節點可以有多個,通過優先級競選,但一般Keepalived系統運維工作中都是一對。
  5. VRRP使用了加密協議加密數據,但Keepalived官方目前還是推薦用明文的方式配置認證類型和密碼。

第四章 安裝Keepalived環境

1. 使用yum源下載

yum install keepalived -y
! 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 LVS_DEVEL
}

vrrp_instance VI_1 {                             ##主  backup備
    state MASTER                                 ##主  backup備
    interface ens33                              ##組名 家庭名
    virtual_router_id 51                         ##weight 相當於權重 主大於備 一般爲100
    priority 150                                 ##發送間隔時間 1s
    advert_int 1
    authentication {
        auth_type PASS                           ##認證類型密碼
        auth_pass 1111                           ##密碼
    }
    virtual_ipaddress { 
        10.0.0.1/24 dev ens33 label ens33:0      ##vip地址 虛擬IP地址
    }
}


第五章 LB01/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.3/24 dev eth0 label eth0:1  
    }
}

第六章 LB02/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL1
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.3/24 dev eth0 label eth0:1  
    }
}

第七章 導致腦裂發生的原因

  1. 高可用服務器對之間心跳線鏈路故障,導致無法正常通信,例如1) 心跳線壞了(包括斷了,老化),2) 網卡及相關驅動壞了,IP配置及衝突問題(網卡直連),3) 心跳線間連接的設備故障(網卡交換機等)。
  2. 高可用服務器對上開啓了iptables防火牆阻擋了心跳消息傳輸。
  3. 高可用服務器對上心跳網卡地址等信息配置不正確,導致發送心跳失敗。
  4. 其他服務配置不當等原因,如心跳方式不同,心跳廣播衝突、軟件BUG等。
    提示:keepalived配置裏統一VRRPVirtual_router_id參數兩端配置不一致,也會導致腦裂問題發生。

第八章 配置文件LB01LB02 nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;


    upstream server_pools { 
         server 10.0.0.7:80 weight=4 max_fails=3 fail_timeout=30s;
         server 10.0.0.8:80 weight=4 max_fails=3 fail_timeout=30s;
#         server 10.0.0.9:80 weight=4 max_fails=3 fail_timeout=30s;
    }       

    server { 
       listen       80;
       server_name  www.etiantian.org;
       location / {
        proxy_pass http://server_pools; 
        proxy_set_header  Host $host;
        proxy_set_header  X-Forwarded-For $remote_addr; 
       }
    }
    server { 
       listen       80;
       server_name  bbs.etiantian.org;
       location / {
        proxy_pass http://server_pools; 
        proxy_set_header  Host $host;
        proxy_set_header  X-Forwarded-For $remote_addr; 
       }
    }
}

第九章 web01 nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    server {
        listen       80;
        server_name  www.etiantian.org;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
        access_log  logs/access_www.log  main;
    }
        server {
        listen       80;
        server_name  bbs.etiantian.org;
        location / {
            root   html/bbs;
            index  index.html index.htm;
        }
        access_log  logs/access_bbs.log  main;
    }
}

第十章 web02 nginx.conf

  worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    server {
        listen       80;
        server_name  www.etiantian.org;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
        access_log  logs/access_www.log  main;
    }
        server {
        listen       80;
        server_name  bbs.etiantian.org;
        location / {
            root   html/bbs;
            index  index.html index.htm;
        }
        access_log  logs/access_bbs.log  main;
    }
}

第十一章 keepalived雙主模式配置文件

1. LB01配置keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.3/24 dev eth0 label eth0:1  
    }
}


vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.4/24 dev eth0 label eth0:2  
    }
}

2. LB02 配置keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL1
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.3/24 dev eth0 label eth0:1  
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.4/24 dev eth0 label eth0:2
    }
}

第十二章 監聽本機沒有的網卡ip 修改內核參數

echo 'net.ipv4.ip_nonlocal_bind = 1' >> /etc/sysctl.conf
sysctl -p

第十三章 執行監控腳本nginx關閉則停止keepalived

cat /server/scripts/chk_web_proxy.sh
 if [ `ss -lntup|grep nginx|wc -l` -ne 1 ];then
    /etc/init.d/keepalived stop
 fi

chmod +x /server/scripts/chk_web_proxy.sh
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
}

vrrp_script chk_web_proxy {                  #<==定義vrrp腳本,檢測HTTP端口。
script "/server/script/chk_web_proxy.sh"    #<==執行腳本,當nginx服務有問題,就停掉keepalived服務。
interval 2                                   #<==間隔2秒
weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.3/24 dev eth0 label eth0:1  
    }
    track_script {
    chk_web_proxy  #<==觸發檢查
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章