利用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
下一篇 2016-11-01

相關推薦

  • FTP服務

        FTP是一個非常古老的協議,其主要的作用是用于文件的傳輸。FTP采用明文的方式傳輸,極其不安全,但在局域網等環境中使用還是比較方便的。 一、工作原理     FTP的工作方式分為主動模式與被動模式。     1、主動模式 &nbsp…

    Linux干貨 2015-07-08
  • centos啟動模式更改

    臨時更改   用單用戶的方法 系統開機 然后在等待界面是按esc 然后會進入這個界面,根據下面的提示進入 按a 會進入下面這個界面 在最后一行輸數字代表第幾模式   文件更改   centos6   系統啟動時會初始化init init 的配置文件是/etc/inittab文件 用vim /etc/inittab進入查…

    2017-07-22
  • 網絡路由以及配置

               路由表的構成    目標網絡的網絡ID   Netmask 接口:到達目標網絡的路由器出口  網關gateway: 1.如果目標網絡和路由器直連,網關IP=接口的IP  2.如果目標網絡和路由器非直連,下一個路由器臨近…

    Linux干貨 2017-07-02
  • rpm包管理

    前言    RPM(簡稱RPM,全稱為The RPM Package Manager)是在Linux下廣泛使用的軟件包管理器。RPM此名詞可能是指.rpm的文件格式的軟件包,也可能是指其本身的軟件包管理器(RPM Package Manager)。最早由Red Hat研制,現在也由開源社區開發。RPM通常隨附于Linux發行版,…

    Linux干貨 2015-05-13
  • 淺談DNS基本原理以及實現方法(二)

             DNS作為互聯網服務的一個基礎型服務,了解和掌握DNS服務的原理和配置將是每一個運維人員必備的技能,這就如同闖蕩江湖的俠客不但要有的招式,還要懂的運用這些招式的心法一樣,接下來我將從DNS的正反向解析、主從同步、子域授權以及Bind view這四個方面來揭開它神…

    Linux干貨 2015-12-19
  • 每日一練–8.8 sed,vim

     1 、刪除/etc/grub2.conf 文件中所有以空白開頭的行行首的空白字符     sed  's/^[[:space:]]//g' /etc grub2.conf ? 2 、刪除/etc/fstab 文件中所有以# 開頭,后面至少跟一個空白字符的行的行首的# 和空白字符   &n…

    Linux干貨 2016-08-12
欧美性久久久久