Linux集羣

概述:

    根據功能劃分爲兩大類:高可用和負載均衡

    高可用集羣(HA集羣或者叫雙機熱備)通常爲兩臺服務器,一臺工作,另外一臺作爲冗餘,當提供服務的機器宕機,冗餘將接替繼續提供服務;實現高可用的開源軟件有:heartbeat、keepalived

    負載均衡集羣,需要有一臺服務器作爲分發器,它負責把用戶的請求分發給後端的服務器處理,在這個集羣裏,除了分發器外,就是給用戶提供服務的服務器了,這些服務器數量至少爲2;實現負載均衡的開源軟件有LVS、keepalived、haproxy、nginx,商業的有F5、Netscaler

下面來介紹Keepalived實現高可用集羣:

    keepalived通過VRRP(Virtual Router Redundancy Protocl)協議來實現高可用。

    在這個協議裏會將多臺功能相同的路由器組成一個小組,這個小組裏會有1個master角色和N(N>=1)個backup角色。

    master會通過組播的形式向各個backup發送VRRP協議的數據包,當backup收不到master發來的VRRP數據包時,就會認爲master宕機了。此時就需要根據各個backup的優先級來決定誰成爲新的mater。

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

使用keepalived+nginx實現web高可用

    準備工作:master:192.168.139.129  需要安裝keepalived + nginx; backup:192.168.139.128 需要安裝keepalived + nginx;   還要設置VIP:192.168.139.100(這個是虛擬IP,服務器是靠這個VIP對外提供服務的。)

    keepalived安裝可以yum install -y keepalived; nginx安裝同樣是yum安裝的

下面是具體的實現:

    1. master(129)操作:

    編輯vim /etc/keepalived/keepalived.conf文件,清空文件內容,加入一下的配置:

global_defs {
    notification_email {
        [email protected]
    }
    notification_email_from [email protected]
        smtp_server 127.0.0.1
        smtp_connect_timeout 30
        router_id LVS_DEVEL
}

vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ngx.sh"
        interval 3
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.139.100
    }

    track_script {
        chk_nginx
    }
}

    由於上面的代碼定義了一個監控的腳本check_ngx.sh,編輯完記得授於執行的權限755

#!/bin/bash
#時間變量,用於記錄日誌
d=`date --date today +%Y%m%d_%H%M%S`
#計算nginx進程數量
n=`ps -C nginx --no-heading|wc -l`
#如果進程爲0,則啓動nginx,並且再次檢測nginx進程數量,
#如果還爲0,說明nginx無法啓動,此時需要關閉keepalived
if [ $n -eq "0" ];then
    /etc/init.d/nginx start
    n2=`ps -C nginx --no-heading|wc -l`
    if [ $n2 -eq "0" ];then
        echo "$d nginx down,keepalived will stop" >> /var/log/check_ngx.log
        systemctl stop keepalived
    fi
fi

    完成以上的步驟,就可以啓動master的keepalived服務了。systemctl start keepalived.service;如下圖:

    image.png

    使用ip add命令可以看到master上的VIP:192.168.139.100(注意ifconfig命令是看不到這個虛擬VIP的) 到這裏master的工作就完成了!!!

    2. backup(128)上操作:

    編輯vim /etc/keepalived/keepalived.conf文件,清空文件內容,加入一下的配置:

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ngx.sh"
    interval 3
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.139.100
    }
    track_script {
        chk_nginx
    }
}

    代碼定義了一個監控的腳本check_ngx.sh,編輯完記得授於執行的權限755

#!/bin/bash
#時間變量,用於記錄日誌
d=`date --date today +%Y%m%d_%H:%M:%S`
#計算nginx進程數量
n=`ps -C nginx --no-heading|wc -l`
#如果進程爲0,則啓動nginx,並且再次檢測nginx進程數量,
#如果還爲0,說明nginx無法啓動,此時需要關閉keepalived
if [ $n -eq "0" ]; then
        systemctl start nginx
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ngx.log
                systemctl stop keepalived
        fi
