过一段时间就会发现marathon-lb-autoscale已经有动作了。
将一个nginx变成8个nginx
当我们将siege从10个变回0个的时候。
第四、Minuteman
Minuteman是一个内部的东西向的负载均衡器,可用于设置VIP,多个实例使用同一个VIP来进行负载均衡。
在创建服务的时候,选择Load Balanced,则下面会出现一行地址:nginxdocker.marathon.l4lb.thisdcos.directory:80,这个就是minuteman分配的VIP。
当服务创建好了之后,通过curl http://nginxdocker.marathon.l4 ... ry:80 就可以访问这个服务,但是我们如果ping这个域名却是不通的,而且对于的IP地址也是很奇怪的IP地址,这个IP就是VIP.
这是怎么做到的呢?minuteman的load balancer是基于Netfilter的,在dcos的slave节点上,我们能看到多出来了四个iptables规则。其中前两个规则是在raw表里面的,后两个规则是在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
根据iptbles的规则raw表中的规则会被先执行,一旦到达了filter表的minuteman的包就都过滤掉了。
NFQUEUE的规则表示将对于包的处理权交给用户态的一个进程。--queue-balance表示会将包发给几个queue,然后用户态进程会使用libnetfilter_queue连接到这些queue中,将包读出来,根据包的内容做决策后放回内核进行发送。
在每一个Mesos-Agent节点上都运行这一个minuteman的进程,监听这些queue,我们可以通过访问API查看VIP的映射关系,curl http://localhost:61421/vips 。
我们可以看到VIP的11.112.175.214后面跟着两个节点10.0.1.78:27003和10.0.1.78:4989,正好对应nginx的两个实例。
四、DC/OS的微服务及大数据的管理机制
DC/OS是基于Mesos的,Mesos的灵活框架机制可以使得DC/OS既能够部署容器,也能够部署大数据框架,大数据框架在不运行任务的时候,几乎不占用资源,从而真正实现微服务和大数据框架的资源共享。
前面我们部署容器的时候,都是自己准备marathon的json进行部署的,这就需要使用服务的人和设计服务的人同样的专业。
DC/OS采用了一种package管理机制,将运行一个微服务或者框架所需要的各种配置制作成模板,模板由专业人士制作好上传到package repository,使用者就不需要那么专业,只要运行dcos package install安装即可。
Mesosphere提供了官方的package repository,名为universe,地址为 https://universe.mesosphere.com/repo ,在github上可以找到对应的代码 https://github.com/mesosphere/universe 。