·Ö²¼Ê½ÏµÍ³ÊÇÄÑÓÚÀí½â¡¢Éè¼Æ¡¢¹¹½¨
ºÍ¹ÜÀíµÄ£¬ËûÃǽ«±Èµ¥¸ö»úÆ÷³É±¶»¹Òª¶àµÄ±äÁ¿ÒýÈëµ½Éè¼ÆÖУ¬Ê¹Ó¦ÓóÌÐòµÄ¸ùÔ´ÎÊÌâ¸üÄÑ·¢ÏÖ¡£SLA(·þÎñˮƽÐÒé)ÊǺâÁ¿Í£»úºÍ/»òÐÔÄÜϽµµÄ±ê×¼£¬´ó¶àÊýÏÖ´úÓ¦ÓóÌÐòÓÐÒ»¸öÆÚÍûµÄµ¯ÐÔSLAˮƽ£¬Í¨³£°´"9"µÄÊýÁ¿Ôö¼Ó(Èç,ÿÔÂ99.9»ò99.99%¿ÉÓÃÐÔ)¡£Ã¿¸ö¶îÍâµÄ9±äµÃÔ½À´Ô½ÄÑʵÏÖ¡£
·Ö²¼Ê½ÏµÍ³Í¨³£ÊÇÒÔ¾²Ì¬·ÖÇø£¬±ÈÈçAkka/Play¡¢ Spark/Hadoop¡¢StormºÍ Redis¸÷×Ô·ÖÇø·Ö×é»®·Ö¡£¾²Ì¬·ÖÇø´øÀ´µÄȱµãÊÇÔö¼Ó¸´ÔÓÐÔ£¬Ëæ×Å»úÆ÷ÊýÁ¿Ôö¼Ó£¬Èí¼þ¹ÜÀíÔ½À´Ô½¸´ÔÓ£¬Ê§°Ü¹ÜÀíά»¤Ô½À´Ô½ÄÑ¡£¶øÇÒ×ÊÔ´ÏûºÄ·Ç³£²»¾¼Ã£¬ÏÂͼÊǾ²Ì¬·ÖÇøÏÂ×ÊÔ´ÀûÓÃÂÊ£º

Apache MesosÄܹ»ÔÚͬÑùµÄ¼¯Èº»úÆ÷ÉÏÔËÐжàÖÖ·Ö²¼Ê½ÏµÍ³ÀàÐÍ£¬¸ü¼Ó¶¯Ì¬ÓÐЧÂʵ͹²Ïí×ÊÔ´¡£Ìṩʧ°ÜÕì²â£¬ÈÎÎñ·¢²¼£¬ÈÎÎñ¸ú×Ù£¬ÈÎÎñ¼à¿Ø£¬µÍ²ã´Î×ÊÔ´¹ÜÀíºÍϸÁ£¶ÈµÄ×ÊÔ´¹²Ïí£¬¿ÉÒÔÀ©Õ¹ÉìËõµ½Êýǧ¸ö½Úµã¡£MesosÒѾ±»TwitterÓÃÀ´¹ÜÀíËüÃǵÄÊý¾ÝÖÐÐÄ¡£

Mesos¼Ü¹¹Í¼ÈçÏ£º

Mesos¿ò¼ÜÊÇÒ»¸öÔÚMesosÉÏÔËÐзֲ¼Ê½Ó¦ÓõÄÓ¦ÓóÌÐò£¬ËüÓÐÁ½¸ö×é¼þ£º
µ÷¶ÈÆ÷ : ÓëMesos½»»¥£¬¶©ÔÄ×ÊÔ´£¬È»ºóÔÚmesos´Ó·þÎñÆ÷ÖмÓÔØÈÎÎñ¡£
Ö´ÐÐÆ÷ : ´Ó¿ò¼ÜµÄ»·¾³±äÁ¿ ÅäÖÃÖлñµÃÐÅÏ¢£¬ÔÚmesos´Ó·þÎñÆ÷ÖÐÔËÐÐÈÎÎñ¡£
ÏÂÃæ¿´¿´ÆäÊÇÈçºÎʵÏÖ×ÊÔ´µ÷Óã¿Mesosͨ¹ý"resources
offers" ·ÖÅä×ÊÔ´£¬×ÊÔ´ÆäʵÊǵ±Ç°¿ÉÓÃ×ÊÔ´µÄÒ»¸ö¿ìÕÕ£¬µ÷¶ÈÆ÷½«Ê¹ÓÃÕâЩ×ÊÔ´ÔÚmesos´Ó·þÎñÆ÷ÉÏÔËÐÐÈÎÎñ¡£
MesosÖ÷´Ó·þÎñÆ÷µ÷¶È×ÊÔ´µÄ˳ÐòͼÈçÏ£º