fi

    完成以上的步驟,就可以啓動master的keepalived服務了。systemctl start keepalived.service

    3. 接下來就是驗證是否實現了keepalived高可用了。

    我們去master(129)的機器把keepalived 停掉,看看backup的機器會不會自動切換到VIP

    master操作:systemctl stop keepalived.service

    image.png

    master機器上已經沒有了VIP了

    backup操作:

    image.png

    VIP自動切換到backup機器上面來了!

    4. 當我們重新啓動master的服務時,master機器上會重新接管VIP的資源了

systemctl start keepalived.service

    image.png

到這裏keepalived+nginx實現高可用 就完成了。當然你也可以把nginx服務換成其他的服務,如MySQL等,大致的思路都是一樣的!


下面接着搭建負載均衡集羣

    介紹:主流開源軟件LVS、keepalived、haproxy、nginx等;其中LVS屬於4層(網絡OSI 7層模型),nginx屬於7層,haproxy既可以認爲是4層,也可以當做7層使用。

    keepalived的負載均衡功能其實就是lvs;lvs這種4層的負載均衡是可以分發除80外的其他端口通信的,比如MySQL的,而nginx僅僅支持http,https,mail,haproxy也支持MySQL這種

    相比較來說,LVS這種4層的更穩定,能承受更多的請求,而nginx這種7層的更加靈活,能實現更多的個性化需求

這裏我們使用LVS+keepalived實現負載均衡

    關於LVS是什麼,請自行查詢資料!

    LVS常見有三種模式:NAT模式、IP Tunnel模式(也稱IP隧道)、DR模式

    LVS的調度算法:(常用前面四種)

        輪詢 Round-Robin  rr

        加權輪詢 Weight Round-Robin wrr

        最小連接 Least-Connection lc

        加權最小連接 Weight Least-Connection wlc

        基於局部性的最小連接 Locality-Based Least Connections lblc

        帶複製的基於局部性最小連接 Locality-Based Least Connections with Replication  lblcr

        目標地址散列調度 Destination Hashing dh

        源地址散列調度 Source Hashing  sh


 準備工作:主keepalived(調度器)192.1468.139.129 ; 服務器rs1 192.168.139.128(nginx); 服務器rs2 192.168.139.130(nginx) ; VIP 192.168.139.110

    主keepalived(129)上操作:

    編輯文件:vim /etc/keepalived/keepalived.conf,清空原來的內容,加入一下配置:

vrrp_instance VI_1 {
    #備用服務器上爲 BACKUP
    state MASTER
    #綁定vip的網卡爲ens33,你的網卡和阿銘的可能不一樣,這裏需要你改一下
    interface ens33
    virtual_router_id 51
    #備用服務器上爲90
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.139.110
    }
}
virtual_server 192.168.139.110 80 {
    #(每隔10秒查詢realserver狀態)
    delay_loop 10
    #(lvs 算法)
    lb_algo wlc
    #(DR模式)
    lb_kind DR
    #(同一IP的連接60秒內被分配到同一臺realserver)
    persistence_timeout 60
    #(用TCP協議檢查realserver狀態)
    protocol TCP

    real_server 192.168.139.128 80 {
        #(權重)
        weight 100
        TCP_CHECK {
        #(10秒無響應超時)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.139.130 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

    安裝ipvsadm:yum install -y ipvsadm

    在rs服務器(128+130)操作:

    編輯腳本:vim /usr/local/sbin/lvs_rs.sh

#/bin/bash
vip=192.168.139.110
#把vip綁定在lo上,是爲了實現rs直接把結果返回給客戶端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作爲更改arp內核參數,目的是爲了讓rs順利發送mac地址給客戶端
#參考文檔www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

    然後執行!


配置完成了,我們去主keepalived開啓服務!

驗證:

image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章