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
下一篇 2015-07-24

相關推薦

  • bash腳本編程實例

    bash腳本編程實例 1.寫一個腳本 接受一個以上文件路徑作為參數 顯示每個文件擁有的行數 總結說明本次共為幾個文件統計了其行數 #!/bin/bash # read -p “please input some paths:” paths if [ -z $paths ];then echo “There are not any paths inputtin…

    Linux干貨 2017-08-14
  • grep命令

    grep命令:grep(global search regular expression(RE) and print out the line,全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來;grep搜索的結果被送到屏幕,不影響原文件內容。Unix的grep家族包括grep、egrep和fgrep…

    Linux干貨 2016-08-08
  • 從增刪改查角度學習linux基礎命令

    從增刪改查角度學習linux基礎命令   本文從文件的增加、刪除、修改、查詢四個角度介紹linux的基本命令,介紹如下:   一.增 touch命令是最常用的創建文件的命令,它的常見參數如下: -a 或–time=atime或–time=access或–time=use  只更改存取時間。 -c 或&#…

    2017-07-15
  • 硬鏈接和軟鏈接的說明

    1、硬鏈接和軟鏈接的區別    (1)、原理上:                   【1】 硬鏈接(hard link):                 &…

    2017-07-21
  • rsyslog將日志記錄于MySQL中

    數據庫服務器:CentOS7 192.168.119.159   日志:CentOS6 192.168.119.129     準備mysql數據庫 和 用戶賬戶 [root@localhost ~]# yum install mariadb-server   [root@localhost ~]# systemctl…

    2018-02-05
  • 幾個有意思的小腳本

    ①.用腳本畫一個圣誕樹 效果 ②.用腳本畫一個類似國際象棋的棋盤 半成品效果 再像這樣在下面多寫幾個循環,就可以了,我這個方法太笨,全寫完要截圖的太多,就放一部分意思下 ③.編寫一個腳本,打印出九九乘法表 效果 ④.編寫一個腳本,可接收一個 1-7 的數字作為參數,用 if 和 case 兩種方法實現根據輸入的數字輸出對應星期的英文 用if的方法 用case…

    2017-05-11
欧美性久久久久