Ê×ÏÈÓÉMesosÖ÷·þÎñÆ÷²éѯ¿ÉÓÃ×ÊÔ´¸øµ÷¶ÈÆ÷£¬µÚ¶þ²½µ÷¶ÈÆ÷ÏòÖ÷·þÎñÆ÷·¢³ö¼ÓÔØÈÎÎñ£¬Ö÷·þÎñÆ÷ÔÙ´«´ï¸ø´Ó·þÎñÆ÷£¬´Ó·þÎñÆ÷ÏòÖ´ÐÐÆ÷ÃüÁî¼ÓÔØÈÎÎñÖ´ÐУ¬Ö´ÐÐÆ÷Ö´ÐÐÈÎÎñÒԺ󣬽«×´Ì¬·´À¡Éϱ¨¸ø´Ó·þÎñÆ÷£¬×îÖÕ¸æÖªµ÷¶ÈÆ÷
¡£
´Ó·þÎñÆ÷ϹÜÀí¶à¸öÖ´ÐÐÆ÷£¬Ã¿¸öÖ´ÐÐÆ÷ÊÇÒ»¸öÈÝÆ÷£¬ÒÔǰ¿ÉÒÔʹÓÃLinuxÈÝÆ÷LXC£¬ÏÖÔÚʹÓÃDockerÈÝÆ÷¡£

ʧ°Ü»Ö¸´ºÍ¸ß¿ÉÓÃÐÔ
MesosÖ÷·þÎñÆ÷ʹÓÃZookeeper½øÐзþÎñÑ¡¾ÙºÍ·¢ÏÖ¡£ËüÓÐÒ»¸ö×¢²áÆ÷¼Ç¼ÁËËùÓÐÔËÐÐÈκκʹӷþÎñÆ÷ÐÅÏ¢£¬Ê¹ÓÃMultiPaxos½øÐÐÈÕÖ¾¸´ÖÆÊµÏÖÒ»ÖÂÐÔ¡£
MesosÓÐÒ»¸ö´Ó·þÎñÆ÷»Ö¸´»úÖÆ£¬ÎÞÂÛʲôʱºòÒ»¸ö´Ó·þÎñÆ÷ËÀ»úÁË£¬Óû§µÄÈÎÎñ»¹ÊÇÄܹ»¼ÌÐøÔËÐУ¬´Ó·þÎñÆ÷»á½«Ò»Ð©¹Ø¼üµãÐÅÏ¢ÈçÈÎÎñÐÅÏ¢
״̬¸üг־û¯µ½±¾µØ´ÅÅÌÉÏ£¬ÖØÐÂÆô¶¯Ê±¿ÉÒÔ´Ó´ÅÅÌÉϻָ´ÔËÐÐÕâЩÈÎÎñ(ÀàËÆJavaÖеĶۻ¯ºÍ»½ÐÑ)
ʲôÊÇMarathon
ËüÊÇÒ»¸ömesos¿ò¼Ü£¬Äܹ»Ö§³ÖÔËÐг¤·þÎñ£¬±ÈÈçwebÓ¦Óõȡ£ÊǼ¯ÈºµÄ·Ö²¼Ê½Init.d£¬Äܹ»ÔÑùÔËÐÐÈκÎLinux¶þ½øÖÆ·¢²¼°æ±¾£¬ÈçTomcat
PlayµÈµÈ£¬¿ÉÒÔ¼¯ÈºµÄ¶à½ø³Ì¹ÜÀí¡£Ò²ÊÇÒ»ÖÖ˽ÓеÄPass£¬ÊµÏÖ·þÎñµÄ·¢ÏÖ£¬Îª²¿ÊðÌṩÌṩREST API·þÎñ£¬ÓÐÊÚȨºÍSSL¡¢ÅäÖÃÔ¼Êø£¬Í¨¹ýHAProxyʵÏÖ·þÎñ·¢Ïֺ͸ºÔØÆ½ºâ¡£

