您好,登錄后才能下訂單哦!
下文給大家帶來基于LVS-DR+keepalived 是如何搭建web高可用負載均衡的,希望能夠給大家在實際運用中帶來一定的幫助,負載均衡涉及的東西比較多,理論也不多,網上有很多書籍,今天我們就用億速云在行業內累計的經驗來做一個解答。
實驗環境 redhat6.5 2.6.32-431.el6.x86_64
keepalived-1.2.16版本
ipvsadm-1.26-2.el6.x86_64
所有的虛擬機 都 關閉防火墻和selinux 配置好了本地yum源
搭建要求是對LVS-DR模式的原理熟悉,先配置好LVS-DR所需的環境。這里的環境是配置VIP DIP DIP 在同一個網段,并在realserver的lo接口上做好了arp抑制。具體見后面的腳本
當keepalived和LVS結合時,注意不需要在director上對ipvsadm手工的做配置,切記。在keepalived的配置文件里會配置lvs的VIP,RIP。 所有的配置只在keepalived的配置文件中就可以了。之前是先做的LVS-DR模式 所以先配置了ipvsadm后修改keepalived.conf結果畫蛇貼足,導致無法搭建成功。
本次實驗中 是搭建web的高可用負載均衡
DR1 VIP:192.168.168.12 DIP:192.168.168.100
DR2 VIP: 192.168.168.12 DIP:192.168.168.107
realserver1 VIP : 192.168.168.12 RIP1: 192.168.168.102
realserver2 VIP: 192.168.168.12 RIP2:192.168.168.103
前提 :realserver1和realserver2已經安裝了 httpd
********************首先搭建DR1 *********
1,軟件的安裝 DR1和DR2上安裝 ipvsadm 和 keepalived
####################安裝ipvsadm管理lvs#######################
首先lsmod查看是否支持lvs模塊
root@dr100 ~ # lsmod | grep -i ip
ip_vs_rr 1420 1
ip_vs 125220 3 ip_vs_rr
可以看出支持 然后進入本地的yum源掛載目錄安裝ipvsadm (LVS已經編譯到內核)
root@dr100 ~ # cd /mnt/Packages/
root@dr100 Packages # rpm -ivh ipvsadm-1.26-2.el6.x86_64.rpm
2.#######################然后安裝keepalived####################
root@dr100 src # tar -zxvf keepalived-1.2.16.tar.gz
root@dr100 src # cd keepalived-1.2.16
root@dr100 keepalived-1.2.16 # ./configure --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/
可能會有依賴性
root@dr100 keepalived-1.2.16 # yum install -y openssl-devel
root@dr100 keepalived-1.2.16 # ./configure --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/ 將keepalived整合到內核當中
root@dr100 keepalived-1.2.16 # make && make install
root@dr100 keepalived-1.2.16 # echo $?
0
下來將keepalived的配置文件復制到對應的配置文件,方便配置。
root@dr100 keepalived-1.2.16 # cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
root@dr100 keepalived-1.2.16 # cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
root@dr100 keepalived-1.2.16 # mkdir /etc/keepalived
root@dr100 keepalived-1.2.16 # cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
root@dr100 keepalived-1.2.16 # cp /usr/local/sbin/keepalived /usr/sbin/
root@dr100 keepalived-1.2.16 # cd ~
#######################安裝完畢進行配置#####################
root@dr100 keepalived-1.2.16 # cd ~
root@dr100 ~ # vim /etc/keepalived/keepalived.conf 主配置文件
root@dr100 ~ #
root@dr100 ~ # cat !$
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc #設置報警郵件地址,可以設置多個,每行1個,
failover@firewall.loc #需開啟郵件報警及本機的Sendmail服務。
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.168.12 #設置SMTP Server地址;
smtp_connect_timeout 30
router_id LVS_DEVEL
}
########VRRP Instance########
vrrp_instance VI_1 {
state MASTER #指定Keepalived的角色,MASTER為主機云服務器,BACKUP為備用云服務器
interface eth0 #BACKUP為備用云服務器
virtual_router_id 51
priority 100 #定義優先級,數字越大,優先級越高,主DR必須大于備用DR。
advert_int 1
authentication {
auth_type PASS #設置驗證類型,主要有PASS和AH兩種
auth_pass 1111 #設置驗證密碼
}
virtual_ipaddress {
192.168.168.12 #設置主DR的虛擬IP地址(virtual IP),可多設,但必須每行1個
}
}
########Virtual Server########
virtual_server 192.168.168.12 80 { #注意IP地址與端口號之間用空格隔開
delay_loop 6 #設置健康檢查時間,單位是秒
lb_algo rr #設置負載調度算法,默認為rr,即輪詢算法,最優秀是wlc算法
lb_kind DR #設置LVS實現LB機制,有NAT、TUNN和DR三個模式可選
nat_mask 255.255.255.0
# persistence_timeout 1 #會話保持時間,單位為秒 實驗要注釋掉方便看出輪詢
protocol TCP #指定轉發協議類型,有TCP和UDP兩種
real_server 192.168.168.102 80 { #定義realserver 的ip 地址和 端口
weight 1 #配置節點權值,數字越大權值越高
TCP_CHECK {
connect_timeout 3 #表示3秒無響應,則超時
nb_get_retry 3 #表示重試次數
delay_before_retry 3 #表示重試間隔
}
}
real_server 192.168.168.103 80 { #配置服務器節點,即Real Server2的public IP
weight 1 #配置節點權值,數字越大權值越高
TCP_CHECK {
connect_timeout 3 #表示3秒無響應,則超時
nb_get_retry 3 #表示重試次數
delay_before_retry 3 #表示重試間隔
}
}
}
配置完成
root@dr100 ~ # /etc/init.d/keepalived start
3. ##############DR1配置完成開始配置realserver1和realserver2################
realserver1 配置 使用腳本配置
root@realserver1 ~ # cat lvs.dr.sh
#!/bin/bash
vip=192.168.168.12
/etc/init.d/httpd start #啟動apache 沒有安裝的請自己先安裝
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #這四行是做arp抑制
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ip addr add dev lo $vip
ip a | grep -w inet
echo "this is for start"
;;
stop)
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore #恢復arp
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
ip addr del dev lo $vip
ip a | grep -w inet
echo "this is for stop"
;;
*)
echo "plesase start or stop"
;;
esac
exit 0
root@realserver1 ~ # sh lvs.dr.sh start
root@realserver1 ~ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet 192.168.168.12/32 scope global lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:0b:b0:4e brd ff:ff:ff:ff:ff:ff
inet 192.168.168.102/24 brd 192.168.168.255 scope global eth0
inet6 fe80::20c:29ff:fe0b:b04e/64 scope link
valid_lft forever preferred_lft forever
root@realserver1 ~ # echo "real server 192.168.168.102" >/var/www/index.html
realserver2 同理
root@realserver2 ~ # cat lvs.dr.sh
#!/bin/bash
vip=192.168.168.12
/etc/init.d/httpd start
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ip addr add dev lo $vip
ip a | grep -w inet
echo "this is for start"
;;
stop)
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
ip addr del dev lo $vip
ip a | grep -w inet
echo "this is for stop"
;;
*)
echo "plesase start or stop"
;;
esac
exit 0
root@realserver2 ~ # sh lvs.dr.sh start
root@realserver2 ~ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet 192.168.168.12/32 scope global lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:2a:85:bb brd ff:ff:ff:ff:ff:ff
inet 192.168.168.103/24 brd 192.168.168.255 scope global eth0
inet6 fe80::20c:29ff:fe2a:85bb/64 scope link
valid_lft forever preferred_lft forever
root@realserver1 ~ # echo "real server 192.168.168.103" >/var/www/index.html
4. #############realserver配置完成后 在DR1查看################
root@dr100 ~ # ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.168.12:80 rr
-> 192.168.168.102:80 Route 1 0 0
-> 192.168.168.103:80 Route 1 0 0
出現這個表明配置成功 可以將ipvsadm配置保存在文件中
root@dr100 ~ # ipvsadm-save > ipvsadm.txt 保存到文件ipvsadm.txt中
root@dr100 ~ # cat ipvsadm.txt
-A -t bogon:http -s rr
-a -t bogon:http -r bogon:http -g -w 1
-a -t bogon:http -r bogon:http -g -w 1
root@dr100 ~ # ipvsadm-restore < ipvsadm.txt 將文件導入到ipvsadm的設置中
5. ###################打開瀏覽器驗證#################
打開瀏覽器訪問VIP 192.168.168.12
F5 刷新
說明DR1已搭建成功 下面搭建DR2
**********************DR2的配置***************************
重復DR1中的ipvsadm和keepalived的安裝,這里就不多說了
DR1和DR2的區別是 keepalived..conf 的配置 中的master改為backup 然后更改優先級就可以了。
root@dr107 ~ #
root@dr107 ~ # cat !$
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc #設置報警郵件地址,可以設置多個,每行1個,
failover@firewall.loc #需開啟郵件報警及本機的Sendmail服務。
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.168.12 #設置SMTP Server地址;
smtp_connect_timeout 30
router_id LVS_DEVEL
}
########VRRP Instance########
vrrp_instance VI_1 {
state BACKUP #指定Keepalived的角色,MASTER為主機服務器,BACKUP為備用服務器
interface eth0 #BACKUP為備用服務器
virtual_router_id 51
priority 50 #定義優先級,數字越大,優先級越高,主DR必須大于備用DR。
advert_int 1
authentication {
auth_type PASS #設置驗證類型,主要有PASS和AH兩種
auth_pass 1111 #設置驗證密碼 主從要一致
}
virtual_ipaddress {
192.168.168.12 #設置主DR的虛擬IP地址(virtual IP),可多設,但必須每行1個
}
}
########Virtual Server########
virtual_server 192.168.168.12 80 { #注意IP地址與端口號之間用空格隔開
delay_loop 6 #設置健康檢查時間,單位是秒
lb_algo rr #設置負載調度算法,默認為rr,即輪詢算法,最優秀是wlc算法
lb_kind DR #設置LVS實現LB機制,有NAT、TUNN和DR三個模式可選
nat_mask 255.255.255.0
# persistence_timeout 1 #會話保持時間,單位為秒 實驗要注釋掉方便看出輪詢
protocol TCP #指定轉發協議類型,有TCP和UDP兩種
real_server 192.168.168.102 80 {
weight 1 #配置節點權值,數字越大權值越高
TCP_CHECK {
connect_timeout 3 #表示3秒無響應,則超時
nb_get_retry 3 #表示重試次數
delay_before_retry 3 #表示重試間隔
}
}
real_server 192.168.168.103 80 { #配置服務器節點,即Real Server2的public IP
weight 1 #配置節點權值,數字越大權值越高
TCP_CHECK {
connect_timeout 3 #表示3秒無響應,則超時
nb_get_retry 3 #表示重試次數
delay_before_retry 3 #表示重試間隔
}
}
}
然后開啟keepalived
root@dr107 ~ # /etc/init.d/keepalived start
root@dr107 ~ # ipvsadm -Ln 查看
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.168.12:80 rr
-> 192.168.168.102:80 Route 1 0 0
-> 192.168.168.103:80 Route 1 0 0
##################都配置成功了,可以宕機檢驗了。#######################
****************************以下時網上找到的理論知識 *********************************************
1. LVS簡介:
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。章文嵩博士目前工作于阿里集團,主要從事集群技術、操作系統、對象存儲與數據庫的研究。(摘自《BAIDU百科》)
2. LVS集群的組成:
LVS服務器系統由三部分組成:
1)負載均衡層:
位于整個集群系統的最前端,避免單點故障一般最少由2臺或2臺以上負載調度器組成。
2)服務器群組層:
是一組真正運行應用服務器的機器組成,Real Server可以是Web、FTP、DNS、Mail 、視頻等服務器中的一個或N個,每個Real Server之間通過高速的LAN/WAN相連接。為了節省寶貴的資源,在生產環境中,Director Server同時身兼Real Server的角色!
3)共享存儲層:
為Real Server提供共享存儲空間和內容一致性的存儲區域。可以為磁盤陣列、Red Hat的GFS文件系統、Oracle的OCFS2文件系統等。
Director Server是整個LVS的核心!到目前為止,Director server只能安裝在Linux、FreeBSD上,如果Linux內核是2.6及以上時,則已經內置了LVS的各個模塊,不用作任何的設置就支持LVS功能。
Real Server服務器幾乎為所有有系統平臺,如:Windows、Linux、Solaris、AIX、BSD等系統平臺。
常見的3中模式 還有第四種
1、NAT模式-網絡地址轉換
Virtualserver via Network address translation(VS/NAT)
這個是通過網絡地址轉換的方法來實現調度的。首先調度器(LB)接收到客戶的請求數據包時(請求的目的IP為VIP),根據調度算法決定將請求發送給哪個后端的真實服務器(RS)。然后調度就把客戶端發送的請求數據包的目標IP地址及端口改成后端真實服務器的IP地址(RIP),這樣真實服務器(RS)就能夠接收到客戶的請求數據包了。真實服務器響應完請求后,查看默認路由(NAT模式下我們需要把RS的默認路由設置為LB服務器。)把響應后的數據包發送給LB,LB再接收到響應包后,把包的源地址改成虛擬地址(VIP)然后發送回給客戶端。
大致可分為幾個步驟
1)客戶端請求數據,目標IP為VIP
2)請求數據到達LB服務器,LB根據調度算法將目的地址修改為RIP地址及對應端口(此RIP地址是根據調度算法得出的。)并在連接HASH表中記錄下這個連接。
3)數據包從LB服務器到達RS服務器webserver,然后webserver進行響應。Webserver的網關必須是LB,然后將數據返回給LB服務器。
4)收到RS的返回后的數據,根據連接HASH表修改源地址VIP&目標地址CIP,及對應端口80.然后數據就從LB出發到達客戶端。
5)客戶端收到的就只能看到VIP\DIP信息。
NAT模式優缺點:
1、NAT技術將請求的報文和響應的報文都需要通過LB進行地址改寫,因此網站訪問量比較大的時候LB負載均衡調度器有比較大的瓶頸,一般要求最多之能10-20臺節點
2、只需要在LB上配置一個公網IP地址就可以了。
3、每臺內部的節點服務器的網關地址必須是調度器LB的內網地址。
4、NAT模式支持對IP地址和端口進行轉換。即用戶請求的端口和真實服務器的端口可以不一致。
2、TUN模式
virtual server via ip tunneling模式:采用NAT模式時,由于請求和響應的報文必須通過調度器地址重寫,當客戶請求越來越多時,調度器處理能力將成為瓶頸。為了解決這個問題,調度器把請求的報文通過IP隧道轉發到真實的服務器。真實的服務器將響應處理后的數據直接返回給客戶端。這樣調度器就只處理請求入站報文,由于一般網絡服務應答數據比請求報文大很多,采用VS/TUN模式后,集群系統的最大吞吐量可以提高10倍。
VS/TUN的工作,它和NAT模式不同的是,它在LB和RS之間的傳輸不用改寫IP地址。而是把客戶請求包封裝在一個IP tunnel里面,然后發送給RS節點服務器,節點服務器接收到之后解開IP tunnel后,進行響應處理。并且直接把包通過自己的外網地址發送給客戶不用經過LB服務器。
1)客戶請求數據包,目標地址VIP發送到LB上。
2)LB接收到客戶請求包,進行IP Tunnel封裝。即在原有的包頭加上IP Tunnel的包頭。然后發送出去。
3)RS節點服務器根據IP Tunnel包頭信息(此時就又一種邏輯上的隱形隧道,只有LB和RS之間懂)收到請求包,然后解開IP Tunnel包頭信息,得到客戶的請求包并進行響應處理。
4)響應處理完畢之后,RS服務器使用自己的出公網的線路,將這個響應數據包發送給客戶端。源IP地址還是VIP地址。(RS節點服務器需要在本地回環接口配置VIP,做arp抑制)
3、DR模式(直接路由模式)
Virtual server via direct routing (vs/dr)
DR模式是通過改寫請求報文的目標MAC地址,將請求發給真實服務器的,而真實服務器響應后的處理結果直接返回給客戶端用戶。同TUN模式一樣,DR模式可以極大的提高集群系統的伸縮性。而且DR模式沒有IP隧道的開銷,對集群中的真實服務器也沒有必要必須支持IP隧道協議的要求。但是要求調度器LB與真實服務器RS都有一塊網卡連接到同一物理網段上,必須在同一個局域網環境。
DR模式是互聯網使用比較多的一種模式。DR模式原理過程簡述:
VS/DR模式的工作,它的連接調度和管理與NAT和TUN中的一樣,它的報文轉發方法和前兩種不同。DR模式將報文直接路由給目標真實服務器。在DR模式中,調度器根據各個真實服務器的負載情況,連接數多少等,動態地選擇一臺服務器,不修改目標IP地址和目標端口,也不封裝IP報文,而是將請求報文的數據幀的目標MAC地址改為真實服務器的MAC地址。然后再將修改的數據幀在服務器組的局域網上發送。因為數據幀的MAC地址是真實服務器的MAC地址,并且又在同一個局域網。那么根據局域網的通訊原理,真實復位是一定能夠收到由LB發出的數據包。真實服務器接收到請求數據包的時候,解開IP包頭查看到的目標IP是VIP。(此時只有自己的IP符合目標IP才會接收進來,所以我們需要在本地的回環借口上面配置VIP。另:由于網絡接口都會進行ARP廣播響應,但集群的其他機器都有這個VIP的lo接口,都響應就會沖突。所以我們需要把真實服務器的lo接口的ARP響應關閉掉。)然后真實服務器做成請求響應,之后根據自己的路由信息將這個響應數據包發送回給客戶,并且源IP地址還是VIP。
DR模式小結:
1、通過在調度器LB上修改數據包的目的MAC地址實現轉發。注意源地址仍然是CIP,目的地址仍然是VIP地址。
2、請求的報文經過調度器,而RS響應處理后的報文無需經過調度器LB,因此并發訪問量大時使用效率很高(和NAT模式比)
3、因為DR模式是通過MAC地址改寫機制實現轉發,因此所有RS節點和調度器LB只能在一個局域網里面
4、RS主機需要綁定VIP地址在LO接口上,并且需要配置ARP抑制。
5、RS節點的默認網關不需要配置成LB,而是直接配置為上級路由的網關,能讓RS直接出網就可以。
6、由于DR模式的調度器僅做MAC地址的改寫,所以調度器LB就不能改寫目標端口,那么RS服務器就得使用和VIP相同的端口提供服務。
看了以上關于基于LVS-DR+keepalived 是如何搭建web高可用負載均衡的,如果大家還有什么地方需要了解的可以在億速云行業資訊里查找自己感興趣的或者找我們的專業技術工程師解答的,億速云技術工程師在行業內擁有十幾年的經驗了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。