LVS NAT + Keepalived HOWTO

LVS NAT + Keepalived HOWTO

 

這篇文章主要講解了,基于LVS/NAT,安裝,運行與檢測keepalived

目錄

    1、什么是keepalived?

    2、規劃你的網絡    

    3、配置內核參數

    4、編譯ipvsadm (可選)

    5、編譯keepalived(可選)

    6、一個簡單的keepalived實例。一個負載均衡器,一個ssh 服務器

    7、故障轉移

    8、一個稍微復雜的keepalived實例,負載均衡器,兩個ssh server,兩個httpd server

    9、開機啟動腳本(空)

    10、注意事項

    11、總結

1、什么是keepalived?

    keepalived的作者說:

    keepalived的主要目第是為了給linux virtual server項目提供健壯的keepalive功能。這個項目使用C編寫,可以在TCP/IP第三,四,五層實現檢測功能。這個檢測框架給予了keepalived進程檢查LVS 服務池狀態的能力。keepalived實現了vrrpv2 處理director的故障轉移。簡單來說,keepalived是一個用戶空間進程,主要目的就是為了LVS的健康狀況檢查和LVdirector的故障轉移

    keepalived是一個項目,包括通過LVS實現負載均衡,通過VRRP實現故障轉移,監視real server的健康狀況。重要的是,它是一個包實現了 lvs+mon+fake+heartbeat的所有功能 。使用keepalived,管理員可以快速的構建一個冗余的負載均衡解決方案而不需要解決大量安裝包和腳本的問題。 

    本實例使用的軟件:

        CentOS 6.6
        keepalived-1.2.13-5.el6_6.x86_64      
        ipvsadm-1.26-4.el6.x86_64
        openssh-5.3p1-104.el6.x86_64        
        httpd-2.2.15-39.el6.centos.x86_64

2、規劃你的網絡

畫出你的網絡的邏輯結構,規劃好你的網絡有助于減少以后遇到的困難。列出你打算使用的IP,任何額外的路由IP,負載均衡機器打算使用的IP,或者其它相關的信息。

3、配置內核參數:

echo "1" > /proc/sys/net/ipv4/ip_forwarding

4. 編譯ipvsadm(可選的)

5. 編譯keepalived

[root@node4 src]# tar -xf keepalived-1.2.19.tar.gz; cd keepalived-1.2.19; ./configure; make; make install

 keepalived編譯起來很簡單,中間報錯,安裝相應的軟件包就可以了,從www.keepalived.org,獲取最新版本的包,獲取更多信息,請閱讀下載keepalived附帶的INSTALL文件

6、配置keepalived:一個簡單的網絡,1負載均衡/虛擬路由 ,一個real server22號端口

  Client (on the internet somewhere) –> load balancer –> realserver 

負載均衡器的IP:
Eth0: 192.168.198.160
VIP :192.168.198.161
Eth1:10.0.0.4
VIP eth1:10.0.0.1
Real server:
IP:10.0.0.2 確保網關指向10.0.0.1

主要配置文件在/etc/keepalived/keepalived.conf ,如果keepalived什么錯誤都沒報告,意味著你很難發現配置的錯誤,啟動keepalived使用-d選項,將會加載配置到syslog里面去。

配置

! 以!開頭的都是注釋
 
global_defs { 
  
     ! 這是警告郵件將會發送誰那里去 
   notification_email {                    
        admins@example.com 
    fakepager@example.com 
    ! 這里可以添加一些其它的,你想添加的郵件。
   } 
   notification_email_from admins@example.com 
 
   !使用恩地機器發送郵件
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30 
 
   ! 每一個負載均衡器應該有不同的ID,這將會在SMTP警告中使用,因此你應該讓每一個路由很容易的辨別。
   lvs_id LVS_EXAMPLE_01 
} 
 
 
vrrp_sync_group VG1 { 
   group { 
      VI_1 
      VI_GATEWAY 
   } 
} 
 
 
!每一個接口需要至少一個vrrp_instance ,每一個vrrp_instance 是一個邏輯上劃分的VIPs組,你也可以有多個vrrp_instance ,如果你喜歡的話。
 
