keepalived實現高可用LVS

前言

vrrp介紹:

 vrrp(Virtual Router Redundancy Protocol)虛擬路由冗余協議;就是把多個路由器或多個網關設備加入到組中,然后在這一組中虛擬出一個路由器,此虛擬路由器有真是的IP和MAC地址,客戶端將網關指向此虛擬路由器的IP;客戶端向此虛擬路由器的IP和MAC地址發起請求時,由活動路由器負責響應;當活動路由器發生故障時,由備份路由器響應客戶端請求,同時備份路由器轉變為活動路由器,從而實現客戶端網關無縫切換,保證客戶端無感知情況下正常上網。 

keepalived介紹:

 keepalived就是vrrp協議在Linux主機上以守護進程方式的實現,能根據配置文件生成ipvs規則,不需要ipvsadm客戶端工具,還能對后端real server主機做健康狀態檢查,當real sever主機發生故障時,自動從ipvs中刪除;當故障real server恢復后,還可以自動加入到ipvs中;從而實現業務正常運轉。

keepalived官方結構圖如下所示:

     Software Design.gif

一、安裝配置keepalived高可用lvs

1、實驗環境:

1.png

keepalived主機:

  node1: 172.16.2.14/24

  node2:172.16.2.13/24

web主機:

  node3:172.16.2.12/24

Virtual:

 Virtaul 1:172.16.2.15/24

2、安裝keepalived:

# yum -y  install keepalived

2.1配置keepalived:

node1配置:

[root@node1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {   \\全局定義
   notification_email {  \\定義郵件的接收者
     node1@mylinux.com
         node2@mylinux.com
   notification_email_from root@mylinux.com  \\定義郵件的發送者
   smtp_server 127.0.0.1  \\定義郵件發送服務器
   smtp_connect_timeout 30 \\定義與郵件服務器的連接超時時長
   router_id LVS_DEVEL  \\定義主機名稱,默認即可
}

vrrp_instance mylinux_1 {  \\定義實例,名稱為mylinux_1
    state BACKUP   \\為備份節點
    interface eth0  \\工作在eth0接口
    virtual_router_id 51  \\虛節點路由id,每個實例節點id不能相同
    priority 98  \\優先級,
    advert_int 1  \\定義vrrp間隔時間
    authentication {  \\定義認證類型以及秘鑰
        auth_type PASS  \\常用的認證類型有PASS||AH
        auth_pass 111122233334444  \\定義秘鑰
    }
    virtual_ipaddress {  \\定義虛擬ip地址,也就是VIP地址
        172.16.2.15/24 dev eth0 label eth0:0 
    }\\可以直接使用172.16.2.15不加其他選項是只能使用ip addr list查看,加上此參數可以使用ifconfig查看
    virtual_routers {  定義路由
        172.16.2.15/24 dev eth0:0   \\定義主機路由
   }
}
virual_server 172.16.2.15 80 {  \\定義ipvs
   dealay_loop 6   \\定義時延
   lb_algo rr  \\調度方法,常用的調度方法有rr|wrr|lc|wlc|lblc|sh|dh
   lb_kind DR  \\ipvs的工作類型
   persistence_timeout 10  \\持久連接為10s,可根據需求自定義
   protocol TCP  \\ipvs的協議

   sorry_server 127.0.0.1 \\當后端所有real_server故障,使用本機web響應信息

   real_server 172.16.2.12 80 {  \\添加后端主機real_server
      weight 1   \\定義權重
      HTTP_GET {   \\在應用層,對后端real_server健康檢測
           url {   
            path /  \\請求的url為根路徑
            status_code 200  \\當返回的狀態碼為200時則證明此real_server正常;可以使用digest做校驗,前提是事先利用genhash對請求的url做hash,然后將結果保存到此位置
           }  
          connect_timeout 3  \\后端real_server連接超時時長
          nb_get_retry 3  \\確定當重試多少次之后連接不到后端real_server認為其發生故障
          delay_before_retry 3 \\在嘗試去連接時的時間間隔
         }
     }
}

node2節點配置:

[root@node2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     node1@mylinux.com
     node2@mylinux.com
   }
   notification_email_from root@mylinux.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance mylinux_1 {
    state MASTER  \\此處MASTER,為主節點
    interface eth0
    virtual_router_id 51
    priority 100   \\優先級比backup要高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 111122233334444
    }
    virtual_ipaddress {
        172.16.2.15/24 dev eth0 label eth0:0
    }
    virtual_routers {
        172.16.2.15/24 dev eth0:0
   }
}
virual_server 172.16.2.15 80 {
   dealay_loop 6
   lb_algo rr
   lb_kind DR
   persistence_timeout 10
   protocol TCP

   sorry_server 127.0.0.1

   real_server 172.16.2.12 80 {
      weight 1
      HTTP_GET {
           url {
            status_code 200
           }
          connect_timeout 3
          nb_get_retry 3
          delay_before_retry 3
         }
     }
}

3、在node3安裝httpd服務

3.1安裝httpd服務

[root@node3 ~]# yum -y install httpd

3.2添加默認文檔

[root@node3 ~]# echo "<h1>test keepalived</h1>" >/var/www/html/index.html

3.3 修改node3的相關參數:

[root@node3 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@node3 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
[root@node3 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@node3 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

3.4 配置vip地址和主機路由:

[root@node3 ~]# ifconfig lo:0 172.16.2.15 broadcast 172.16.2.15 netmask 255.255.255.255 up
[root@node3 ~]# route add -host 172.16.2.15 dev lo:0

3.5 啟動httpd

[root@node3 ~]# /etc/init.d/httpd start

3.5 訪問測試http是否可以正常訪問

2.png

4、 啟動keepalived

4.1 啟動

[root@node1 ~]# /etc/init.d/keepalived start; ssh node2 '/etc/init.d/keepalived start '

4.2 查看vip地址,ipvs規則

6.png 

7.png

4.3訪問測試:

5.png

5、知識擴展:

參考/usr/share/doc/keepalived-1.2.13/samples/目錄下的文件,可以參考里面的文件自定檢查腳本

例如:

在全局中定義檢查:
vrrp_script chk_nginx {
    killall -0 nginx   \\檢查nginx進程,如果錯誤此主機在keepalived中的權重減去5,檢查時間間隔為5s
    interval 1
    weight -5
  }
}
vrrp_script chk_haproxy {\\檢查haproxy進程,如果錯誤此主機在keepalived中的權重減去5,檢查時間間隔為5s
    killall -0 haproxy
    interval 1
    weight -5
  }
   vrrp_script chk_keealived_down {\\當/etc/keepalived/目錄中有down文件時,則此服務器再keepalived中的權限將會減5,檢查時間間隔為5s
  [[ -f /etc/keepalived/down ]] && exit 1 || exit 0
  interval 1
  weight -5
}
在實例中引用:
 track_script {  \\在實例中調用此檢查腳本
      chk_nginx
      chk_haproxy
      chk_keepalived_down
    }

原創文章,作者:馬行空,如若轉載,請注明出處:http://www.www58058.com/6384

(0)
馬行空馬行空
上一篇 2015-07-21 21:57
下一篇 2015-07-24 21:53

相關推薦

  • 第五周:grep和find的使用練習

    1、顯示當前系統上root、fedora或user1用戶的默認shell; grep -E "^(root|fedora|user1)" /etc/passwd | cut -d: -f7 grep -E "^root|fedora|use…

    Linux干貨 2016-10-25
  • Linux里的用戶與組

    任何事務的進行都離不開管理,脫離了管理的系統將會是一團亂麻。今天就來講講Linux里的用戶與組的管理 首先,用戶與組不會憑空出現,必須得是系統本身或人為創建的 。     所以,系統創建的就叫系統用戶.系統組,用戶創建的就是普通用戶.普通組。 useradd  創建用戶 -u 創建用戶并指定用戶的UID -g…

    2017-07-30
  • linux中for的用法

    關于linuxbash shell中的for語句 在linux中shell是必不可少的一部分,但是在bash shell中有while,for,until等循環命令,今天就介紹一下關于for的一些用法。文中任何錯誤希望大佬們一一指出,不勝感激。 bashshell中提供了for命令,用于創建通過一系列值重復的循環,每次重復使用系列中的一個值執行一個定義的命令…

    2017-07-15
  • 基于ssl協議和openssl工具建立私有CA

    前言     要自建CA需先了解openssl工具和ssl協議還有各加密類型     ssl(Secure Socket Layer)安全套接字層當前版本為3.0,瀏覽器與Web服務器之間的身份認證和加密數據傳輸,它工作在傳輸層和各應用層之間,用戶可以選擇是否使用ssl進行傳輸,選擇ssl協議將調用…

    Linux干貨 2015-05-07
  • Linux命令學習

    閱讀目錄 Linux cat命令 file命令 dd命令 hexdump命令 cat命令   cat三大功能:      1.一次顯示整個文件:cat filename      2.從鍵盤創建一個文件:cat > filename 注意只能創建新文件,…

    Linux干貨 2017-07-16
欧美性久久久久