lvs + keepalived HOW TO
LVS?NAT?+?Keepalived?HOWTO
?
這篇文章主要講解了,基于LVS/NAT,安裝,運行與檢測keepalived
目錄 
????1、什么是keepalived?
????2、規(guī)劃你的網(wǎng)絡(luò)????
????3、配置內(nèi)核參數(shù)
????4、編譯ipvsadm (可選)
????5、編譯keepalived(可選)
????6、一個簡單的keepalived實例。一個負載均衡器,一個ssh 服務(wù)器
????7、故障轉(zhuǎn)移
????8、一個稍微復(fù)雜的keepalived實例,負載均衡器,兩個ssh server,兩個httpd server
????9、開機啟動腳本(空)
????10、注意事項
????11、總結(jié)
1、什么是keepalived?
????keepalived的作者說:
????keepalived的主要目第是為了給linux?virtual?server項目提供健壯的keepalive功能。這個項目使用C編寫,可以在TCP/IP的第三,四,五層實現(xiàn)檢測功能。這個檢測框架給予了keepalived進程檢查LVS?服務(wù)池狀態(tài)的能力。keepalived實現(xiàn)了vrrpv2?處理director的故障轉(zhuǎn)移。簡單來說,keepalived是一個用戶空間進程,主要目的就是為了LVS的健康狀況檢查和LVS?director的故障轉(zhuǎn)移
????keepalived是一個項目,包括通過LVS實現(xiàn)負載均衡,通過VRRP實現(xiàn)故障轉(zhuǎn)移,監(jiān)視real?server的健康狀況。重要的是,它是一個包實現(xiàn)了?lvs+mon+fake+heartbeat的所有功能?。使用keepalived,管理員可以快速的構(gòu)建一個冗余的負載均衡解決方案而不需要解決大量安裝包和腳本的問題。?
????本實例使用的軟件:
????????CentOS?6.6keepalived-1.2.13-5.el6_6.x86_64??????ipvsadm-1.26-4.el6.x86_64openssh-5.3p1-104.el6.x86_64????????httpd-2.2.15-39.el6.centos.x86_64
2、規(guī)劃你的網(wǎng)絡(luò)
畫出你的網(wǎng)絡(luò)的邏輯結(jié)構(gòu),規(guī)劃好你的網(wǎng)絡(luò)有助于減少以后遇到的困難。列出你打算使用的IP,任何額外的路由IP,負載均衡機器打算使用的IP,或者其它相關(guān)的信息。
3、配置內(nèi)核參數(shù):
echo?"1"?>?/proc/sys/net/ipv4/ip_forwarding4.?編譯ipvsadm(可選的)
5.?編譯keepalived
[root@node4?src]#?tar?-xf?keepalived-1.2.19.tar.gz;?cd?keepalived-1.2.19;?./configure;?make;?make?install?keepalived編譯起來很簡單,中間報錯,安裝相應(yīng)的軟件包就可以了,從www.keepalived.org,獲取最新版本的包,獲取更多信息,請閱讀下載keepalived附帶的INSTALL文件
6、配置keepalived:一個簡單的網(wǎng)絡(luò),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?確保網(wǎng)關(guān)指向10.0.0.1
主要配置文件在/etc/keepalived/keepalived.conf ,如果keepalived什么錯誤都沒報告,意味著你很難發(fā)現(xiàn)配置的錯誤,啟動keepalived使用-d選項,將會加載配置到syslog里面去。
配置
!?以!開頭的都是注釋global_defs?{?!?這是警告郵件將會發(fā)送誰那里去?notification_email?{????????????????????admins@example.com?fakepager@example.com?!?這里可以添加一些其它的,你想添加的郵件。}?notification_email_from?admins@example.com?!使用恩地機器發(fā)送郵件smtp_server?127.0.0.1?smtp_connect_timeout?30?!?每一個負載均衡器應(yīng)該有不同的ID,這將會在SMTP警告中使用,因此你應(yīng)該讓每一個路由很容易的辨別。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?!主節(jié)點和備節(jié)點是根據(jù)優(yōu)先級選出來的,如果你的state為master但是,優(yōu)先級低,還是會變?yōu)閭浞莨?jié)點的。priority?150?!?投票的時間間隔advert_int?1?!?從主節(jié)點切換為備節(jié)點是時發(fā)送警告。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???!?你也可以指定更多的地址。}? }?!?現(xiàn)在配置一個實例real?server?默認使用網(wǎng)關(guān)方式。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?}? }?!?現(xiàn)在配置更多的信息,我們僅僅配置一個virtual?server監(jiān)聽在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、故障轉(zhuǎn)移??
??你需要做的只是在另外一臺節(jié)點配置keepalived,復(fù)制keepalived的配置文件,改變優(yōu)先級,狀態(tài)到bakcup,運行keepalived。你會看到備份服務(wù)的日志信息,服務(wù)器接受了它的備份狀態(tài),如果你去掉了主服務(wù),備份服務(wù)器將會接管Master狀態(tài)
??主服務(wù)和備份服務(wù)器,只是??lvs_id?指令,?priority?,state?指令不一樣其余的都一樣?,
??另外你應(yīng)該移除主服務(wù)器看看備份服務(wù)器的日志信息,如果主服務(wù)器沒掛,備份服務(wù)器將會看不到VIP的信息。
8、配置keepalived,一個更加復(fù)雜的網(wǎng)絡(luò),?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負載均衡器內(nèi)部接口(eth1):?10.0.0.4配置在eth1上的real?server默認網(wǎng)關(guān):?10.0.0.1Realserver?1?(http,?[https]):?IP:?10.0.0.2Realserver?2?(http,?[https]):?IP:?10.0.0.3Realserver?3?(ssh):?IP:?10.0.0.2Realserver?4?(ssh):?IP:?10.0.0.3
確保real server的網(wǎng)關(guān)指向10.0.0.1
很少的情況會使用這種配置,有其你想去學(xué)習使用”genhash”?命令,生成HTTP?get或者SSL_GET的MD5碼。同樣你想配置https的持久連接--使你的客戶一直連接到real?server,就像你去購物的事物,這種狀態(tài)要一直保持著,不然后果很嚴重。 
最后的字符串你需要追蹤的,后面的服務(wù)檢查會使用到。
配置文件: !?Configuration?File?for?keepalivedglobal_defs?{notification_email?{acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from?Alexandre.Cassen@firewall.locsmtp_server?192.168.200.1smtp_connect_timeout?30router_id?LVS_DEVEL }vrrp_instance?VI_1?{state?MASTERinterface?eth0virtual_router_id?51priority?100advert_int?1authentication?{auth_type?PASSauth_pass?1111}virtual_ipaddress?{192.168.200.16192.168.200.17192.168.200.18} }virtual_server?192.168.200.100?443?{delay_loop?6lb_algo?rrlb_kind?NATnat_mask?255.255.255.0persistence_timeout?50protocol?TCPreal_server?192.168.201.100?443?{weight?1SSL_GET?{url?{path?/digest?ff20ad2481f97b1754ef3e12ecd3a9cc}url?{path?/mrtg/digest?9b3a0c85a887a256d6939da88aabd8cd}connect_timeout?3nb_get_retry?3delay_before_retry?3}} }virtual_server?10.10.10.2?1358?{delay_loop?6lb_algo?rr?lb_kind?NATpersistence_timeout?50protocol?TCPsorry_server?192.168.200.200?1358real_server?192.168.200.2?1358?{weight?1HTTP_GET?{url?{?path?/testurl/test.jspdigest?640205b7b0fc66c1ea91c463fac6334d}url?{?path?/testurl2/test.jspdigest?640205b7b0fc66c1ea91c463fac6334d}url?{?path?/testurl3/test.jspdigest?640205b7b0fc66c1ea91c463fac6334d}connect_timeout?3nb_get_retry?3delay_before_retry?3}}real_server?192.168.200.3?1358?{weight?1HTTP_GET?{url?{?path?/testurl/test.jspdigest?640205b7b0fc66c1ea91c463fac6334c}url?{?path?/testurl2/test.jspdigest?640205b7b0fc66c1ea91c463fac6334c}connect_timeout?3nb_get_retry?3delay_before_retry?3}} }virtual_server?10.10.10.3?1358?{delay_loop?3lb_algo?rr?lb_kind?NATnat_mask?255.255.255.0persistence_timeout?50protocol?TCPreal_server?192.168.200.4?1358?{weight?1HTTP_GET?{url?{?path?/testurl/test.jspdigest?640205b7b0fc66c1ea91c463fac6334d}url?{?path?/testurl2/test.jspdigest?640205b7b0fc66c1ea91c463fac6334d}url?{?path?/testurl3/test.jspdigest?640205b7b0fc66c1ea91c463fac6334d}connect_timeout?3nb_get_retry?3delay_before_retry?3}}real_server?192.168.200.5?1358?{weight?1HTTP_GET?{url?{?path?/testurl/test.jspdigest?640205b7b0fc66c1ea91c463fac6334d}url?{?path?/testurl2/test.jspdigest?640205b7b0fc66c1ea91c463fac6334d}url?{?path?/testurl3/test.jspdigest?640205b7b0fc66c1ea91c463fac6334d}connect_timeout?3nb_get_retry?3delay_before_retry?3}} }
最后檢查
①、Tail?-f?/var/log/messages
????②、查看ipvs
????③、查看ip
????④、看看效果
Ssh測試,ssh應(yīng)該使用源地址綁定好一些。
? 。。。
要想實現(xiàn)故障轉(zhuǎn)移,只需要在另外一個節(jié)點,復(fù)制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必須把負載均衡器當做網(wǎng)關(guān)
4)?Real?server是內(nèi)網(wǎng)和外網(wǎng)不重要,重要的是他們必須在同一個LANs或者VLAN里面。
5)?你必須有一個vrrp_instance?部分定義在?keepalived?來配置VIP。.
6)?在VRRP里面,優(yōu)先級越小發(fā)言權(quán)越小。
7)?VRRP?實例不能使用相同的route_id?,keepalived不會報錯,但是你將看不到VRRP實例的IP地址。
8)?盡管keepalived不會抱怨你忽略了一些選項,但是不推薦遺留選項,你使用了TCP_CHECK在80端口,不要忽略了connect_port?80這條指令。?
?
這些都非常明顯,但是他們確實是可能出現(xiàn)在配置問題里面的。
11、總結(jié)
????1、還是說,這個博客平臺的后臺編輯,差勁。。。浪費時間,每次編輯出來都很丑,當然我自己布局也有部分原因
????2、這篇文章是我在keepalived的官網(wǎng)上翻譯的,把配置文件修改為自己電腦的配置文件了。
????3、因為剛學(xué),這時候keepalived不夠精通,文章質(zhì)量不夠高,另外這樣翻譯有些事倍功辦的效果,說了那么多,很多都是廢話。
????4、還是要說我的博客寫的不行,可能太趕時間了吧,速度快,文章就不夠精品,速度慢,可是時間卻沒那么多。我下面看情況,把keepalived的配置文件詳解,貼出來。
原文鏈接:
http://www.keepalived.org/LVS-NAT-Keepalived-HOWTO.html
轉(zhuǎn)載于:https://blog.51cto.com/amyhehe/1695245
總結(jié)
以上是生活随笔為你收集整理的lvs + keepalived HOW TO的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: iOS Mac JSON To Mod
 - 下一篇: [Leetcode] Flatten B