33 linux集羣架構

  1. 簡介
    根據功能劃分爲兩大類:高可用和負載均衡
    高可用集羣一般爲兩臺服務器,一臺工做,另一臺做爲冗餘,當提供服務的機器宕機,冗餘將接替繼續提供服務html

    負載均衡集羣,須要有一臺服務器做爲分發器,它負責把用戶的請求分發給後端的服務器處理,在這個集羣裏,除了分發器外,就是給用戶提供服務的服務器了,這些服務器數量至少爲2linux

  2. 高可用開源軟件: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協議的。nginx

    配置
    準備兩臺機器(ip第四段爲)131和130,131做爲master,130做爲backup
    兩臺機器都執行yum install -y keepalived
    兩臺機器都安裝nginx,其中131上已經編譯安裝過nginx,130上須要yum安裝nginx: yum install -y nginx
    設定vip(虛擬ip,主從共用的對外的ip,主機正常時vip對應主機,主機宕機時按照此ip繼續解析能夠從機接上)爲100,vip只能用ipadd查看,不能用ifconfig看
    vim /etc/keepalived/keepalived.conf刪除原有內容,編輯131上keepalived配置文件,內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf 獲取
    global_defs 全局參數
    notification_email 出問題時發郵件
    vrrp_script chk_nginx 檢測服務是否正常,引用下面腳本
    vrrp_instance VI_1 定義master相關參數
    vim /usr/local/sbin/check_ng.sh 131編輯監控腳本,內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh 獲取
    用處在於檢測nginx服務是否啓動,若沒有啓動且啓動不了,須要關掉keepalived
    給腳本755權限
    systemctl start keepalived 131啓動服務
    從上配置:
    130上編輯配置文件,內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf 獲取
    130上編輯監控腳本,內容從https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh 獲取
    給腳本755權限
    130上也啓動服務 systemctl start keepalived
    測試
    1.分別在主從上關閉nginx,因爲腳本的存在,keepalived會自動啓動nginx。
    2.主機增長規則iptables -I OUTPUT -p vrrp -j DROP不能達到切換資源目的,恢復之
    3.停掉主機的keepalived,此時vip切換到從上,再啓動主機上的keepalived,當即恢復主機vipgit

  3. 均衡負載開源軟件:LVS
    三個模式介紹:
    a. NAT模式
    33 linux集羣架構
    這種模式藉助iptables的nat表來實現
    用戶的請求到分發器後,經過預設的iptables規則,把請求的數據包轉發到後端的rs上去
    rs須要設定網關爲分發器的內網ip
    用戶請求的數據包和返回給用戶的數據包所有通過分發器,因此分發器成爲瓶頸
    在nat模式中,只須要分發器有公網ip便可,因此比較節省公網ip資源
    b. IP Tunnel 模式
    33 linux集羣架構
    這種模式,須要有一個公共的IP配置在分發器和全部rs上,咱們把它叫作vip
    客戶端請求的目標IP爲vip,分發器接收到請求數據包後,會對數據包作一個加工,會把目標IP改成rs的IP,這樣數據包就到了rs上
    rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身
    c. DR 模式
    33 linux集羣架構
    這種模式,也須要有一個公共的IP配置在分發器和全部rs上,也就是vip
    和IP Tunnel不一樣的是,它會把數據包的MAC地址修改成rs的MAC地址
    rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身。算法

    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 shvim

    配置
    NAT模式
    三臺機器
    分發器,也叫調度器(簡寫爲dir)
    內網:133.130,外網:142.147(vmware僅主機模式)
    rs1
    內網:133.132,設置網關爲133.130
    rs2
    內網:133.133,設置網關爲133.130
    檢測網關命令 route -n
    三臺機器上都執行執行(關防火牆)
    systemctl stop firewalld; systemc disable firewalld
    systemctl start iptables; iptables -F; service iptables save
    在dir(分發器)上安裝ipvsadm(實現LVS的工具)
    yum install -y ipvsadm
    在dir上編寫腳本,vim /usr/local/sbin/lvs_nat.sh//內容以下
    #! /bin/bash
    #director 服務器上開啓路由轉發功能
    echo 1 > /proc/sys/net/ipv4/ip_forward
    #關閉icmp的重定向
    echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
    #注意區分網卡名字,阿銘的兩個網卡分別爲ens33和ens37
    echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
    #director 設置nat防火牆
    iptables -t nat -F
    iptables -t nat -X
    iptables -t nat -A POSTROUTING -s 192.168.133.0/24 -j MASQUERADE //能夠將源地址爲網段192.168.133.0/24的修改爲外網地址,達成內網rs鏈接外網的目的
    #director設置ipvsadm
    IPVSADM='/usr/sbin/ipvsadm'
    $IPVSADM -C 清空規則
    $IPVSADM -A -t 192.168.147.144:80 -s wlc -p 3 // -A表示增長規則,-t後跟外網IP,-s算法,-p必定時間內將同ip請求發到同一rs(沒有也行)
    $IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.132:80 -m -w 1 //-r後跟rs,-m表示NAT模式(masquerade),-w表示權重
    $IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.133:80 -m -w 1
    另外兩臺不須要特別設置,安裝nginx就能夠後端

    DR模式
    三臺機器
    分發器,也叫調度器(簡寫爲dir)
    133.130
    rs1
    133.132
    rs2
    133.133
    vip
    133.200
    dir上編寫腳本 vim /usr/local/sbin/lvs_dr.sh //內容以下
    #! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ipv=/usr/sbin/ipvsadm
    vip=192.168.133.200
    rs1=192.168.133.132
    rs2=192.168.133.133
    #注意這裏的網卡名字
    ifdown ens33
    ifup ens33 //重啓網卡,能夠把以前設置的ip清空,避免重複設置ip,不重啓也行
    ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up //綁定vip的命令,ifconfig設置虛擬網卡
    route add -host $vip dev ens33:2 //
    $ipv -C
    $ipv -A -t $vip:80 -s wrr
    $ipv -a -t $vip:80 -r $rs1:80 -g -w 1 //-g DR模式(gateway)
    $ipv -a -t $vip:80 -r $rs2:80 -g -w 1
    兩臺rs上也編寫腳本 vim /usr/local/sbin/lvs_rs.sh//內容以下
    #/bin/bash
    vip=192.168.133.200
    #把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
    分別在dir上和兩個rs上執行這些腳本bash

    Keepalived+LVS
    完整架構須要兩臺服務器(角色爲dir)分別安裝keepalived軟件,目的是實現高可用,但keepalived自己也有負載均衡的功能,因此本次實驗能夠只安裝一臺keepalived
    keepalived內置了ipvsadm的功能,因此不須要再安裝ipvsadm包,也不用編寫和執行那個lvs_dir的腳本
    三臺機器分別爲:
    dir(安裝keepalived)133.130
    rs1 133.132
    rs2 133.133
    vip 133.200
    編輯keepalived配置文件 vim /etc/keepalived/keepalived.conf//內容請到https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/lvs_keepalived.conf 獲取
    須要更改裏面的ip信息
    執行ipvsadm -C 把以前的ipvsadm規則清空掉
    systemctl restart network 能夠把以前的vip清空掉·
    兩臺rs上,依然要執行/usr/local/sbin/lvs_rs.sh腳本,但dir上只須要執行部分:echo 1 > /proc/sys/net/ipv4/ip_forward
    keepalived有一個比較好的功能,能夠在一臺rs宕機時,再也不把請求轉發過去服務器

相關文章
相關標籤/搜索