日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

RabbitMQ负载均衡(4)——LVS

發(fā)布時(shí)間:2024/4/11 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMQ负载均衡(4)——LVS 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

歡迎支持筆者新作:《深入理解Kafka:核心設(shè)計(jì)與實(shí)踐原理》和《RabbitMQ實(shí)戰(zhàn)指南》,同時(shí)歡迎關(guān)注筆者的微信公眾號(hào):朱小廝的博客。

歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-load-balance-4-lvs/


負(fù)載均衡的方案有很多,適合RabbitMQ使用的處理HAProxy之外還有LVS。LVS是Linux Virtual Server的簡(jiǎn)稱,也就是Linux虛擬服務(wù)器, 是一個(gè)由章文嵩博士發(fā)起的自由軟件項(xiàng)目,它的官方站點(diǎn)是www.linuxvirtualserver.org。現(xiàn)在LVS已經(jīng)是 Linux標(biāo)準(zhǔn)內(nèi)核的一部分,在Linux2.6.32內(nèi)核以前,使用LVS時(shí)必須要重新編譯內(nèi)核以支持LVS功能模塊,但是從Linux2.6.32內(nèi)核以后,已經(jīng)完全內(nèi)置了LVS的各個(gè)功能模塊,無(wú)需給內(nèi)核打任何補(bǔ)丁,可以直接使用LVS提供的各種功能。

LVS是4層負(fù)載均衡,也就是說(shuō)建立在OSI模型的傳輸層之上。LVS支持TCP/UDP的負(fù)載均衡,相對(duì)于其它高層負(fù)載均衡的解決方案,比如DNS域名輪流解析、應(yīng)用層負(fù)載的調(diào)度、客戶端的調(diào)度等,它是非常高效的。LVS自從1998年開始,發(fā)展到現(xiàn)在已經(jīng)是一個(gè)比較成熟的技術(shù)項(xiàng)目了。可以利用LVS技術(shù)實(shí)現(xiàn)高可伸縮的、高可用的網(wǎng)絡(luò)服務(wù),例如WWW服務(wù)、Cache服務(wù)、DNS服務(wù)、FTP服務(wù)、MAIL服務(wù)、視頻/音頻點(diǎn)播服務(wù)等等,有許多比較著名網(wǎng)站和組織都在使用LVS架設(shè)的集群系統(tǒng),例如:Linux的門戶網(wǎng)站(www.linux.com)、向RealPlayer提供音頻視頻服務(wù)而聞名的Real公司(www.real.com)、全球最大的開源網(wǎng)站(sourceforge.net)等。

LVS主要由3個(gè)部分組成:

  • 負(fù)載調(diào)度器(Load Balancer/ Director):它是整個(gè)集群對(duì)外面的前端機(jī),負(fù)責(zé)將客戶的請(qǐng)求發(fā)送到一組服務(wù)器上執(zhí)行,而客戶認(rèn)為服務(wù)是來(lái)自一個(gè)IP地址(VIP)上的。
  • 服務(wù)器池(Server Pool/ RealServer):是一組真正執(zhí)行客戶端請(qǐng)求的服務(wù)器,如RabbitMQ服務(wù)器。
  • 共享存儲(chǔ)(Shared Storage):它為服務(wù)器池提供一個(gè)共享的存儲(chǔ)區(qū),這樣很容易使得服務(wù)器池?fù)碛邢嗤膬?nèi)容,提供相同的服務(wù)。

