1. Mesos¼ò½é
1.1 Mesos
Apache Mesos ÊÇÒ»¸ö·Ö²¼Ê½ÏµÍ³µÄ¹ÜÀíÈí¼þ£¬¶Ô¼¯ÈºµÄ×ÊÔ´½øÐзÖÅäºÍ¹ÜÀí¡£
MesosÖ÷ÒªÓÉÒÔϼ¸²¿·Ö×é³É£º
Master£º ¹ÜÀí¸÷Slave½Úµã
Slave£º Ϊ¼¯ÈºÌṩ×ÊÔ´
Framework£º scheduler´ÓMasterÇëÇó×ÊÔ´£¬executorÔÚSlaveÉÏÖ´ÐÐÈÎÎñ
Slave½ÚµãÉϵÄÿ¸öexecutorÊÇÒ»¸öÈÝÆ÷
¹Ù·½Îĵµ£º
http://mesos.apache.org/documentation/latest/architecture/
http://mesos.apache.org/documentation/latest/getting-started/
MesosÖ÷·þÎñÆ÷ʹÓÃZookeeper½øÐзþÎñÑ¡¾ÙºÍ·¢ÏÖ¡£ËüÓÐÒ»¸ö×¢²áÆ÷¼Ç¼ÁËËùÓÐÔËÐÐÈκκʹӷþÎñÆ÷ÐÅÏ¢£¬Ê¹ÓÃMultiPaxos½øÐÐÈÕÖ¾¸´ÖÆÊµÏÖÒ»ÖÂÐÔ¡£ MesosÓÐÒ»¸ö´Ó·þÎñÆ÷»Ö¸´»úÖÆ£¬ÎÞÂÛʲôʱºòÒ»¸ö´Ó·þÎñÆ÷ËÀ»úÁË£¬Óû§µÄÈÎÎñ»¹ÊÇÄܹ»¼ÌÐøÔËÐУ¬´Ó·þÎñÆ÷»á½«Ò»Ð©¹Ø¼üµãÐÅÏ¢ÈçÈÎÎñÐÅÏ¢ ״̬¸üг־û¯µ½±¾µØ´ÅÅÌÉÏ£¬ÖØÐÂÆô¶¯Ê±¿ÉÒÔ´Ó´ÅÅÌÉϻָ´ÔËÐÐÕâЩÈÎÎñ(ÀàËÆJavaÖеĶۻ¯ºÍ»½ÐÑ)
1.2 Marathon
Marathon ÊÇMesosµÄÒ»¸öFramework£¬ÓÃÀ´Ö´ÐÐÐèÒª³¤Ê±¼äÔËÐеÄÈÎÎñ¡£Èç¹û°ÑMesos±ÈÓ÷³ÉKernelµÄ»°£¬ÄÇôMarathon¾ÍÊÇËüµÄÊØ»¤½ø³ÌDaemon¡£
Ëü»¹¾ß±¸HA£¬Health Checks£¬·þÎñ·¢Ïֵȹ¦ÄÜ¡£Èç¹ûij¸öDocker½ø³Ì±ÀÀ££¬Marathon»áÖØÐÂÆô¶¯Í¬ÑùµÄ½ø³Ì¡£
1.3 Chronos
Chronos±¾ÖÊÉÏÊÇcron-on-mesos,ÕâÊÇÒ»¸öÓÃÀ´ÔËÐлùÓÚÈÝÆ÷¶¨Ê±ÈÎÎñµÄMesos¿ò¼Ü¡£
1.4 ZooKeeper
ZooKeeperÓÃÓÚ¼¯ÈºµÄ¹ÜÀí£¬°üÀ¨Í³Ò»ÅäÖùÜÀí£¬Ñ¡¾ÙLeaderµÈ¡£
2. °²×°Mesos
±¾´Î²âÊÔ»·¾³µÄ¹¹³ÉÈçÏ£º
Mesos Master£º test166
Mesos Slave£º test166£¬test167
Marathon£º test166
Chronos£º test166
ZooKeeper£º test166
2.1 °²×°×¼±¸ ÔÚËùÓлúÆ÷ÉÏ£¬°²×°MesosÔ´
1 # rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm |
cÔÚËùÓлúÆ÷µÄ/etc/hostsÖУ¬Ö¸¶¨Ö÷»úÃû
1 # vi /etc/hosts
2 10.86.255.166 test166
3 10.86.255.167 test167 |
2.2 °²×°Master
2.2.1 ÔÚMasterÉϰ²×°Mesos£¬Marathon£¬Chronos£¬ZooKeeper
1. # yum install mesos marathon chronos mesosphere-zookeeper |
Èç¹û·þÎñÆ÷ÉÏ֮ǰװ¹ýjdk£¬Éý¼¶µ½×îа汾
2.2.2 ZooKeeperÉ趨
±¾´ÎÅäÖõÄMasterÊǵ¥½Úµã»·¾³£¬ZooKeeperÒ²Êǵ¥µã
1 # vi /etc/mesos/zk
2 zk://test166:2181/mesos
|
2.2.3 Æô¶¯·þÎñ
1 # systemctl start zookeeper
2 # systemctl start mesos-master
3 # systemctl start marathon
4 # systemctl start chronos |
2.3 °²×°Slave
2.3.1 ÔÚSlaveÉϰ²×°Mesos£¬Docker
1 # yum install mesos docker
|
2.3.2 DockerÏà¹ØÉ趨
1 # echo 'docker,mesos' > /etc/mesos-slave/containerizers
2< # echo '5mins' > /etc/mesos-slave/executor_registration_timeout
|
2.3.3 ZooKeeperÉ趨
1# vi /etc/mesos/zk
2 zk://test166:2181/mesos
|
2.3.4 Æô¶¯·þÎñ
1# systemctl start docker
2 # systemctl start mesos-slave |
2.4 È·ÈÏ
MesosµÄÒ³Ãæ
http://10.86.255.166:5050/
MarathonµÄÒ³Ãæ
http://10.86.255.166:8080/
ChronosµÄÒ³Ãæ
http://10.86.255.166:4400/
3. ʹÓÃMesos
ÔÚMesos SlaveÒ³Ãæ£¬¿ÉÒÔ¿´µ½Á½¸öSlave
3.1 Ö´ÐÐframework²âÊÔ
3.1.1 ÔÚ·þÎñÆ÷ÉÏÖ´ÐÐframework²âÊÔÃüÁî
1 # ./src/examples/python/test-framework 10.86.255.166:5050
|
3.1.2 ÔÚFrameworksÒ³Ãæ£¬¿ÉÒԲ鿴ÈÎÎñµÄÖ´ÐÐÇé¿ö
3.1.3 µã»÷½áÊøµÄÈÎÎñÒ³Ãæ£¬¿ÉÒÔ¿´µ½ÔÚÄĸöSlaveÉÏÖ´ÐеÄ
3.2 ²âÊÔMarathon ÓÃncÃüÁîÆô¶¯Ò»¸öHTTP·þÎñ
3.2.1 ÔÚ¸÷½ÚµãÉϰ²×°netcat
1 # yum install nmap-ncat
|
3.2.2 ÔÚMarathonÒ³Ãæ£¬µã»÷¡°Create Application¡±´´½¨ÈÎÎñ
command£º while true; do ( echo "HTTP/1.0 200 Ok"; echo; echo "Hello World" ) | nc -l $PORT; done
3.2.3 µã»÷¡°Create¡±ºó£¬´´½¨²¢Ö´ÐÐÈÎÎñ
3.2.4 ÔÚApplicationsÒ³Ãæ£¬µã»÷ÈÎÎñ£¬¿ÉÒÔ¿´µ½ÈÎÎñµÄÏêϸÐÅÏ¢
¿ÉÒÔ¿´µ½ÈÎÎñ·Ö²¼ÔÚÁ½¸ö½ÚµãÉÏ£¬·ÃÎÊHTTP·þÎñÆô¶¯µÄ¶Ë¿Ú
3.2.5 ÔÚ¸÷½Úµã¿ÉÒÔ¿´µ½nc½ø³ÌÕýÆô¶¯×Å
test166£º test167£º
3.3 ²âÊÔChronos
3.3.1 ÔÚChronosÒ³Ãæ£¬µã»÷¡°New Job¡±´´½¨ÈÎÎñ
×¢Ò⣺ʱ¼äÊÇUTCʱ¼ä
3.3.2 ÔÚChronosÒ³Ãæ£¬¿ÉÒÔ¿´µ½ÈÎÎñÖ´ÐеÄÇé¿ö
3.3.3 ÔÚMesosÒ³Ãæ£¬¿ÉÒÔ¿´µ½ÈÎÎñÖ´ÐеÄÇé¿ö
4. Ö´ÐÐDockerÈÎÎñ
4.1 ²âÊÔͨ¹ýMarathonÖ´ÐÐDockerÈÎÎñ
Æô¶¯Docker£¬×¥È¡ubuntu¾µÏñ£¬dateÃüÁîÊä³öµ±Ç°Ê±¼ä
ÈÎÎñDeployingµÄʱºò£¬´Ódocker.ioץȡ¾µÏñ£¬×¥È¡ÏÂÀ´ºó£¬¿ªÊ¼Running¡£
Èç¹ûץȡ¾µÏñµÄʱ¼ä¹ý³¤£¬Ê§°ÜµÄʱºò£¬¿ÉÒÔÏÈÓÃdocker pullÃüÁîÔÚ½ÚµãÉÏץȡ¾µÏñºó£¬ÔÙÖ´ÐÐÈÎÎñ¡£
4.1.1 ´´½¨jsonÎļþ
{
"container": {
"type": "DOCKER",
"docker": {
"image": "libmesos/ubuntu"
}
},
"id": "ubuntu-marathon",
"instances": 2,
"cpus": 0.5,
"mem": 256,
"uris": [],
"cmd": "while sleep 10; do date -u +%T; done"
}
|
4.1.2 ÔÚMarathonÉÏ´´½¨ÈÎÎñ
# curl -X POST -H "Content-Type: application/json" http://test166:8080/v2/apps -d@marathon-test.json
|
4.1.3 ÔÚMarathonÒ³ÃæÈ·ÈÏÈÝÆ÷ÒѾÆô¶¯ 4.1.4 ÔÚMesosÒ³ÃæÈ·ÈÏÈÎÎñÕýÔÚÖ´ÐÐÖÐ 4.1.5 ´ÓstdoutÐÅϢȷÈÏÊä³öµÄʱ¼ä 4.1.6 ÔÚ½ÚµãÉÏÈ·ÈÏÈÝÆ÷ÒѾÆô¶¯
# docker ps 4.1.7 ²é¿´ÈÝÆ÷µÄÈÕÖ¾£¬È·ÈÏÊä³öµÄʱ¼ä
# docker logs CONTAINER_ID |
4.2 ²âÊÔͨ¹ýChronosÖ´ÐÐDockerÈÎÎñ Æô¶¯Docker£¬×¥È¡nginx¾µÏñ£¬Æô¶¯nginxÈÝÆ÷
4.2.1 ´´½¨jsonÎļþ
# vi chronos-test.json
{
"container": {
"type": "DOCKER",
"image": "nginx"£¬
"network": "BRIDGE"
},
"schedule": "R\/2015-12-20T07:30:00Z\/PT2M",
"name": "chronos-nginx",
"cpus": "0.5",
"mem": "256",
"uris": [],
"command": "/usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf"
} |
network": "BRIDGE",ÒòΪDockerĬÈϵÄÍøÂçģʽÊÇÇŽӣ¬²»Ö¸¶¨Ä¬ÈÏÒ²ÊÇBRIDGE
4.2.2 ÔÚChronosÉÏ£¬´´½¨ÈÎÎñ
# curl -L -H "Content-Type: application/json" -X POST -d@chronos-test.json http://test166:4400/scheduler/iso8601< |
4.2.3 ÔÚChronosÒ³ÃæÈ·ÈÏÈÎÎñÒÑ×ö³É ±¾´ÎÊDzâÊÔ£¬ËùÒÔÔÚChronosµÄÈÎÎñÒ³Ãæ£¬µã»÷¡¸Force Run¡¹Ç¿ÖÆÖ´ÐÐ 4.2.4 ÔÚMesosÒ³ÃæÈ·ÈÏÈÎÎñµÄÏêϸÐÅÏ¢ 4.2.5 ÔÚ½ÚµãÉÏÈ·ÈÏÈÝÆ÷Æô¶¯
4.2.6 È·ÈÏnginxÍøÒ³¿ÉÒÔ·ÃÎÊ
5. ºó¼Ç Mesos, Marathon ʹµÃ Docker¼¯ÈºµÄ¹ÜÀí±äµÃ¼òµ¥·½±ã£¬ÎªÔÚÉú²ú»·¾³²¿ÊðʹÓÃDocker¼¯ÈºÌṩÁË¿ÉÄÜ¡£
|