vrrp_instance VI_1 { 
        state MASTER 
        interface eth0 
        lvs_sync_daemon_inteface eth0 
        virtual_router_id 51 
 
        !主節點和備節點是根據優先級選出來的,如果你的state為master但是,優先級低,還是會變為備份節點的。
        priority 150 
    ! 投票的時間間隔
        advert_int 1 
     ! 從主節點切換為備節點是時發送警告。
        smtp_alert 
        authentication { 
                auth_type PASS 
                auth_pass example 
        } 
     ! 配置在keppalived機器上面的IP地址,后面我們會指定那些real server會綁定在這個IP地址上面
        virtual_ipaddress { 
                192.168.1.11 
        ! and more if you want them   
        ! 你也可以指定更多的地址。
        } 
} 
 
 ! 現在配置一個實例real server 默認使用網關方式。
 
vrrp_instance VI_GATEWAY { 
        state MASTER 
        interface eth1 
        lvs_sync_daemon_inteface eth1 
        virtual_router_id 52 
        priority 150 
        advert_int 1 
        smtp_alert 
        authentication { 
                auth_type PASS 
                auth_pass example 
        } 
        virtual_ipaddress { 
                10.20.40.1 
        } 
} 
 
 ! 現在配置更多的信息,我們僅僅配置一個virtual server監聽在22號端口。
   
virtual_server 192.168.1.11 22 { 
    delay_loop 6 
    lb_algo rr 
    lb_kind NAT 
    nat_mask 255.255.255.0 
    protocol TCP 
 
    real_server 10.20.40.10 22 { 
        weight 1 
 
        TCP_CHECK { 
                connect_timeout 3 
                connect_port 22 
        } 
    } 
}

然后:

①、Tail -f /var/log/messages  看看輸出的日志信息

    ②、Ipvsadm -L -n 查看ipvs的信息

    B4TL@IN1E7(147P8AGFEZ@N.jpg

  ③、最后看看地址信息

 51SF5_{HC3)LKPGSM0``C1R.jpg

最后看看效果。


FM_Y7XDF4_M(FMAKW}N0XS8.jpg

 啟動keepalived 使用-d選項 是一個很好的方式檢測你的配置文件是否有效。

 

7、故障轉移  

  你需要做的只是在另外一臺節點配置keepalived,復制keepalived的配置文件,改變優先級,狀態到bakcup,運行keepalived。你會看到備份服務的日志信息,服務器接受了它的備份狀態,如果你去掉了主服務,備份服務器將會接管Master狀態

  主服務和備份服務器,只是  lvs_id 指令, priority ,state 指令不一樣其余的都一樣 ,

  另外你應該移除主服務器看看備份服務器的日志信息,如果主服務器沒掛,備份服務器將會看不到VIP的信息。

8、配置keepalived,一個更加復雜的網絡, 2VIPs,(1 http/https ,1 ssh) 和同時每個VIP都有兩個real server

Load balancer IPs:     
    負載均衡器外部接口(eth0): 192.168.198.160
    外部http/https realservers VIP: 192.168.1.162
    外部 ssh realservers VIP: 192.168.1.161
    負載均衡器內部接口(eth1): 10.0.0.4
    配置在eth1上的real server默認網關: 10.0.0.1
  Realserver 1 (http, [https]): 
    IP: 10.0.0.2
  Realserver 2 (http, [https]): 
    IP: 10.0.0.3
  Realserver 3 (ssh): 
    IP: 10.0.0.2
  Realserver 4 (ssh): 
    IP: 10.0.0.3

確保real server的網關指向10.0.0.1

很少的情況會使用這種配置,有其你想去學習使用genhash 命令,生成HTTP get或者SSL_GETMD5碼。同樣你想配置https的持久連接使你的客戶一直連接到real server,就像你去購物的事物,這種狀態要一直保持著,不然后果很嚴重。

917_7S6]HW)VA`9~_2RU]_X.png

最后的字符串你需要追蹤的,后面的服務檢查會使用到。

配置文件:
! 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_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}
 
virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
 
    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
 
virtual_server 10.10.10.2 1358 {
    delay_loop 6
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
 
    sorry_server 192.168.200.200 1358
 
    real_server 192.168.200.2 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
 
    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
 
virtual_server 10.10.10.3 1358 {
    delay_loop 3
    lb_algo rr 
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
 
    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
 
    real_server 192.168.200.5 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

最后檢查

①、Tail -f /var/log/messages

    ②、查看ipvs

C8PO1C_([%FC~E4[ME]H1WE.jpg

    ③、查看ip

G8P$}W10%%`CQWZGH9F2FEB.jpg

    ④、看看效果