目前LVS的負(fù)載均衡方式也分為三種:

  • VS/NAT:即Virtual Server via Network Address Translation的簡(jiǎn)稱。VS/NAT是一種最簡(jiǎn)單的方式,所有的RealServer只需要將自己的網(wǎng)關(guān)指向Director即可。客戶端可以是任意的操作系統(tǒng),但此方式下,一個(gè)Director能夠帶動(dòng)的RealServer比較有限。
  • VS/TUN:即Virtual Server via IP Tunneling的簡(jiǎn)稱。IP隧道(IP Tunneling)是將一個(gè)IP報(bào)文封裝再另一個(gè)IP報(bào)文的技術(shù),這可以使得目標(biāo)為一個(gè)IP地址的數(shù)據(jù)報(bào)文能夠被封裝和轉(zhuǎn)發(fā)到另一個(gè)IP地址。IP隧道技術(shù)亦可以稱之為IP封裝技術(shù)(IP encapsulation)。
  • VS/DR:即Virtual Server via Direct Routing的簡(jiǎn)稱。VS/DR方式是通過改寫報(bào)文中的MAC地址部分來(lái)實(shí)現(xiàn)的。Director和RealServer必須在物理上有一個(gè)網(wǎng)卡通過不間斷的局域網(wǎng)相連。RealServer上綁定的VIP配置在各自Non-ARP的網(wǎng)絡(luò)設(shè)備上(如lo或tunl),Director的VIP地址對(duì)外可見,而RealServer的VIP對(duì)外是不可見的。RealServer的地址即可以是內(nèi)部地址,也可以是真實(shí)地址。

對(duì)于LVS而言配合Keepalived一起使用同樣可以實(shí)現(xiàn)高可靠的負(fù)載均衡,對(duì)于圖7-11來(lái)說(shuō),LVS可以完全的替代HAProxy而其他內(nèi)容可以保持不變。LVS不需要額外的配置文件,直接集成在Keepalived的配置文件之中。修改/etc/keepalived/keepalived.conf文件內(nèi)容如下:

#Keepalived配置文件(Master) global_defs {router_id NodeA #路由ID, 主備的ID不能相同 } vrrp_instance VI_1 {state MASTER #Keepalived的角色。Master表示主服務(wù)器,從服務(wù)器設(shè)置為BACKUPinterface eth0 #指定監(jiān)測(cè)網(wǎng)卡virtual_router_id 1priority 100 #優(yōu)先級(jí),BACKUP機(jī)器上的優(yōu)先級(jí)要小于這個(gè)值advert_int 1 #設(shè)置主備之間的檢查時(shí)間,單位為sauthentication { #定義驗(yàn)證類型和密碼auth_type PASSauth_pass root123}track_script {chk_haproxy}virtual_ipaddress { #VIP地址,可以設(shè)置多個(gè):192.168.0.10} }virtual_server 192.168.0.10 5672 { #設(shè)置虛擬服務(wù)器delay_loop 6 #設(shè)置運(yùn)行情況檢查時(shí)間,單位是秒#設(shè)置負(fù)載調(diào)度算法,共有rr,wrr,lc,wlc,lblc,lblcr,dh,sh這8種。lb_algo wrr #這里是加權(quán)輪詢lb_kind DR #設(shè)置LVS實(shí)現(xiàn)的負(fù)載均衡機(jī)制方式VS/DR#指定在一定的時(shí)間內(nèi)來(lái)自同一IP的連接將會(huì)被轉(zhuǎn)發(fā)到同一RealServer中。persistence_timeout 50 protocal TCP #指定轉(zhuǎn)發(fā)協(xié)議類型,有TCP和UDP兩種#這個(gè)real_server即指LVS的三大部分之一的RealServer,這里特指RabbitMQ的服務(wù)real_server 192.168.0.2 5672 { #配置服務(wù)節(jié)點(diǎn)weight 1 #配置權(quán)重TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3connect_port 5672}}real_server 192.168.0.3 5672 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3connect_port 5672}}real_server 192.168.0.4 5672 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3connect_port 5672}} } #為RabbitMQ的rabbitmq_management插件設(shè)置負(fù)載均衡 virtual_server 192.168.0.10 15672 {delay_loop 6lb_algo wrrlb_kind DRpersistence_timeout 50protocal TCPreal_server 192.168.0.2 15672 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3connect_port 15672}}real_server 192.168.0.3 15672 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3connect_port 15672}}real_server 192.168.0.4 15672 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3connect_port 15672}} }

