1. 程式人生 > >LVS+keepalived 高可用群集

LVS+keepalived 高可用群集

-a S3 服務 ali ini 負載 群集 ase ID

LVS+keepalived 高可用群集

實驗目的:

使用 keepalived 實現 LVS 雙機熱備。

實驗環境:

主機 操作系統 IP地址 主要軟件
LVS 負載調度器 CentOS 7.3 x86_64 192.168.217.128 keepalived
LVS 負載調度器 CentOS 7.3 x86_64 192.168.217.129 keepalived
web 服務器 1 CentOS 7.3 x86_64 192.168.217.130 http
web 服務器 2 CentOS 7.3 x86_64 192.168.217.131 http
NFS 共享儲存 CentOS 7.3 x86_64 192.168.217.132
客戶機 Windows 7 192.168.217.133

配置 LVS 負載調度器

  1. 安裝所需軟件 ,添加虛擬網卡:

    yum install keepalived ipvsadm -y       #安裝lvs管理工具和keepalived
    cd /etc/sysconfig/network-scripts/  
    cp ifcfg-ens32 ifcfg-ens32:0                #復制現有的網卡做虛擬網卡 ,添加以下內容
    DEVICE=ens32:0
    ONBOOT=yes
    IPADDR=192.168.217.10                   #虛擬網卡地址 VIP 
    NETMASK=255.255.255.0
    ifup ens32:0                                        #開啟虛擬網卡
  2. 開啟路由轉發功能:

    vim /etc/sysctl.conf
    net.ipv4.ip_forward=1                        #開啟路由轉發功能
    #proc響應關閉重定向功能
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.ens32.send_redirects = 0
  3. 制作 ipvsadm 啟動腳本:

    modprobe ip_vs                                   #加載LVS模板
    cd /etc/init.d/
    vim dr.sh
    #!/bin/bash
    GW=192.168.217.1            #網關      
    VIP=192.168.217.10          #虛擬IP
    RIP1=192.168.217.130      #web服務器1地址
    RIP2=192.168.217.131      #web服務器2地址
    case "$1" in
    start)
        /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm           #在centos 7 以上的版本 需要保存策略 才能開啟服務
        systemctl start ipvsadm                                               #開啟服務
        /sbin/ifconfig ens32:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
        /sbin/route add -host $VIP dev ens32:0                      #添加網段
        /sbin/ipvsadm -A -t $VIP:80 -s rr                                 #添加虛擬服務機
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g                 #添加真實服務機   使用DR群集模式
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
        echo "ipvsadm starting --------------------[ok]"
        ;;
        stop)
        /sbin/ipvsadm -C                                                          #清除節點服務器
        systemctl stop ipvsadm                                               #關閉服務
        ifconfig ens32:0 down                                                 #關閉虛擬網卡
        route del $VIP                                                             #刪除網段
        echo "ipvsamd stoped----------------------[ok]"
         ;;
        status)
        if [ ! -e /var/lock/subsys/ipvsadm ];then    #如果沒有匹配到/var..../ipvsadm這個文件 則 stoped  否則 runing 
        echo "ipvsadm stoped---------------"
        exit 1
                else
                echo "ipvsamd Runing ---------[ok]"
        fi
        ;;
        *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
        esac
        exit 0
    chmod +x dr.sh             #添加權限
    service dr.sh start         #開啟服務

    註:可以不做 keepalived ,做 web 服務器 ,測試能否調度 。

  4. 配置 keepalived :

    vim /etc/keepalived/keepalived.conf
    global_defs {
    ...
    smtp_server 127.0.0.1         #指向本地
    router_id LVS_01                #主調度服務器名稱,要與從調度服務器不同名稱
    ...           
    }
    vrrp_instance VI_1 {
    state MASTER             #從調度服務器是BACKUP
    virtual_router_id 10      #組號  主從組號要相同 
    ...
    auth_pass abc123       #驗證密碼  主從相同
    priority 100                  #優先級大的為主,從優先級不能大於主
    ...
    virtual_ipaddress {       #虛擬IP地址池
        192.168.217.10
    }
    ...
    virtual_server 192.168.217.10 80 {    #虛擬IP地址
    delay_loop 6
    lb_algo rr                           #負載調度算法
    lb_kind DR                        #群集模式
    ...
    real_server 192.168.217.130 80 {    #web服務器地址
        weight 1                              #權重
        TCP_CHECK {                   #檢查方式
            connect_port 80             #監聽端口
            connect_timeout 3         #鏈接超時(秒)
            nb_get_retry 3               #重試次數
            delay_before_retry 3     #重試間隔(秒)
        }   
    }   
    real_server 192.168.1217.131 80 {
        weight 1
        TCP_CHECK {
            connect_port 80             
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }   
    }    
    }
    systemctl start keepalived           #開啟服務
    ip addr show dev ens32:0           #查看虛擬網卡
    systemctl stop  firewalld.service  # 關閉防火墻

    註:主、從調度器名稱要不同、組號要相同、驗證密碼相同、優先級不能大於主 。
    主從調度器除了以上不同 ,其他的配置都相同 ,IP地址也不同 ,虛擬IP相同 。


配置 web 服務器

  1. 安裝服務 ,開啟 、關閉 ,掛載 :

    yum install http -y
    systemctl start httpd.service 
    systemctl stop  firewalld.service
    mount.nfs 192.168.217.132:/opt/benet /var/www/html   #掛載nfs提供的文件
    cd /var/www/html/
    echo "this is accp web" > index.html    #添加不同的測試首頁 ,便於區別 。
  2. 配置虛擬IP :

    cd /etc/sysconfig/network-scripts
    cp ifcfg-lo ifcfg-lo:0                      #復制回環地址 做虛擬IP
    vim ifcfg-lo:0
    DEVICE=lo:0
    IPADDR=192.168.217.10
    NETMASK=255.255.255.0
    ONBOOT=yes
    ifup lo:0            #啟動虛擬地址 會把原本地址覆蓋
  3. 制作接受調度服務器的腳本:

    cd /etc/init.d/
    vim web.sh
    #!/bin/bash
    VIP=192.168.217.10
        case "$1" in
        start)
                ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP   #開啟虛擬IP
                /sbin/route add -host $VIP dev lo:0                                           #添加網段
                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
                sysctl -p >/dev/null 2>&1                                                            
                echo "RealServer Start OK "
                ;;
                #以上內容是只接受調度服務器給予的回饋 
        stop)
                ifconfig lo:0 down
                route del $VIP /dev/null 2>&1
                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
                echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
                echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
                echo "RealServer Stopd"
                ;;
        *)
                echo "Usage: $0 {start|stop}"
                exit 1
        esac
        exit 0
    chmod +x web.sh              
    service web.sh start           

    註:web 服務器配置都一樣 。

測試

使用win訪問虛擬IP ,如果沒問題 ,把 LVS 負載調度器 1 的虛擬網關關掉 ,ifdown ens32:0 , 繼續測試 ,如果還能訪問 ,則群集搭建成功 。

註:如果刷新不出 ,可以重啟ipvsadm 服務 ,或者清除瀏覽器緩存 。

註:如果有錯誤的地方 ,麻煩指出 。謝謝觀賞

LVS+keepalived 高可用群集