lvs+keepalived

機器準備:
    4臺服務器
    2臺lvs+keepalived
    2臺 rs serverhtml

環境及地址:
    操做系統:centos
    lvs+keepalived:
        地址:10.68.3.145   10.68.3.146
        VIP:10.68.3.184
    rs server:
        10.68.3.147 10.68.3.151mysql


lvs+keepalived 安裝
    如今的系統通常都自帶lvs內核,直接yum安裝便可
    yum -y install ipvsadm
    yum -y install keepalivednginx

    開啓IP轉發功能
    echo 1 > /proc/sys/net/ipv4/ip_forward算法

    lvs不用作什麼配置,直接配置keepalive文件便可,
    作以前儘可能關閉seLinux和防火牆,否則排錯更困難,由於lvs自己沒有日誌sql

keepalive配置文件
MASTER
    ! Configuration File for keepalivedvim

    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }centos

    vrrp_instance VI_12 {
        state MASTER          #上面的配置能夠忽略,用默認安裝的就好,這是master的標誌
        interface ens4        #做用在哪一個接口,此接口必須存在
        virtual_router_id 52  #虛擬組id,若是局域網存在其餘lvs,不能與其它組id衝突
        priority 100          #優先級,master 高於backup便可,主down掉以後會變成0
        advert_int 1          #心跳發送通告的間隔
        authentication {      #認證的帳號密碼,貯備必須一致
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {   #虛擬一個IP地址,能夠多個
            10.68.3.184
        }
    }bash

    virtual_server 10.68.3.184 80 {     #映射一個虛擬IP服務實例
        delay_loop 6                    #健康檢查的時間間隔
        lb_algo rr                      #調度器算法
        lb_kind DR                      #採用lvs哪一種模式(DR|NAT|TUN)
        persistence_timeout 0           #回話保持時間
        protocol TCP                    #基於什麼協議服務器

        real_server 10.68.3.147 80 {    #虛擬實例下轉發的真實服務器
            weight 1                    #權重
            TCP_CHECK {                 #設置檢查的方式
                connect_timeout 10      #超時時間
                nb_get_retry 3          #重試次數 
                delay_before_retry 3
                connect_port 80         #檢測的端口
            }
        }app

        real_server 10.68.3.151 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    }

BACKUP
    ! Configuration File for keepalived

    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }

    vrrp_instance VI_12 {
        state BACKUP
        interface ens4
        virtual_router_id 52
        priority 90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.68.3.184
        }
    }

    virtual_server 10.68.3.184 80 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        persistence_timeout 0
        protocol TCP

        real_server 10.68.3.147 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }

        real_server 10.68.3.151 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    }

啓動服務
    直接啓動keepalive便可
    keepalived
    ps aux |grep keepalived是否有三個進程存在

    判斷有沒有選舉成功能夠經過ip add 來查看主有沒有綁定虛擬IP,
    也能夠經過日誌查看 /var/log/messages 選舉過程,固然也能夠
    自定義日誌路徑,不過得從系統日誌修改,而且得修改啓動方式
    詳細見mysql+keepalived

rs 節點
    yum -y install nginx 
    爲了方便測試咱們這裏修改首頁的值
    echo 147 > /usr/share/nginx/html/index.html 
    echo 151 > /usr/share/nginx/html/index.html 

    局域網本地客戶端測試看下首頁是否能打開分別顯示上面這兩個值,不然的話就先解決這個吧


vim /etc/rc.d/init.d/realserver.sh
    #!/bin/bash
    # description: Config realserver lo and apply noarp
     
    SNS_VIP=10.68.3.184
     
    /etc/rc.d/init.d/functions
     
    case "$1" in
    start)
           ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
           /sbin/route add -host $SNS_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 $SNS_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 Stoped"
           ;;
    *)
           echo "Usage: $0 {start|stop}"
           exit 1
    esac
     
    exit 0

若是是NAT模式的話,rs節點網關得指向虛擬IP
上述完成以後經過 IP add 查看lo是否有綁定上虛擬地址
##調試過程當中不要作這步:若是不須要了能夠去掉這個地址:/sbin/ifconfig lo:0 down


如今全部工做都作完了就開始檢查測試了
第一步:lvs節點查看路由是否有添加成功
    [root@compute ~]# ipvsadm
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  compute:http rr
      -> compute3:http                Route   1      0          0         
      -> compute2:http                Route   1      0          0        
    若是這裏都沒有路由的話確定是不可能測試成功的,查看keepalive的日誌
    看下心跳是否有檢測成功,若是不成功的話,就看日誌報錯緣由吧
    好比ping  Telnet端口是否通,若是這些都OK,日誌裏面都沒有顯示其中某一臺的日誌
    那就是keepalived的日誌有問題,由於它自己不會檢測配置文件是否有語法錯誤,只能
    本身從新敲一遍

第二步:若是路由已經添加成功,那就開始測試
    直接在局域網找一臺機器測試
    [root@tc2 ~]# curl 10.68.3.184:80
    147
    [root@tc2 ~]# curl 10.68.3.184:80
    151
    [root@tc2 ~]# curl 10.68.3.184:80
    147
    [root@tc2 ~]# curl 10.68.3.184:80
    151
    [root@tc2 ~]# curl 10.68.3.184:80
    147

    若是一直訪問的其中一臺:
    1:查看另一臺地址和端口是不是通的
    2:看keepalive回話保持時間persistence_timeout  0是不保持,直接輪詢,若是須要帶權重
        輪詢的話得更改調度算法 lb_algo 改成wrr 帶權重輪詢
    3:看下ARP是否作了設置
          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

第三步:
    若是上述均可以的話,斷掉其中的一臺,看下vip訪問是否正常;
    斷掉其中的一臺keepalive master,看下是backup是否有綁定虛擬地址,而且VIP是否也訪問正常


lvs自己也能夠實現上述功能,只是他不能檢測節點的健康狀態,斷掉一個節點所有業務中斷,因此
要結合keepalive

lvs自己是隻能做用於單核的,因此若是做用的CPU達到瓶頸也會影響它的性能,能夠綁定多網卡

經常使用排查命令
    防火牆
        iptables -t nat -nvL
        iptables -nvL

        iptables -F
        iptables -X
        iptables -Z

    lvs
        ipvsadm -ln
        ipvsadm -ln --stat   
        ipvsadm -Z    #計數清零,與iptables同樣,方便調試
        ipvsadm -C    #清空kvs配置

    arp
        arp -n 
        arp -s host|IP  mac

lvs 部分配置命令解釋
    /sbin/ipvsadm -A -t $VIP:80 -s rr
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
    -A 在內核中添加一個虛擬服務器記錄
    -t 說明是基於tcp協議的
    -s 調度器算法至關於keepalive中的lb_algo 配置
    -a 在建立的虛擬服務器下面增長一條真實服務器的映射
    -r 映射到的真實服務器
    -i 模式配置至關於keepalive中的 lb_kind 配置,這裏還有-g (DR) -m(NAT)

三種模式的區別:

    詳解件:http://www.uml.org.cn/zjjs/201211124.asp

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息