對(duì)于Backup的配置可以參考前一小節(jié)中的相應(yīng)配置。在LVS和Keepalived環(huán)境里面,LVS主要的工作是提供調(diào)度算法,把客戶端請(qǐng)求按照需求調(diào)度在RealServer,Keepalived主要的工作是提供LVS控制器的一個(gè)冗余,并且對(duì)RealServer做健康檢查,發(fā)現(xiàn)不健康的RealServer就把它從LVS集群中剔除,RealServer只負(fù)責(zé)提供服務(wù)。

通常在LVS的VS/DR模式下需要在RealServer上配置VIP。原因在于當(dāng)LVS把客戶端的包轉(zhuǎn)發(fā)給RealServer時(shí),因?yàn)榘哪康腎P地址是VIP,那么如果RealServer收到這個(gè)包后發(fā)現(xiàn)包的目的地址不是自己系統(tǒng)的IP,那么就會(huì)認(rèn)為這個(gè)包不是發(fā)給自己的,就會(huì)丟棄這個(gè)包,所以需要將這個(gè)IP地址綁定到網(wǎng)卡下。當(dāng)發(fā)送應(yīng)答包給客戶端時(shí),RealServer就會(huì)把包的源和目的地址調(diào)換,直接回復(fù)給客戶端。下面為所有的RealServer的的lo:0網(wǎng)卡創(chuàng)建啟動(dòng)腳本(vim /opt/realserver.sh)綁定VIP地址,詳細(xì)內(nèi)容如下:

#!/bin/bash VIP=192.168.0.10 /etc/rc.d/init.d/functionscase "$1" in start)/sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP/sbin/route add -host $VIP dev lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p >/dev/null 2>&1echo "RealServer Start Ok" ;; stop)/sbin/ifconfig lo:0 down/sbin/route del -host $VIP dev lo:0echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announce ;; status)islothere=`/sbin/ifconfig lo:0 | grep $VIP | wc -l`isrothere=`netstat -rn | grep "lo:0"|grep $VIP | wc -l`if [ $islothere -eq 0 ]thenif [ $isrothere -eq 0 ]thenecho "LVS of RealServer Stopped."elseecho "LVS of RealServer Running."fielseecho "LVS of RealServer Running."fi ;; *)echo "Usage:$0{start|stop}"exit 1 ;; esac

注意上面綁定VIP的掩碼是255.255.255.255,說(shuō)明廣播地址使其自身,那么它就不會(huì)將ARP發(fā)送到實(shí)際的自己該屬于的廣播域了,這樣防止與LVS上的VIP沖突進(jìn)而導(dǎo)致IP地址沖突。為/opt/realserver.sh文件添加可執(zhí)行權(quán)限后,運(yùn)行/opt/realserver.sh start命令之后可以通過ip add show命令查看lo:0網(wǎng)卡的狀態(tài),注意與Keepalived節(jié)點(diǎn)的網(wǎng)卡狀態(tài)進(jìn)行區(qū)分。

[root@node1 keepalived]# ip add show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet 192.168.0.10/32 brd xx.xx.197.74 scope global lo:0inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast state UP qlen 1000link/ether fa:16:3e:5e:7a:f7 brd ff:ff:ff:ff:ff:ffinet 192.168.0.2/18 brd xx.xx.255.255 scope global eth0inet6 fe80::f816:3eff:fe5e:7af7/64 scope link valid_lft forever preferred_lft forever

歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-load-balance-4-lvs/


歡迎支持筆者新作:《深入理解Kafka:核心設(shè)計(jì)與實(shí)踐原理》和《RabbitMQ實(shí)戰(zhàn)指南》,同時(shí)歡迎關(guān)注筆者的微信公眾號(hào):朱小廝的博客。


總結(jié)

以上是生活随笔為你收集整理的RabbitMQ负载均衡(4)——LVS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。