ÕâÑù£¬ÎÒÃÇ¿ÉÒÔÈçͬһ̨LinuxÖ÷»úÒ»Ñù¹ÜÀíÊýǧ̨·þÎñÆ÷£¬ËüÃǵĶÔÓ¦ÔÀíÈçÏÂͼ£¬Ê¹ÓÃMarathonÀàËÆLinuxÖ÷»úÄÚµÄinit
SystemdµÈÍâ¿Ç¹ÜÀí£¬¶øMesosÔò²»Ö»°üº¬Ò»¸öLinuxºË£¬¿ÉÒÔµ÷¶ÈÊýǧ̨·þÎñÆ÷µÄLinuxºË£¬Êµ¼ÊÊÇÒ»¸öÊý¾ÝÖÐÐĵÄÄںˣº

°²×°ÅäÖÃ
Ê×ÏÈ£¬ÎÒÃÇÐèÒªÉèÖÃMesos¼¯Èº»·¾³£¬ÏÂÃæÎÒÃÇÒÔÔÚUbuntu 14.04 vagrant ½ÚµãÉÏÉèÖÃMesos
master/slave ºÍ Zookeeper¡£°²×°ÒÀÀµ£º
$ apt-get install curl python-setuptools python-pip python-dev python-protobuf |
°²×°zookeeper:
$ apt-get install zookeeperd |
°²×°ºó£¬ZookeeperÓÐÒ»¸öÅäÖã¬Ã¿¸öZookeeperÐèÒªÖªµÀËüÔÚquorumÖеÄλÖá£
$ echo 1 | sudo dd of=/var/lib/zookeeper/myid |
ÏÂÃæÉèÖÃDocker:
$ echo "deb http://get.docker.io/ubuntu docker main" > /etc/apt/sources.list.d/docker.list
$ apt-get update && apt-get install lxc-docker
$ docker version
Client version: 1.0.0
Client API version: 1.12
Go version (client): go1.2.1
Git commit (client): 63fe64c
Server version: 1.0.0
Server API version: 1.12
Go version (server): go1.2.1
Git commit (server): 63fe64c |
´ÓDocker HubÀȡһ¸öubuntu image
$ docker pull libmesos/ubuntu |
ÅäÖÃMesos:
$ curl -fL http://downloads.mesosphere.io/master/ubuntu/14.04/
mesos_0.19.0~ubuntu14.04%2B1_amd64.deb -o /tmp/mesos.deb
$ dpkg -i /tmp/mesos.deb
$ mkdir -p /etc/mesos-master
$ echo in_memory | sudo dd of=/etc/mesos-master/registry
## Mesos Python egg for use in authoring frameworks
$ curl -fL http://downloads.mesosphere.io/master/ubuntu/14.04/
mesos-0.19.0_rc2-py2.7-linux-x86_64.egg -o /tmp/mesos.egg
$ easy_install /tmp/mesos.egg |
ÏÂÔØMarathon£º
$ tar xvzf marathon-0.6.0.tgz |
Mesosͨ¹ýDeimos ¹ÜÀíDocker£¬Í¨¹ýpip°²×°Deimos:
ÅäÖÃmesos ʹÓÃDeimos
$ mkdir -p /etc/mesos-slave
$ echo /usr/local/bin/deimos | sudo dd of=/etc/mesos-slave/containerizer_path
$ echo external | sudo dd of=/etc/mesos-slave/isolation |
Æô¶¯ËùÓзþÎñ £º
$ initctl reload-configuration
$ service docker start
$ service zookeeper start
$ service mesos-master start
$ service mesos-slave start
##### Starting Marathon #####
$ cd marathon-0.6.0
$ ./bin/start --master zk://localhost:2181/mesos --zk_hosts localhost:2181 |
Marathon ÔÚ¶Ë¿Ú8080ÒѾÆô¶¯ÕìÌý£¬ÎÒÃÇ¿ÉÒÔͨ¹ýä¯ÀÀÆ÷·ÃÎÊ£º
curl localhost:8080/help # gives us some details about the API's |
Æô¶¯ÈÝÆ÷
ÎÒÃÇͨ¹ýMarathonÆô¶¯Ò»¸öÈÝÆ÷µÄREST APIÌá½»ÈçÏÂ:
curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" \
localhost:8080/v2/apps -d '{
"container": {"image": "docker:///libmesos/ubuntu", "options": ["--privileged"]},
"cpus": 0.5,
"cmd": "sleep 500",
"id": "docker-tester",
"instances": 1,
"mem": 300
}' |
ÎÒÃÇͨ¹ýÔÚcurlÃüÁîºóÑ¡Ïî"options"Ìá½»¶¨ÖƵÄDocker£¬ÎÒÃÇÄܼì²ésyslog
£¬ÒòΪmesosȱʡÈÕÖ¾ÊÇ·ÅÔÚsyslogÖС£
Jun 27 07:24:58 vagrant-ubuntu-trusty-64 deimos[19227]: deimos.containerizer.docker.launch() exit 0
// docker run --sig-proxy --rm --cidfile /tmp/deimos/mesos/00d459fb-22ca-4af7-9a97-ef8a510905f2/
cid -w /tmp/mesos-sandbox -v /tmp/deimos/mesos/00d459fb-22ca-4af7-9a97-ef8a510905f2/fs:/
tmp/mesos-sandbox --privileged -p 31498:31498 -c 512 -m 300m -e PORT=31498 -e
PORT0=31498 -e PORTS=31498 libmesos/ubuntu sh -c 'sleep 500' |
ÎÒÃÇÒ²ÄÜͨ¹ýMarathon Rest API¼ì²éÎÒÃÇÆô¶¯ÈÎÎñµÄ״̬£º
curl -X GET -H "Content-Type: application/json" localhost:8080/v2/apps |
ÏÂÃæÊÇMarathon UI»ñµÃÐÅÏ¢µÄ½ØÍ¼£º

