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