關於全nat(fnat),dr,tunnel,toa,ospf/ecmp和keepalived的概念,可以參考lvs和阿里巴巴/lvs。
注:dpvs支援fnat,dr,tunnel,nat,snat**模式,有或沒有osfp/ecmp/keepalive,每個模式可以配置為單臂或兩臂拓撲。後面給出一些日常工作中常用的工作模型。
雙臂意味著,你在負載平衡器(lb)的一端擁有客戶機,在另一端擁有伺服器,然後lb在它的兩個邏輯網路介面之間**資料報。例如,wan到lan的負載平衡。
另一方面,單臂意味著所有的客戶端和伺服器都在負載均衡器的同一端,lb通過相同的邏輯網路介面**流量。
為了方便,一般不考慮虛擬裝置。因此,雙臂拓撲需要如下:
(1)兩個裝有igb_uio驅動程式的dpdk介面。
(2)/etc/dpvs.conf應該配置兩個介面,請參考檔案conf/dpvs.conf.sample。
對於單臂,只需要乙個dpdk介面,可以參考conf/dpv.conv.conf.con.single-nic.sample
與lvs一樣,dpvs可以部署為不同型別的集群模型,以實現高可用性(ha)。同時支援ospf/ecmp和主/備份模型。ospf/ecmp模型需要軟體包quagga及其zebra和ospfd程式。master/back模型需要保活。
考慮到dpdk應用程式完全管理網路介面,linux核心和執行在核心tcp/ip棧上的程式不能直接從dpdk介面接收資料報。為了實現sshd、zebra/ospfd和keepalived等linux程式,使用了dpdk kni裝置。這樣linux程式就可以使用linux tcp/ip棧在kni裝置上執行了。實際上,dpvs將不會把的資料報傳遞給kni裝置。例如,ospf/vrrp/ssh包。這樣在linux堆疊上「工作」的程式就能夠處理它們。
我們不希望將ospfd/keepalieved/sshd移植到dpdk環境,因為需要tcp和套接字層。對dpdk的負荷也是乙個原因。
注意:keepalived是由dpvs專案修改的,以支援一些特定的引數。**是駐留在tools/keepalived和可執行檔案是bin/keepalived。ospfd/sshd是標準版本。
這是fullnat(fnat)的乙個簡單示例,在兩個介面之間進行**。假設乙個是wan介面(dpdk1),另乙個是lan介面(dpdk0)。
配置包括:
(1)用於dpdk區域網(lan)/廣域網(wan)的ip位址和路由。
(2)wan介面上的vip(dpdk1)。
(3)fnat服務(vip:vport)及相關rs(real server)。
(4)fnat模式至少需要乙個區域網介面(dpdk0)。
指令碼如下:
#!/bin/sh -
# add vip to wan inte***ce
./dpip addr add 10.0.0.100/32 dev dpdk1
# route for wan/lan access
# add routes for other network or default route if needed.
./dpip route add 10.0.0.0/16 dev dpdk1
./dpip route add 192.168.100.0/24 dev dpdk0
# add service to forwarding, scheduling mode is rr.
# use ipvsadm --help for more info.
./ipvsadm -a -t 10.0.0.100:80 -s rr
# add two rs for service, forwarding mode is fnat (-b)
./ipvsadm -a -t 10.0.0.100:80 -r 192.168.100.2 -b
./ipvsadm -a -t 10.0.0.100:80 -r 192.168.100.3 -b
# add at least one local-ip (lip) for fnat on lan inte***ce
./ipvsadm --add-laddr -z 192.168.100.200 -t 10.0.0.100:80 -f dpdk0
可以使用下面的命令來檢查剛剛設定的內容:
$ ./dpip addr show
$ ./dpip route show
$ ./ipvsadm -ln
$ ./ipvsadm -g
現在來驗證fnat(雙臂)是否有效。我已經設定了nginx伺服器上rs(與toa模組)響應http請求與客戶端的真實ip和埠。響應格式是純文字(不是html)。
client$ curl 10.0.0.100
your ip:port : 10.0.0.48:37177
fnat轉換需要lip或local-ip,客戶的cip:cport將替換為lip:lport,而vip:vport將被翻譯成rs的rip:rport。我想這就是為什麼模式被稱為「全nat」的原因。
請使用 ipvsadm --add laddr設定lip而不是dpip addr add。因為ipvs和inet模組都需要lip位址,sapool選項將自動設定。
另乙個技巧是可以使用dpip addr add 10.0.0.100/16 dev dpdk1同時設定vip和wan路由。但讓我們使用兩個命令來明確它。
Git教程學習 二
教程來自 git教程 廖雪峰的官方 主要命令 git log 檢視已提交內容 git log pretty oneline 檢視已提交內容 緊湊版 git reset hard head 回退到上一版本 git reset hard 3628164 回退到版本3628164 git reflog 檢...
Selenium Python 學習教程(二)
firefox瀏覽器驅動 geckodriver ie瀏覽器驅動 iedriverserver edge瀏覽器驅動 microsoftwebdriver opera瀏覽器驅動 operadriver phantomjs瀏覽器驅動 phantomjs 我的電腦 屬性 系統設定 高階 環境變數 系統變數...
ActiveMQ學習教程(二) 概念解釋
這一節對jms api中的一些重要概念進行一下說明。jms api的主要概念如一下 本節只列出提綱,詳細說明,請檢視附件。下面對兩種jms domains進行一下說明 1.publish subscribe 在這種模式下,mq伺服器中的客戶端可訂閱自己感興趣的topic,當其它客戶端向mq伺服器傳送...