別樣的服務(wù)器負(fù)載均衡配置代碼
在web服務(wù)器負(fù)載均衡的配置上面,我們現(xiàn)在來分享一篇網(wǎng)友的文章進(jìn)行一個總結(jié)說明。那么針對本地VLAN的負(fù)載均衡問題進(jìn)行一個配置解說。那么具體的配置代碼下文有詳細(xì)列出。
這兩天在詳細(xì)的看man carp文檔。發(fā)現(xiàn)原來carp不僅僅可以實現(xiàn)故障轉(zhuǎn)移(failover)集群,通過簡單配置還是可以實現(xiàn)本地局域網(wǎng)的負(fù)載均衡。
carp的負(fù)載均衡使用的是arpbalance功能,從字面意思理解為使用arp的負(fù)載均衡,也就是說是屬于osi7層模型的第二層——數(shù)據(jù)鏈路層。所以用arpbalance只能應(yīng)用于本地局域網(wǎng),無法實現(xiàn)更高層次的balance。
其原理大致如下
兩臺服務(wù)器a、b,分別建立兩個carp虛擬網(wǎng)卡a1、a2、b1、b2,其中a1、b1為一個carp組(即相同的vhid),其余的兩塊網(wǎng)卡為另一個carp組。在第一個carp組中a1為master,b1為slave。在第二個carp組中,正好與此相反,a2為slave,b2為master。這兩個carp組的虛擬ip相同。
于是arpbalance就可以在這兩個組之間進(jìn)行輪轉(zhuǎn)。當(dāng)使用carp1組的時候,由于a1為master。所以此時由a提供服務(wù),當(dāng)使用carp2組的時候,由于b2為master則此時由b提供服務(wù)。
同時輪轉(zhuǎn)算法是根據(jù)源ip地址進(jìn)行hash算法,保證同一個源地址由固定的carp組提供服務(wù),可以保證客戶端的session等應(yīng)用。
實現(xiàn)步驟如下
在服務(wù)器a上修改配置文件
ee /etc/rc.conf #配置rc.conf文件,分別建立carp虛擬網(wǎng)卡。增加如下內(nèi)容
cloned_interfaces="carp0 carp1"
ifconfig_carp0="vhid 1 advbase 5 pass passwd 192.168.1.100/24"
ifconfig_carp1="vhid 2 advbase 5 advskew 100 pass passwd 192.168.1.100/24"
ee /etc/sysctl.conf #修改sysctl文件啟用carp的arpbalance和carp搶占功能。增加如下內(nèi)容
net.inet.carp.preempt=1
net.inet.carp.arpbalance=1#p#
在服務(wù)器b上修改大致相同,只是carp網(wǎng)卡的有一點變動
ee /etc/rc.conf #配置rc.conf文件,分別建立carp虛擬網(wǎng)卡。增加如下內(nèi)容
cloned_interfaces="carp0 carp1"
ifconfig_carp0="vhid 1 advbase 5 advskew 100 pass passwd 192.168.1.100/24"
ifconfig_carp1="vhid 2 advbase 5 pass passwd 192.168.1.100/24"
ee /etc/sysctl.conf #修改sysctl文件啟用carp的arpbalance和carp搶占功能。增加如下內(nèi)容
net.inet.carp.preempt=1
net.inet.carp.arpbalance=1
重啟兩臺服務(wù)器即可生效。
如果不想重啟服務(wù)器,立即生效則進(jìn)行下列命令
服務(wù)器a
ifconfig carp0 create
ifconfig carp0 vhid 1 advbase 5 pass passwd 192.168.0.100/24
ifconfig carp1 create
ifconfig carp1 vhid 2 advbase 5 advskew 100 passwd 192.168.0.100/24
sysctl net.inet.carp.preempt=1
sysctl net.inet.carp.arpbalance=1
服務(wù)器b
ifconfig carp0 create
ifconfig carp0 vhid 1 advbase 5 advskew 100 pass passwd 192.168.0.100/24
ifconfig carp1 create
ifconfig carp1 vhid 2 advbase 5 passwd 192.168.0.100/24
sysctl net.inet.carp.preempt=1
sysctl net.inet.carp.arpbalance=1
ok,現(xiàn)在可以看到效果了。如果兩臺服務(wù)器正常,則客戶請求分別由兩臺服務(wù)器均衡的提供服務(wù)。當(dāng)斷掉其中一臺服務(wù)器,則另一臺服務(wù)器,可立即接管所有服務(wù)。當(dāng)這臺服務(wù)器恢復(fù)服務(wù),則又會自動啟用負(fù)載均衡。