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 ,prioritystate。

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 10:36
下一篇 2015-09-22 09:17

相關推薦

  • 8-8 處理文本工具sed及vim文本編輯工具

    處理文本工具sed及vim文本編輯工具 Sed:   sed是一種在線編輯器、行編輯器,一次處理一行內容。在處理時,把當前處理的行存儲在臨時緩沖區中,該緩沖區稱為“模式空間”,接著用sed命令處理緩沖區中的內容,處理完畢后,把緩沖區的內容送到標準輸出;然后緊接著處理下一行,重復完成相同的操作,直到文件末尾;sed處理的整個過程中,對象文件…

    Linux干貨 2016-08-11
  • 位置變量;if;for循環

    向腳本傳遞參數就是用位置參數變量實現 傳遞給命令的參數稱為位置參數  ls  /etc/var Myscript.sh  argu1 argu2 ….${10}  ${11}…   引用方式 :$1就是引用整個腳本位置參數的第一個,第一個會自動保存在$1中  &nb…

    Linux干貨 2016-08-15
  • CentOS 7源碼安裝httpd服務

    httpd的簡介     httpd是一個開源軟件,且一般用作web服務器來使用。目前最流行的web服務器軟件叫做httpd,httpd還有一個俗稱叫apache,Apache是一個軟件基金會,httpd也是這個軟件基金會的一個項目。在早期的http server就叫做apache,到了http server 2.0以…

    Linux干貨 2016-08-24
  • 分布式存儲介紹、FastDFS 部署

    什么是分布式系統? 簡單來說,多臺主機提供同一個服務,例如負載均衡集群,就是一個分布式系統。 什么是分布式存儲? 看看某寶,上面多少圖片,如果使用傳統的單機存儲,需要準備多大的磁盤空間?讀寫性能如何提升? 上圖就是一個分布式存儲的結構,此處存儲節點不在是磁盤,而是多個主機組成,多個主機內部通信實現數據副本,客戶端發來的請求發往前端,前端分發至后端,有點像負載…

    2017-03-08
  • web服務及常見配置

    一次HTTP請求過程1、建立連接:接收或拒絕連接請求2、接收請求:接收客戶端請求報文中對某資源的一次請求的過程Web訪問響應模型(Web I/O)單進程I/O模型:啟動一個進程處理用戶請求,而且一次只處理一個,多個請求被串行響應多進程I/O模型:并行啟動多個進程,每個進程響應一個連接請求復用I/O結構:啟動一個進程,同時響應N個連接請求實現方法:多線程模型和…

    Linux干貨 2017-10-09
  • CentOS6基礎網絡配置

    雖然也可以用命令進行臨時修改(ifconfig來設置IP,用route來配置網關,用hostname來配置主機名等等),但是重啟后會丟失。所以本文主要通過修改相關配置文件來實現: 配置dns、網關、ip地址 修改網卡名字 單網卡多IP配置 多網卡單IP配置 本次系統運行環境:  配置dns、網關、ip地址 首先,我們對網卡配置相關的主要的幾個文件簡…

    Linux干貨 2016-09-06
欧美性久久久久