利用keepalived搭建高可用集群

在一個系統中,常常存在一些單點服務器,為了提高整個系統的穩定性,我們常常需要對這些單點服務做高可用配置;keepalived即為一種常用的高可用配置服務;

Keepalived的工作模式有以下兩種:

1、 /備:即單虛擬路徑器,僅配置一個VIP;

2、 /主:即多個虛擬路徑器,配置多個VIP,每個虛擬路徑器作為其中某個VIP的的master虛擬路徑器;

CentOS6.4以后,keepalived已經在Base倉庫中提供,安裝keepalived以后,我們可以看到其相關文件如下:

配置文件:/etc/keepalived/keepalived.conf

主程序文件:/usr/sbin/keepalived

Unit File/usr/lib/systemd/system/keepalived.service

安裝完成之后,就可以對集群做配置了,但在配置之前,需要確保以下幾點:

?  各節點時間必須同步;

?  確保iptablesSELinux規則不會成為阻礙;

?  各節點之間可通過主機名相互通信(對keepalived非必須);

?  各節點之間的root用戶可以基于密鑰認證的ssh服務完成相互通信(非必須);

首先,我們來看一下keepalived配置文件中各配置選項的意義:

l  虛擬路由器相關配置:

vrrp_instance <STRING> {    state MASTER | BACKUP:指定當前節點在此虛擬路由器上的初始狀態;只能有一個為MASTER,余下的都應該為BACKUP;    interface IFACE_NAME:綁定為當前虛擬路由器使用的物理接口;    virtual_router_id VRID:當前虛擬路由的VRID,為虛擬路由器的唯一標識,范圍為0~255;    priority 100:當前主機在此虛擬路徑器中的優先級,范圍為1~254;    advert_int 1:vrrp通告的時間間隔;    nopreempt:定義工作模式為非搶占模式;    preempt_delay NUM:定義在搶占模式下,節點上線后觸發新選舉操作的延遲時長;單位為秒;    authentication {        auth_type AH | PASS        auth_pass <PASSWORD>    }:定義認證方法;    virtual_ipaddress {        <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>    }:定義虛擬路徑器IP地址,一般只需定義IPADDR/MASK dev <STRING>即可;    track_interface {        IFACE_NAME1        IFACE_NAME2        ...    }:配置要監控的網絡接口,一旦接口出現故障,則轉為FAULT狀態;    notify_master <STRING> | <QUOTED-STRING>:當前節點成為主節點時觸發的腳本;    notify_backup <STRING> | <QUOTED-STRING>:當前節點轉為備用節點時觸發的腳本;    notify_fault <STRING> | <QUOTED-STRING>:當前節點轉為fault狀態時觸發的腳本;    notify <STRING> | <QUOTED-STRING>:通用格式的通知觸發機制,一個腳本可完成以上三種狀態轉換時的通知;}:定義要配置的虛擬路徑器;

l  虛擬服務器相關配置:

virtual_server IP port | virtual_server fwmark int {    delay_loop <INT>:服務輪詢的時間間隔;    lb_algo rr | wrr | lc | wlc | lblc | sh | dh:定義virtual_server的調度算法;    lb_kind NAT | DR | TUN:定義服務器集群的類型;    persistence_timeout <INT>:定義持久連接超時時長;    protocol TCP:定義服務協議,僅支持TCP;    sorry_server <IPADDR> <PORT>:指定備用服務器地址;    real_server <IPADDR> <PORT> {        weight <INT>:定義當前真實服務器的權重;        nofity_up <STRING> | <QUOTED-STRING>:當前真實服務器上線時觸發的腳本;        notify_down <STRING> | <QUOTED-STRING>:當前真實服務器下線時觸發的腳本;        HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC_CHECK {            url {                path <URL_PATH>:定義要監控的URL;                status_code <INT>:判斷上述檢測機制為健康狀態的響應碼;                digest <STRING>:判斷上述檢測機制為健康狀態的響應的內容的校驗碼;            }:定義檢測服務器健康狀態時請求的URL及檢測方法;可以有多個url配置段;            nb_get_retry <INT>:定義檢測時的重試次數;            delay_before_retry <INT>:定義重試之前的延遲時長;            connect_ip <IP_ADDR>:定義向當前RS的哪個IP地址發起健康狀態檢測請求,若未定義,默認為定義RS時的IP地址;            connect_port <PORT>:定義向當前RS的哪個端口發起健康狀態檢測請求,若未定義,默認為定義RS時的端口;            bindto <IP_ADDR>:定義發出健康狀態檢測請求時使用的源地址;            bind_port <PORT>:定義發出健康狀態檢測請求時使用的源端口;            connect_timeout <INT>:定義連接請求的超時時長;        }:定義當前主機的健康狀態檢測方法;         TCP_CHECK {            connect_ip <IP_ADDR>:定義向當前RS的哪個IP地址發起健康狀態檢測請求,若未定義,默認為定義RS時的地址;            connect_port <PORT>:定義向當前RS的哪個端口發起健康狀態檢測請求,若未定義,默認為定義RS時的端口;            bindto <IP_ADDR>:定義發出健康狀態檢測請求時使用的源地址;            bind_port <PORT>:定義發出健康狀態檢測請求時使用的源端口;            connect_timeout <INT>:定義連接請求的超時時長;        }:在傳輸層應用tcp協議對當前主機進行健康狀態檢測;    }:定義真實服務器}:定義虛擬主機,可通過IP與端口或防火墻標記來進行定義;

