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的健康狀況檢查和LVS director的故障轉移
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 server在22號端口
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的信息
③、最后看看地址信息
最后看看效果。
啟動keepalived 使用-d選項 是一個很好的方式檢測你的配置文件是否有效。
7、故障轉移
你需要做的只是在另外一臺節點配置keepalived,復制keepalived的配置文件,改變優先級,狀態到bakcup,運行keepalived。你會看到備份服務的日志信息,服務器接受了它的備份狀態,如果你去掉了主服務,備份服務器將會接管Master狀態
主服務和備份服務器,只是 lvs_id 指令, priority ,state 指令不一樣其余的都一樣 ,
另外你應該移除主服務器看看備份服務器的日志信息,如果主服務器沒掛,備份服務器將會看不到VIP的信息。
8、配置keepalived,一個更加復雜的網絡, 2個VIPs,(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_GET的MD5碼。同樣你想配置https的持久連接—使你的客戶一直連接到real server,就像你去購物的事物,這種狀態要一直保持著,不然后果很嚴重。
最后的字符串你需要追蹤的,后面的服務檢查會使用到。
配置文件: ! 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
③、查看ip
④、看看效果
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_CHECK在80端口,不要忽略了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