¸ü¶à¹ØÓÚDockerÈÎÎñµÄÐÅÏ¢¿ÉÒÔͨ¹ýMesos GUIÔÚMesosÖ÷·þÎñÆ÷µÄ¶Ë¿Ú5050 £¬ÏÖÔÚÎÒÃDzâÊÔÒ»ÏÂÈÎÎñµÄÉìËõÐÔ£¬±ÈÈçÎÒÃÇÐèÒª¼ÓÈë¸ü¶à½Úµã·þÎñÆ÷£¬ÓÐÁ½ÖÖ°ì·¨£¬Ê¹ÓÃGUI»òͨ¹ý·¢³öputÇëÇó¡£
curl -X PUT -H "Content-Type: application/json" localhost:8080/v2/apps/docker-tester \ "container": {"image": "docker:///libmesos/ubuntu", "options": ["--privileged"]}, "cpus": 0.5, "cmd": "sleep 500", "id": "docker-tester", "instances": 2, # increasing the instance count to 2 "mem": 300 }' |
MarathonÄÜÈ·±£ËùÓÐdocker½ø³ÌÆô¶¯ÔËÐУ¬Èç¹ûij¸ö½ø³Ì±ÀÀ££¬Marathon»áÖØÐÂÆô¶¯Í¬ÑùµÄ½ø³Ì£¬ÒÔÈ·±£Ã¿¸öÅäÖÃÔËÐÐÒ»¸öʵÀý£¬»¹ÓÐÆäËû¿ªÔ´Mesosµ÷¶ÈÆ÷ÈçApache
Aurora, Airbnb's Chronos. µ«ÊÇmarathon±È½ÏÖ±½Ó¼òµ¥ÌṩºÃµÄREST APIÓÃÀ´¹ÜÀíÈÝÆ÷£¬ËäÈ»Mesos,
Marathon ºÍDocker»¹ºÜÄêÇᣬµ«ÊÇÌṩÁË»ùÓÚDockerµÄɱÊÖ¼¶¼¯Èº¹ÜÀí×éºÏ¡£
|