阅读了一些 Mesos 相关的文档后,尝试使用 Mesos,进行了一些测试。
本文所使用的架构是 Mesos 单节点的架构,没有 HA 功能,测试在虚拟机中进行。
测试架构
- mesos-master * 1
- mesos-slave * 2
测试过程主要遵循 http://mesos.apache.org/gettingstarted/,使用 CentOS 6.6 进行测试。
首先保证安装了 wget、tar。
Mesos 安装
-
下载 mesos:
有两种下载方式:
-
获取几个需要用的仓库:
$ sudo wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo $ sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo # 添加 WANdisco SVN 仓库文件: $ sudo vi /etc/yum.repo.d/wandisco-svn.repo # 在文件中添加如下内容: [WANdiscoSVN] name=WANdisco SVN Repo 1.8 enabled=1 baseurl=http://opensource.wandisco.com/centos/6/svn-1.8/RPMS/$basearch/ gpgcheck=1 gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
-
安装所需要的开发工具套件
Development Tools
:$ sudo yum groupinstall -y "Development Tools"
-
安装
devtoolset-2-toolchain
,它包括了 Mesos 所需要的 GCC 4.8.2 和其他相关的包:$ sudo yum install -y devtoolset-2-toolchain
-
安装 Mesos 的其他依赖:
$ sudo yum install -y apache-maven python-devel java-1.7.0-openjdk-devel \ zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel \ cyrus-sasl-md5 apr-devel subversion-devel apr-util-devel
-
启用 devtoolset-2:
$ scl enable devtoolset-2 bash # 确认 gcc++ 的版本大于 4.8,否则 configure 会失败 $ g++ --version gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15) Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
切换到 mesos 目录下,使用 make 来安装 mesos:
# 切换目录 $ cd mesos-0.23.0 # 执行 bootstrap:只有在从 git 仓库安装的情况下需要执行 $ ./bootstrap # 创建 build 目录: $ mkdir build # 切换到 build/ 目录后,执行 configure: # cd build/ # ../configure # 执行 make install 进行安装: # make install 等待 ......
Master & Slave 的启动
启动 Master
-
进入 mesos 目录后,切换到
build/bin/
目录:$ cd build/bin/ $ ls gdb-mesos-local.sh gdb-mesos-tests.sh lldb-mesos-slave.sh mesos-local.sh mesos.sh mesos-tests-flags.sh valgrind-mesos-master.sh gdb-mesos-master.sh lldb-mesos-local.sh lldb-mesos-tests.sh mesos-master-flags.sh mesos-slave-flags.sh mesos-tests.sh valgrind-mesos-slave.sh gdb-mesos-slave.sh lldb-mesos-master.sh mesos-local-flags.sh mesos-master.sh mesos-slave.sh valgrind-mesos-local.sh valgrind-mesos-tests.sh
-
看到有很多可运行的 bash 脚本,其中,
mesos-master.sh
就是启动 Master 的脚本,启动方式如下:$ ./mesos-master.sh --ip=192.168.5.51 --work_dir=/var/lib/mesos I1203 11:44:50.265260 1718 main.cpp:181] Build: 2015-08-31 16:41:23 by root I1203 11:44:50.265368 1718 main.cpp:183] Version: 0.23.0 I1203 11:44:50.265743 1718 main.cpp:204] Using 'HierarchicalDRF' allocator I1203 11:44:50.887171 1718 leveldb.cpp:176] Opened db in 621.103576ms I1203 11:44:51.318090 1718 leveldb.cpp:183] Compacted db in 430.852714ms I1203 11:44:51.318253 1718 leveldb.cpp:198] Created db iterator in 63501ns I1203 11:44:51.318302 1718 leveldb.cpp:204] Seeked to beginning of db in 25666ns I1203 11:44:51.318949 1718 leveldb.cpp:273] Iterated through 3 keys in the db in 625003ns I1203 11:44:51.319116 1718 replica.cpp:744] Replica recovered with log positions 282609 -> 282610 with 0 holes and 0 unlearned I1203 11:44:51.347681 1762 recover.cpp:449] Starting replica recovery I1203 11:44:51.349642 1718 main.cpp:383] Starting Mesos master I1203 11:44:51.364735 1762 recover.cpp:475] Replica is in VOTING status I1203 11:44:51.364995 1761 recover.cpp:464] Recover process terminated I1203 11:44:51.476372 1718 master.cpp:368] Master 20151203-114451-856008896-5050-1718 (192.168.5.51) started on 192.168.5.51:5050 ... ...(内容过多,不予显示)
-
在浏览器中可以打开 Mesos 的查看界面:
注:
- 查看界面需要输入 5050 端口;
- 该界面仅用于查看 Mesos Master, Framwork, Slave 的一些情况,是一个不可操作的界面。
这样,Master 就启动成功了。
启动 Slave
- 与启动 Master 相同,进入 mesos 目录后,切换至
build/bin/
目录; -
目录下有
mesos-slave.sh
脚本即启动 Slave 的脚本,启动方式如下:$ ./mesos-slave.sh --master=192.168.5.51:5050 I1203 11:47:28.953408 1605 main.cpp:162] Build: 2015-08-31 16:41:23 by root I1203 11:47:28.953712 1605 main.cpp:164] Version: 0.23.0 I1203 11:47:28.974297 1605 containerizer.cpp:111] Using isolation: posix/cpu,posix/mem I1203 11:47:38.992503 1605 main.cpp:249] Starting Mesos slave I1203 11:47:38.994990 1605 slave.cpp:190] Slave started on 1)@192.168.5.54:5051 I1203 11:47:38.995136 1605 slave.cpp:191] Flags at startup: --authenticatee="crammd5" --cgroups_cpu_enable_pids_and_tids_count="false" --cgroups_enable_cfs="false" --cgroups_hierarchy="/sys/ fs/cgroup" --cgroups_limit_swap="false" --cgroups_root="mesos" --container_disk_watch_interval="15secs" --containerizers="mesos" --default_role="*" --disk_watch_interval="1mins" --docker="doc ker" --docker_kill_orphans="true" --docker_remove_delay="6hrs" --docker_sandbox_directory="/mnt/mesos/sandbox" --docker_socket="/var/run/docker.sock" --docker_stop_timeout="0ns" --enforce_con tainer_disk_quota="false" --executor_registration_timeout="1mins" --executor_shutdown_grace_period="5secs" --fetcher_cache_dir="/tmp/mesos/fetch" --fetcher_cache_size="2GB" --frameworks_home= "" --gc_delay="1weeks" --gc_disk_headroom="0.1" --hadoop_home="" --help="false" --initialize_driver_logging="true" --isolation="posix/cpu,posix/mem" --launcher_dir="/home/mesos-0.23.0/build/s rc" --logbufsecs="0" --logging_level="INFO" --master="192.168.5.51:5050" --oversubscribed_resources_interval="15secs" --perf_duration="10secs" --perf_interval="1mins" --port="5051" --qos_corr ection_interval_min="0ns" --quiet="false" --recover="reconnect" --recovery_timeout="15mins" --registration_backoff_factor="1secs" --resource_monitoring_interval="1secs" --revocable_cpu_low_pr iority="true" --strict="true" --switch_user="true" --version="false" --work_dir="/tmp/mesos" I1203 11:47:38.998738 1605 slave.cpp:354] Slave resources: cpus(*):2; mem(*):2808; disk(*):45148; ports(*):[31000-32000] I1203 11:47:38.998942 1605 slave.cpp:384] Slave hostname: slave1 I1203 11:47:38.998960 1605 slave.cpp:389] Slave checkpoint: true I1203 11:47:39.019840 1624 state.cpp:36] Recovering state from '/tmp/mesos/meta' I1203 11:47:39.020339 1621 status_update_manager.cpp:202] Recovering status update manager I1203 11:47:39.020711 1624 containerizer.cpp:316] Recovering containerizer I1203 11:47:39.023622 1627 slave.cpp:4026] Finished recovery I1203 11:47:39.025363 1627 slave.cpp:4179] Querying resource estimator for oversubscribable resources I1203 11:47:39.025823 1627 slave.cpp:684] New master detected at master@192.168.5.51:5050 ... ...(内容过多,不予显示)
-
查看界面,看到 Slave 标签下,多了一台机器的信息:
注意:
- 在启动 slave 时可能遇到如下错误:
Failed to obtain the IP address for 'slave1'; the DNS service may not be able to resolve it: Temporary failure in name resolution
- 其中 “slave1” 即该机器的主机名。此时,在
/etc/hosts
下写好对应的主机名和 IP 即可。
- 在启动 slave 时可能遇到如下错误:
-
以相同的方式启动另一台 Slave,界面上看到添加一台新的 Slave:
到这里,Master 和 Slave 都启动好了,但是它们还什么都没做。