ZH$(Z(3K3{`C)KGTIP1X(NY.png{ZXV6ET_4G[]6]$R6K]7Z5P.png

Ssh測試,ssh應該使用源地址綁定好一些。

  。。。

要想實現故障轉移,只需要在另外一個節點,復制keepalived.conf 修改lvs_id priority,state。

9.  開機啟動腳本實例

這個先留著,

10、故障排除

    運行keepalived使用-d選項,查看/var/log/messages

    查看ipvsadm的輸出

    查看ip addr list 的輸出

   注意事項

1) 打開IP forwarding (echo "1" > /proc/sys/net/ipv4/ip_forward)

2) 使用新版本的lvs

3) Readl server必須把負載均衡器當做網關

4) Real server是內網和外網不重要,重要的是他們必須在同一個LANs或者VLAN里面。

5) 你必須有一個vrrp_instance 部分定義在 keepalived 來配置VIP.

6) VRRP里面,優先級越小發言權越小。

7) VRRP 實例不能使用相同的route_id keepalived不會報錯,但是你將看不到VRRP實例的IP地址。

8) 盡管keepalived不會抱怨你忽略了一些選項,但是不推薦遺留選項,你使用了TCP_CHECK80端口,不要忽略了connect_port 80這條指令。 

 

這些都非常明顯,但是他們確實是可能出現在配置問題里面的。

11、總結

    1、還是說,這個博客平臺的后臺編輯,差勁。。。浪費時間,每次編輯出來都很丑,當然我自己布局也有部分原因

    2、這篇文章是我在keepalived的官網上翻譯的,把配置文件修改為自己電腦的配置文件了。

    3、因為剛學,這時候keepalived不夠精通,文章質量不夠高,另外這樣翻譯有些事倍功辦的效果,說了那么多,很多都是廢話。

    4、還是要說我的博客寫的不行,可能太趕時間了吧,速度快,文章就不夠精品,速度慢,可是時間卻沒那么多。我下面看情況,把keepalived的配置文件詳解,貼出來。

原文鏈接:

http://www.keepalived.org/LVS-NAT-Keepalived-HOWTO.html

原創文章,作者:艾賀,如若轉載,請注明出處:http://www.www58058.com/8177

(0)
艾賀艾賀
上一篇 2015-09-19
下一篇 2015-09-22

相關推薦

  • Linux網絡屬性配置—iproute命令家族

    ip命令: show / manipulate routing, devices, policy routing and tunnels ip [ OPTIONS ] OBJECT { COMMAND | help } OBJECT := { link | addr | route | netns  } ip  OBJECT: ip li…

    Linux干貨 2016-12-04
  • 圖解Man

    個人淺見 歡迎指正

    Linux干貨 2016-10-18
  • Linux上bash的部分基礎特性:

    命令補全: tab      shell程序在接收到用戶執行命令的請求,分析完成后,最左側的字符串會被當做命令 命令查找機制:     查找內部命令:     根據PATH環境變量中設定的目錄,自左而右逐個搜索目錄下的文件名 &n…

    Linux干貨 2017-03-28
  • 計算機的組成及其功能

    計算機現如今已經成為了我們生活中不可缺少的一部分,那么它是由什么組成的呢?簡單來說,計算機系統是由硬件系統(hardware system)和 軟件系統(software system)兩部分組成。 Mac電腦背景圖.jpg 下面我們來羅列一下計算機系統的主要組成,請看下圖 計算機系統組成.png 計算機的功能 我們知道計算機十分強大,那么它都有哪…

    Linux干貨 2017-08-23
  • vim必掌握用法

    vim最入門用法大全

    Linux干貨 2017-12-03
  • Linux下的LVM管理命令

    一. 何為LVM?     Logical Volume Manager的縮寫,它可以把多個分區、硬盤甚至RAID組合成一個存儲設備來使用,并可以擴展或縮減空間。LVM有三層組成組成:底層的PV,中間的VG,上層的LV,如圖所示         &n…

    Linux干貨 2015-12-06
欧美性久久久久