
過一段時間就會發(fā)現(xiàn)marathon-lb-autoscale已經(jīng)有動作了。

將一個nginx變成8個nginx


當(dāng)我們將siege從10個變回0個的時候。

第四、Minuteman
Minuteman是一個內(nèi)部的東西向的負載均衡器,可用于設(shè)置VIP,多個實例使用同一個VIP來進行負載均衡。

在創(chuàng)建服務(wù)的時候,選擇Load Balanced,則下面會出現(xiàn)一行地址:nginxdocker.marathon.l4lb.thisdcos.directory:80,這個就是minuteman分配的VIP。

當(dāng)服務(wù)創(chuàng)建好了之后,通過curl http://nginxdocker.marathon.l4 ... ry:80 就可以訪問這個服務(wù),但是我們?nèi)绻鹥ing這個域名卻是不通的,而且對于的IP地址也是很奇怪的IP地址,這個IP就是VIP.
這是怎么做到的呢?minuteman的load balancer是基于Netfilter的,在dcos的slave節(jié)點上,我們能看到多出來了四個iptables規(guī)則。其中前兩個規(guī)則是在raw表里面的,后兩個規(guī)則是在filter表里面的。
-A PREROUTING -p tcp -m set --match-set minuteman dst,dst -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j NFQUEUE --queue-balance 50:58
-A OUTPUT -p tcp -m set --match-set minuteman dst,dst -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j NFQUEUE --queue-balance 50:58
-A FORWARD -p tcp -m set --match-set minuteman dst,dst -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p tcp -m set --match-set minuteman dst,dst -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REJECT --reject-with icmp-port-unreachable

根據(jù)iptbles的規(guī)則raw表中的規(guī)則會被先執(zhí)行,一旦到達了filter表的minuteman的包就都過濾掉了。
NFQUEUE的規(guī)則表示將對于包的處理權(quán)交給用戶態(tài)的一個進程。--queue-balance表示會將包發(fā)給幾個queue,然后用戶態(tài)進程會使用libnetfilter_queue連接到這些queue中,將包讀出來,根據(jù)包的內(nèi)容做決策后放回內(nèi)核進行發(fā)送。
在每一個Mesos-Agent節(jié)點上都運行這一個minuteman的進程,監(jiān)聽這些queue,我們可以通過訪問API查看VIP的映射關(guān)系,curl http://localhost:61421/vips 。

我們可以看到VIP的11.112.175.214后面跟著兩個節(jié)點10.0.1.78:27003和10.0.1.78:4989,正好對應(yīng)nginx的兩個實例。


四、DC/OS的微服務(wù)及大數(shù)據(jù)的管理機制
DC/OS是基于Mesos的,Mesos的靈活框架機制可以使得DC/OS既能夠部署容器,也能夠部署大數(shù)據(jù)框架,大數(shù)據(jù)框架在不運行任務(wù)的時候,幾乎不占用資源,從而真正實現(xiàn)微服務(wù)和大數(shù)據(jù)框架的資源共享。
前面我們部署容器的時候,都是自己準(zhǔn)備marathon的json進行部署的,這就需要使用服務(wù)的人和設(shè)計服務(wù)的人同樣的專業(yè)。
DC/OS采用了一種package管理機制,將運行一個微服務(wù)或者框架所需要的各種配置制作成模板,模板由專業(yè)人士制作好上傳到package repository,使用者就不需要那么專業(yè),只要運行dcos package install安裝即可。
Mesosphere提供了官方的package repository,名為universe,地址為 https://universe.mesosphere.com/repo ,在github上可以找到對應(yīng)的代碼 https://github.com/mesosphere/universe 。