了解了常用配置選項的意義后,我們就可以進行配置了;在網絡拓撲中,我們使用nginx做反向代理以代理后端的httpd服務器;并對nginx做冗余,與keepalived放置在同一個主機上,并用keepalived實現主/主工作模式;其網絡拓撲如下:

keepalived+nginx2.jpg

下面,我們進行具體的配置:

1、 編輯10.1.2.70keepalived的配置文件/etc/keepalived/keepalived.conf如下;

vrrp_instance VI_1 {
    state MASTER
    interface eno16777736
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.1.2.74/16 dev eno16777736
    }
}
 
vrrp_instance VI_2 {
    state BACKUP
    interface eno16777736
    virtual_router_id 52
    priority 98
    advert_int 1
    preempt_delay 1
    authentication {
        auth_type PASS
        auth_pass 2222
    }
    virtual_ipaddress {
        10.1.2.75/16 dev eno16777736
    }
}

2、編輯10.1.2.71keepalived的配置文件/etc/keepalived/keepalived.conf如下;

vrrp_instance VI_1 {
    state BACKUP
    interface eno16777736
    virtual_router_id 51
    priority 98
    advert_int 1
    preempt_delay 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.1.2.74/16 dev eno16777736
    }
}
 
vrrp_instance VI_2 {
    state MASTER
    interface eno16777736
    virtual_router_id 52
    priority 100
    advert_int 1
    preempt_delay 1
    authentication {
        auth_type PASS
        auth_pass 2222
    }
    virtual_ipaddress {
        10.1.2.75/16 dev eno16777736
    }
}

3、在10.1.2.7010.1.2.71主機上均安裝nginx

yum –y install nginx

4、編輯nginx配置文件/etc/nginx/nginx.conf如下:

         http配置段增加如下內容:

upstream test {
    server 10.1.2.72:80 weight=1;
    server 10.1.2.73:80 weight=1;
}

         server配置段中增減如下內容:

location / {
    proxy_pass http://test;
}

5、配置完成,確保iptablesSELinux規則不會成為阻礙后,啟動服務利用客戶端測試即可;

    keepalived+nginx3.jpg

原創文章,作者:luoliumeng,如若轉載,請注明出處:http://www.www58058.com/56702

(1)
luoliumengluoliumeng
上一篇 2016-11-01 17:22
下一篇 2016-11-01 17:48

相關推薦

  • Bind配置和基本應用

    BIND的安裝配置:    BIND: Berkeley Internet Name Domain,  ISC.org        dns: 協議      &nbsp…

    Linux干貨 2017-05-30
  • find總結及練習

    文件查找: 在文件系統上查找符合條件的文件; 文件查找:locate, find非實時查找(數據庫查找):locate 實時查找:find locate: 依賴于事先構建的索引;索引的構建是在系統較為空閑時自動進行(周期性任務);手動更新數據庫(updatedb); 索引構建過程需要遍歷整個根文件系統,極消耗資源; 工作特點: 查找速度快; 模糊查…

    Linux干貨 2016-07-22
  • 【26期】Linux第二周學習小總結

    關于用戶組的一些小小的整理     本周學習很多的知識,一些文件管理的技巧和命令,重定向和管道的實用技巧和拓展,最后則是到了我們的用戶組的權限和管理,既然說到了管理,我們都知道在Linux中,老師講的最多的一句話就是一切皆文件,既然是文件就會有用戶去用,在里面進行各種的操作,比如增刪改查啊,對文件的重新定義啊,那我們就…

    2017-07-21
  • 馬哥教育網絡班21期+第8周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋:橋接器,是連接兩個局域網的一種存儲/轉發設備,它能將一個大的LAN分割為多個網段,或將兩個以上的LAN互聯為一個邏輯LAN,使LAN上的所有用戶都可訪問服務器 集線器:集線器的英文稱為“Hub”.集線器(hub)屬于純硬件網絡底層設備,基本上不具有類似于交換機的"…

    Linux干貨 2016-08-29
  • linux的文件類型

    linux的文件類型 linux其中的一個哲學思想就是一切皆文件,今天我們就來學習一下linux系統中的文件類型。linux不同于windows,有多種多類的文件類型,文件類型的判斷也不是以文件的后綴為標準的。linux中一共有七種文件類型,分別是:普通文件、目錄、字符設備文件、塊設備文件、套接字文件、命名管道文件和符號鏈接文件。那么接下來我們就分別看看每種…

    Linux干貨 2016-10-27
欧美性久久久久