LVShtml
Linux vritual server是針對linux內核開發的一個負載均衡項目,lvs其實是一個基於IP 的一個虛擬化應用。LVS想已成爲Linux系統的一部分。默認編譯爲IP_VS模塊,必要時能夠調用。linux
KeepAlived web
Keepalived 是針對LVS的一款強大的輔助工具,主要用來提供故障切換和健檢查功能,如判斷LVS負載調度器、節點服務器的可用性,及時隔離並替換爲新的服務器,當故障主機恢復後將其從新加入羣集。在非LVS羣集環境中使用時Keepalived也能夠做爲熱備軟件使用。算法
Keepalived採用VRRP(virtual router redundancy protocol,虛擬路由冗餘協議)熱備份協議,以軟件的方式實現linux服務器的多機熱備功能。VRRP是針對路由器的一種備份解決方案-----由多臺路由器組成一個熱備組。經過共用的虛擬IP地址對外提供服務;每一個熱備組內同一時刻只有一臺主服務器提供服務,其餘服務器處於冗餘狀態,若當前在線的服務器失敗,其餘服務器會自動接替(優先級決定接替順序)虛擬IP地址,以繼續提供服務。服務器
熱備組內的每臺服務器均可以成爲主服務器,虛擬IP地址(VIP)能夠在熱備組內的服務器之間進行轉移,因此也稱爲漂移IP地址,使用Keepalived時,漂移地址的實現不須要手動創建虛擬接口配置文件(如eth0:0),而是由Keepalived根據配置文件自動管理。負載均衡
下面是我實驗的兩個案例: (LVS-NAT+HA)和 (LVS-DR+HA)ide
LVS-NAT+HA工具
實驗拓撲以下:(全是RHEL6 X32模擬)oop
地址安排:測試
主調度器: 外網ip 12.12.12.1 /24
內網ip 192.168.1.1/24
輔助調度器: 外網 ip 12.12.12.2/24
內網ip 192.168.1.2/24
VIP虛擬ip 12.12.12.10/24 (web服務) 192.168.1.254 (內網的網關)
Web節點 1 : 192.168.1.3/24 gw 192.168.1.254
Web節點2 :19.168.1.4/24 gw 192.168.1.254
分析:
① 要實現LVS和keepalived實現的HA(高可用性)結合,須要安軟ipvsadm 這個工具包來實現負載平衡以及安裝keepalived實現高可用性,故障切換。
② 由於是LVS是NAT的工做模式,要解決防火牆以及路由轉發的問題。
③ keepalived 是基於VRRP協議來工做的,因此要容許他們的通訊。
④ keepalived 主配置文件的問題,文件中肯定誰是主,誰是輔,以及VIP ,RIP。
⑤ LVS和Keepalived都是虛擬服務的一部分,要加載IP_VS模塊。
⑥ web節點需連接vip網關,並提供web服務。
步驟:
先來解決第一步
rpm 安裝 ipvsadm-1.25-9.el6.i686.rpm
源碼安裝keepalived 安裝以前 必須先安裝內核開發包kernel-devel以及openssl-devel、popt-devel等支持庫 沒有要安裝
進入解壓目錄
./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-71.el6.i686/ 配置 建議安裝到/ 目錄下 否則不會自動添加到系統服務。
make && make 安裝
安裝後會生成如下的目錄和文件
Keepalived.conf 是主要配置文件
而且配置 服務開機自動啓動 chkconfig keepalived on
配置防火牆 容許 80端口 和 目標地址是224.0.0.18的包 (224.0.0.18)是VRRP的通訊地址 配置SNAT策略和容許源地址是80的轉發包
修改/etc/sysctl.conf 配置文件 實現轉發功能
把「net.ipv4.ip_forward = 0 」的值給成1 啓用轉發
sysctl -p 生效
配置keepalived的主配置文件
主配置文件由三部分組成, 註釋文字以」!」符號開頭。
使用global_defs {……}區段指定全局參數。
使用vrrp_instance 實例名稱{……}區段指定VRRP熱備參數。
使用vritual_server ip地址 {……}指定虛擬服務。
主配置調度器的配置
! 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_1 #本服務器的ID號爲 LVS_1 必須是惟一的
}
!###############定義內部網關實例################################
vrrp_instance VI_1 { #開始定義VRRP實例 名稱爲VI_1 一組服務器的名稱要一致
state MASTER #熱備狀態,MASTER表示主服務器;SLAVE表示備用服務器;當 有多臺備用的服務器,熱備狀態改成 BACKUP,此狀態是由 priority 的值來決定的,當前priority 的值小於備機的值,那麼將會失MASTER 狀態
interface eth0 #檢測承載VIP流量的網卡
virtual_router_id 51 #虛擬路由器的ID號。主、輔機的 virtual_router_id 必須相同
priority 100 #主機的優先級,數值越大優先能越高
advert_int 1 #主備之間的通告間隔秒數(心跳頻率)
authentication { #認證信息,每一個熱備組保持一致
auth_type PASS #認證類型,主備切換時的驗證
auth_pass 1111 #密碼
}
virtual_ipaddress { #指定虛擬地址(VIP),能夠有多個
192.168.1.254 #HA 虛擬 ip,可加多個
}
}
!#######################定義外網web服務實例#############################
vrrp_instance VI_11 {
state MASTER
interface eth1
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
12.12.12.10
}
}
!###############################定義網關虛擬地址######################
virtual_server 192.168.1.254 { #虛擬服務器地址(VIP)
delay_loop 6 #健康檢查的間隔時間(秒),每隔 6 秒查詢 realserver狀態
lb_algo rr #lvs 調度算法,這裏使用輪詢
lb_kind NAT #lvs 負載均衡機制,這裏使用NAT
nat_mask 255.255.255.0 #虛擬ip的子網掩碼
! persistence_timeout 50 #同一 IP 的鏈接 50 秒內被分配到同一臺 realserver
protocol TCP ##用 TCP 協議檢查 realserver 狀態
real_server 192.168.1.1 { #第一個網關節點的地址
weight 1 #節點的權重
TCP_CHECK { #健康檢查方式
connect_timeout 3 #故障重試秒數(即鏈接超時)
nb_get_retry 3 #重試延遲(即重試次數)
delay_before_retry 3 #重試間隔(秒)
}
}
real_server 192.168.1.2 { #第二個網關節點的地址
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
!########################定義虛擬web地址 ##############################
virtual_server 12.12.12.10 80 { #虛擬服務器地址(VIP)、端口
delay_loop 6
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
!persistence_timeout 50
protocol TCP
real_server 192.168.1.3 80 { #第一個web服務器
weight 1
TCP_CHECK {
connect_port 80 #指定檢測的端口
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.4 80 { #第二個服務器
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
輔助負載調度器的配置和主的大體相同 擔心三點配置不能同樣
全局配置中的ID標識
狀態
優先級 !注意這裏一個VRRP 實例中有兩個不同 同理 兩個VRRP實例中…… 本身算
而後負加載 ip_vs模塊 modprobe ip_vs
注意從服務器重啓後會失效
啓動keepalived服務
好了 進度到一半了
輔助調度器同樣的配置 處理keepalived的主配置文件不一樣
主調度器命令 ip address show dev 網卡名稱 來查看端口監測的ip,主調度其中每一個網卡應承載兩個ip (VIP) 應爲他是主 MASTER 優先級是100
輔助調度器 是一個正常ip 沒有負載 VIP
爲了測試keepalived可以正常實行故障切換 用ping + -t 命令檢測 在ping的過程當中斷開主調度器的連接 然他不能和輔助調度器連接 VRRP 輔助調度器就認爲主調度器down掉,邊自動的成爲主調度器 承載VIP的流量。Ping的過程當中是 以下的效果
RIP(web節點)的配置
開啓httpd服務
防火牆容許
網關指向VIP網關 也就是 192.168.1.254
這裏兩臺web服務器我用了 不一樣的內容html文檔
若是web節點down掉或出現問題
主從調度器上將把他排除 用ipvsadm命令查不到他
說明192.168.1.4這個web節點有問題 用TCP 協議檢測他的80 端口
配置正常後
最後 測試頁面以下
請求被髮送到web節點1
請求被髮送到web節點2
主負載調度器查看
ipvsadm -lcn
還算比較平衡
LVS-DR +HA
實驗拓撲以下:
主調度器:12.12.12.1/24
輔助調度器: 12.12.12.2/24
VIP:12.12.12.10/24
Web01: 12.12.12.3/24
Web02:12.12.12.4/24
分析:
思路基本一致
① 在主輔調度器上安裝ipvsadm和keepalived軟件
② 解決主輔調度器的連通性問題
③ ip_vs模塊的應用
④ 配置文件配置
⑤ web節點的配置
步驟:
思路 ① ② ③ 就省去詳細步驟了,參考LVS-NAT+HA或 連接 http://zhangyongli.blog.51cto.com/6691702/1288731
來直接看看配置文件的不一樣。
主負載調配器
! 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_1
}
!##########################VRRP實例#################################
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 {
12.12.12.10
}
}
!################################定義虛擬服務器####################
virtual_server 12.12.12.10 80 {
delay_loop 6
lb_algo rr
lb_kind DR #注意是DR
!persistence_timeout 50
protocol TCP
real_server 12.12.12.3 80 { #第一個真實web
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 12.12.12.4 80 { #第二個真實web
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
輔助調度服務器
全局配置中 router_id 不一樣 vrrp實例中 狀態不同 優先級不同
Web節點的配置
由於是LVS-DR模式
因此 web客戶端是獨立向客戶端迴應響應包的 添加ifcf-etho:0文件
內容以下
DEVICE=lo:0 #設備名稱
IPADDR=12.12.12.10 #監聽vip地址
NETMASK=255.255.255.255 #主機路由
注意sysctl.conf配置添加
詳細含義參考 http://zhangyongli.blog.51cto.com/6691702/1288731 文檔尾部
添加路由
route add 12.12.12.10 dev lo:0
Web節點相同的配置
而後測試;
主負載調度器
ip addr show dev echt0
好了 大功告成!!!