Mesos集群编译安装(centos7)

来源:互联网 发布:压力大 知乎 编辑:程序博客网 时间:2024/05/29 19:33

来到官网:http://mesos.apache.org/,选择getting started,选择wget 下载tar包,不用git。

环境准备(官网没说):

一.yum源换成国内的(参考这个网址):http://blog.csdn.net/lcj200813138020/article/details/46914161

centos7默认的源的网址mirrorlist.centos.org,属于国外的网站,可能出现连不上或者网速很慢,刚开始我装软件用yum命令基本都装不上,后来经过思考,原来默认yum源设置的问题。网易(163)yum源是国内最好的yum源之一,无论是速度还是软件版本,都非常的不错,将yum源设置为163yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。当然还有其他的yum源可以使用,所以最号使用国内一些比较好的centosrpm包网站,以便自己好给自己的系统装软件。
1. 切换到系统yum源的目录下,即:cd  /etc/yum.repos.d 
2.备份系统默认yum源:mv  CentOS-Base.repo  CentOS-Base.repo.bk
3.下载163网易的yum源:
  wget  http://mirrors.163.com/.help/CentOS6-Base-163.repo
   {其他的源:中科大的yum源
  wget  http://centos.ustc.edu.cn/CentOS-Base.repo
 sohu的yum源
  wget  http://mirrors.sohu.com/help/CentOS-Base-sohu.repo}
 本文以网易的源为例
4.更改网易的源为默认的系统yum源,即:
  mv CentOS6-Base-163.repo CentOS-Base.repo 
5.运行yum makecache 生成缓存,即yum makecache 
  此时可能会出现HTTP ERORR 404-Not Found Trying othermirror,原因可能是yum查找软件包
  使用的过时的缓存(此时可能需要去cd/etc/yum.repos.d目录,找到过时的缓存,把它去掉),
  清空更新之后,再次安装软件,问题消失,具体见如下指令:
  yum clean all(等同于  yum cleanheaders ;  yum cleanpackages);
  yum  update;这之后,重新运行 yum makecache生成缓存,yummakecache主要目的是将服     务器上的软件包信息在本地缓存,以提高搜索安装软件的速度。(第五步很重要哈,我也是弄了好一会   儿的)


二:升级pytz(解决make时出现的如下报错)


test "../.." = ".." || \

(/usr/bin/mkdir -p python/scheduler/src/mesos/scheduler && cp -pf ../../src/python/scheduler/src/mesos/scheduler/proxy_scheduler.hpp python/scheduler/src/mesos/scheduler/proxy_scheduler.hpp)
test "../.." = ".." || \
(/usr/bin/mkdir -p python/src/mesos && cp -pf ../../src/python/src/mesos/__init__.py python/src/mesos/__init__.py)
Building protobuf Python egg ...
cd ../3rdparty/protobuf-2.6.1/python && \
CC="gcc" \
CXX="g++" \
CFLAGS="-g1 -O0 -Wno-unused-local-typedefs" \
CXXFLAGS="-g1 -O0 -Wno-unused-local-typedefs -std=c++11" \
PYTHONPATH=/root/mesos/build/3rdparty/setuptools-20.9.0 \
/usr/bin/python setup.py build bdist_egg
Traceback (most recent call last):
File "setup.py", line 200, in 
"Protocol Buffers are Google's data interchange format.",
File "/usr/lib64/python2.7/distutils/core.py", line 112, in setup
setup_distribution = dist = klass(attrs)
File "/root/mesos/build/3rdparty/setuptools-20.9.0/setuptools/dist.py", line 269, in __init
_
self.fetch_build_eggs(attrs['setup_requires'])
File "/root/mesos/build/3rdparty/setuptools-20.9.0/setuptools/dist.py", line 313, in fetch_build_eggs
replace_conflicting=True,
File "/root/mesos/build/3rdparty/setuptools-20.9.0/pkg_resources/__init__.py", line 826, in resolve
dist = best[req.key] = env.best_match(req, ws, installer)
File "/root/mesos/build/3rdparty/setuptools-20.9.0/pkg_resources/__init__.py", line 1085, in best_match
dist = working_set.find(req)
File "/root/mesos/build/3rdparty/setuptools-20.9.0/pkg_resources/__init__.py", line 695, in find
raise VersionConflict(dist, req)
pkg_resources.VersionConflict: (pytz 2012d (/usr/lib/python2.7/site-packages), Requirement.parse('pytz>=2010'))
make[2]: *** [../3rdparty/protobuf-2.6.1/python/dist/protobuf-2.6.1-py2.7.egg] Error 1
make[2]: Leaving directory /root/mesos/build/src'
make[1]: *** [all] Error 2
make[1]: Leaving directory
/root/mesos/build/src'
make: *** [all-recursive] Error 1


解决方法:

先安装pip:

wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate
tar zxvf pip-1.5.4.tar.gz 
cd pip-1.5.4
python setup.py install (root用户)
然后pip升级pytz:(root用户)

pip install pytz --upgrade 


(注:我是用的 root用户安装的,其实只要路径指定好,不出现权限问题,不需要root用户也行,我是省事了)

三:按照官网getting started(centos7)编译安装mesos1.4(中间会出现warning,不用管)

首先创建编译目录:mkdir -p /usr/local/mesos/mesos

然后cd /usr/local/mesos

然后 按照官网去wget mesos-1.4.0.tar/gz

剩下的跟着官网走

../configure 这一步,可以改为../configure  --prefix=/usr/local/mesos/mesos,这样手动指定安装目录,避免普通用户安装时出现权限问题。

然后  make 和 make install,如果cpu多的话,可以指定多核运行,make -j4 && make -j4 install  (4核)

另外注意make 和make install 运行时间很长,所以用到多核。

然后可以按照官网简单测试,注意: 如果运行mesos-master.sh 和 mesos-slave.sh的时候,ip指定为127.0.0.1,则只能在虚拟机上打开127.0.0.1:5050访问,在windows下输入hostname(eg:slave4:5050),则访问不到,输入具体的ip(eg:192.168.208.184)也不行,因此我们可以在运行时把ip改为192.168.208.184。不能写为slave4,会出错,但是在windos下查看的时候可以用slave4:5050访问到页面。


四:集群配置(单master)

集群:192.168.208.184 运行mesos master,zk

  192.168.208.183   运行mesos slave,zk

  192.168.208.185   运行mesos slave,zk

1.完全编译好的mesos会有如下目录:

本文编译路径为:/usr/local/mesos/mesos

[root@slave4 mesos]# pwd
/usr/local/mesos/mesos
[root@slave4 mesos]# ls
bin  etc  include  lib  libexec   sbin  share

查看两个主要目录:sbin etc/mesos

[root@slave4 mesos]# cd sbin
[root@slave4 sbin]# ls
mesos-agent      mesos-master  mesos-start-agents.sh   mesos-start-masters.sh  mesos-stop-agents.sh   mesos-stop-masters.sh
mesos-daemon.sh  mesos-slave  mesos-start-cluster.sh  mesos-start-slaves.sh   mesos-stop-cluster.sh  mesos-stop-slaves.sh

[root@slave4 sbin]# cd ..
[root@slave4 mesos]# cd etc/mesos/
[root@slave4 mesos]# ls
mesos-master-env.sh.template  mesos-deploy-env.sh.template  mesos-agent-env.sh.template  mesos-slave-env.sh.template

注:如果目录如上,且文件如上,证明你已经编译成功了,编译过程中正常只会出现WANNING,不会出现ERROR并且这些文件是出现在你指定的 --prefix=/usr/local/mesos/mesos 下面的,不是你的解压完后的mesos-1.4.0下面。


2.开始配置集群(这一步都是在 /usr/local/mesos/mesos/etc/mesos下进行的)

#cd /usr/local/mesos/mesos/etc/mesos  
#cat mesos-agent-env.sh.template > mesos-agent-env.sh  
#cat mesos-deploy-env.sh.template > mesos-deploy-env.sh  (这一步可以不做,因为做完也不修改他,默认就行)
#cat mesos-master-env.sh.template > mesos-master-env.sh  
#cat mesos-slave-env.sh.template > mesos-slave-env.sh (其实这一步也可以不做,因为到后面他是直接复制mesos-agent-env.sh的)

(1)配置master

#vim mesos-master-env.sh 

添加如下:

export MESOS_log_dir=/usr/local/mesos/mesos/log#设置日志目录,如果不设置,默认不会产生log(自动会创建,下面  的work_dir一样)

export MESOS_work_dir=/usr/local/mesos/mesos/master#设置work目录,存放元数据的目录,会存放一些运行信息 

export MESOS_ip=192.168.208.184#设置IP,注意跟测试运行一样,若设置为127.0.0.1,windows输入192.168.208.184:5050会访问不到
export MESOS_port=5050  #设置PORT,默认是5050,端口冲突时修改它
export MESOS_CLUSTER=wkz #设置集群名称
export MESOS_hostname=slave4 #设置master hostname
export MESOS_logging_level=INFO #设置日志级别
export MESOS_offer_timeout=60secs  #设置offer的超时时间
export MESOS_ZK=zk://slave3:2181,slave4:2181,slave5:2181/mesos#设置zk集群,高可用时指定zk,本群测试用只有一个master,若多个master,zk会起到mesos ha作用(个人理解,没怎么查)

export MESOS_quorum=1#设置master的最少数量,若为2则maste机器数量少于此2不行。

# export MESOS_agent_ping_timeout=15         # 设置ping 超时时间,默认15s
# export MESOS_allocation_interval=1         # 设置资源 allocation间隔,默认1s


(2)配置agent(slave)

#vim mesos-agent-env.sh 

# This file contains environment variables that are passed to mesos-agent.
# To get a description of all options run mesos-agent --help; any option
# supported as a command-line option is also supported as an environment
# variable.

# You must at least set MESOS_master.

# The mesos master URL to contact. Should be host:port for
# non-ZooKeeper based masters, otherwise a zk:// or file:// URL.
export MESOS_master=192.168.208.184:5050


# Other options you're likely to want to set:
# export MESOS_log_dir=/var/log/mesos
# export MESOS_work_dir=/var/run/mesos   #存放framework工作目录的目录路径(默认: /tmp/mesos)

# export MESOS_isolation=cgroups
export MESOS_ip=192.168.208.184#注意此处写slave主机的ip
export MESOS_port=5051 #slave默认端口5051
export MESOS_hostname=slave4 #注意此处写slave主机的hostname
export MESOS_log_dir=/usr/local/mesos/mesos/log #日志路径,自动创建
export MESOS_work_dir=/usr/local/mesos/mesos/agent #slave目录,会存放一些运行信息,自动创建
export MESOS_logging_level=INFO#日志等级
export MESOS_isolation=cgroups# 隔离机制


(3)然后复制到mesos-slave-env.sh 

#cp mesos-agent-env.sh  mesos-slave-env.sh 

至于mesos-deploy-env.sh:该文件包含了部署脚本运行的环境变量。只要从模版文件复制过来即可,不需要添加其他参数


(4)创建masters文件

#vim masters 

slave4 (写ip也行)


(5)创建slaves文件

#vimslaves

slave3

slave4


(6)一切完成后,确认一下所有文件

[root@slave4 mesos]# ls
masters                       mesos-master-env.sh.template
mesos-agent-env.sh            mesos-slave-env.sh
mesos-agent-env.sh.template   mesos-slave-env.sh.template
mesos-deploy-env.sh (可以没有,我是做了这一步)          slaves
mesos-deploy-env.sh.template  zookeeper.out
mesos-master-env.sh


(7)最后一步,修改/usr/local/mesos/mesos/sbin/mesos-daemon.sh

ulimit -n 8192修改为ulimit -n 1024
这条指令是在向服务器索要资源,但是 通过ulimit -a查看可以看出-n为1024,系统要求这个数不能更大,因此把8192更改为1024即可。
[root@slave4 sbin]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 11211
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n)1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 11211
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

3.集群分发

(1)首先配置三台机器间的互相免密,略

(2)在slave3,和slave5上,创建 mkdir /usr/local/mesos

(3) 分发编译后并且配置好的mesos给另外两台机器(注意路径)

#scp -r /usr/local/mesos/mesos slave3:/usr/local/mesos/

#scp -r /usr/local/mesos/mesos slave5:/usr/local/mesos/

(4)软件环境:jdk1.8,zk,......

软件环境准备对于刚装好好的centos7来说只需安装一个zookeeper就行,eg:mesos-1.4.0对jdk的要求为1.8,但centos7自带......


4.启动集群

(1)启动zk,三台机器都启动:

(2)在slave4上

# cd  /usr/local/mesos/mesos/sbin/

# sh mesos-start-cluster.sh

或者:

vim ~/.bashrc

添加如下:

export MESOS_HOME=/usr/local/mesos/mesos  
export PATH=${PATH}:${MESOS_HOME}/sbin:${MESOS_HOME}/bin  

注:这块可以写为:$MESOS_HOME,即不加花括号"{  }"

#source ~/.bashrc  

然后直接执行:mesos-start-cluster.sh


(3)查看进程

[root@slave4 mesos]# ps -ef | grep mesos
root      74618      1  1 16:58 ?        00:01:50 /usr/local/mesos/mesos/sbin/mesos-master
root      75859  70073  0 18:51 pts/0    00:00:00 grep --color=auto mesos


[root@slave5 mesos]# ps -ef | grep mesos
root      21323      1  0 01:58 ?        00:01:03 /usr/local/mesos/mesos/sbin/mesos-agent
root      24062  12285  0 03:51 pts/0    00:00:00 grep --color=auto mesos


[root@slave3 mesos]# ps -ef | grep mesos
root      32249      1  1 16:58 ?        00:01:09 /usr/local/mesos/mesos/sbin/mesos-agent
root      33455  20192  0 18:51 pts/0    00:00:00 grep --color=auto mesos


5.查看页面

在windos浏览器下输入:

http://slave4:5050

或者:

http://192.168.208.184:5050


图片:






五:Mesos-HA

集群:192.168.208.184 运行mesos master,mesos slave,zk

  192.168.208.183   运行mesos master,mesos slave,zk

  192.168.208.185   运行mesos master,mesos slave,zk

注:由于虚拟机有限,我把master和slave放到了一台机器上,更好的选择是分别放到不同机器上。


(1)配置masters和slaves(此次试验要求三台机器一样)

[root@slave4 mesos]# cat masters 
slave3
slave4
slave5

[root@slave4 mesos]# cat slaves 
slave3 
slave4
slave5


(2)配置mesos-master-env.sh

MESOS_worker_dir:存放元数据的目录,如果对配置文件修改后,可能需要删除该目录下的文件,然后再重新启动。之前启动时发现有问题,删除该目录中的数据,重启后,运行正常(我出现了这个问题,删除后正常启动),但删除该目录下的文件需要谨慎,会使你元数据丢失。MESOS_quorum:

根据mesos官方中文手册解释:

https://mesos-cn.gitbooks.io/mesos-cn/content/document/runing-Mesos/Configuration.html

或者:http://www.phperz.com/article/15/1205/172995.html(上面的 好像不好使了)

此参数意义在于:使用基于 replicated-Log 的注册表时,复制的个数。 此值需要设置为masters总数量的一半以上,也就是:quorum > (number of masters)/2。 注意:单机模式下不需要设置此参数。(非HA模式)

这个参数在HA中是必不可少的,Master的个数最好是奇数个的,而MESOS_quorum这个参数需要根据Mesos的Master的个数而设定,如

如果你有1个master,MESOS_quorum=1

如果你有3个master,MESOS_quorum=2

如果你有5个master,MESOS_quorum=3

如果你设置成2个master,MESOS_quorum=2(我没尝试)或者有2个master,MESOS_quorum=1,这样启动后,当Active 的 Master挂掉后,将无法实现Standby的Master切换成Active。这就是为什么我在这里采用3个master,以及MESOS_quorum设为2的原因。


[root@slave4 mesos]# cat mesos-master-env.sh
# This file contains environment variables that are passed to mesos-master.
# To get a description of all options run mesos-master --help; any option
# supported as a command-line option is also supported as an environment
# variable.
# Some options you're likely to want to set:
# export MESOS_log_dir=/var/log/mesos
export MESOS_log_dir=/usr/local/mesos/mesos/log
export MESOS_work_dir=/usr/local/mesos/mesos/master 
export MESOS_ip=192.168.208.184
export MESOS_port=5050 
export MESOS_CLUSTER=wkz
export MESOS_hostname=slave4
export MESOS_logging_level=INFO
export MESOS_offer_timeout=60secs 
export MESOS_ZK=zk://slave3:2181,slave4:2181,slave5:2181/mesos
export MESOS_quorum=2


[root@slave5mesos]# cat mesos-master-env.sh
# This file contains environment variables that are passed to mesos-master.
# To get a description of all options run mesos-master --help; any option
# supported as a command-line option is also supported as an environment
# variable.
# Some options you're likely to want to set:
# export MESOS_log_dir=/var/log/mesos
export MESOS_log_dir=/usr/local/mesos/mesos/log
export MESOS_work_dir=/usr/local/mesos/mesos/master
export MESOS_ip=192.168.208.185

export MESOS_port=5050 
export MESOS_CLUSTER=wkz
export MESOS_hostname=slave5
export MESOS_logging_level=INFO
export MESOS_offer_timeout=60secs 
export MESOS_ZK=zk://slave3:2181,slave4:2181,slave5:2181/mesos
export MESOS_quorum=2


[root@slave3 mesos]# cat mesos-master-env.sh
# This file contains environment variables that are passed to mesos-master.
# To get a description of all options run mesos-master --help; any option
# supported as a command-line option is also supported as an environment
# variable.
# Some options you're likely to want to set:
# export MESOS_log_dir=/var/log/mesos
export MESOS_log_dir=/usr/local/mesos/mesos/log
export MESOS_work_dir=/usr/local/mesos/mesos/master
export MESOS_ip=192.168.208.183

export MESOS_port=5050 
export MESOS_CLUSTER=wkz
export MESOS_hostname=slave3
export MESOS_logging_level=INFO
export MESOS_offer_timeout=60secs 
export MESOS_ZK=zk://slave3:2181,slave4:2181,slave5:2181/mesos
export MESOS_quorum=2


(3)配置mesos-agent-env.sh  (注意此时的export MESOS_master要变为zk集群了,不再是之前的单节点的master的ip)

[root@slave3 mesos]# cat mesos-agent-env.sh  
# This file contains environment variables that are passed to mesos-agent.
# To get a description of all options run mesos-agent --help; any option
# supported as a command-line option is also supported as an environment
# variable.
# You must at least set MESOS_master.
# The mesos master URL to contact. Should be host:port for
# non-ZooKeeper based masters, otherwise a zk:// or file:// URL.
#export MESOS_master=192.168.208.184:5050
export MESOS_master=zk://slave3:2181,slave4:2181,slave5:2181/mesos
# Other options you're likely to want to set:
# export MESOS_log_dir=/var/log/mesos
# export MESOS_work_dir=/var/run/mesos
# export MESOS_isolation=cgroups
export MESOS_ip=192.168.208.183
export MESOS_port=5051
export MESOS_hostname=slave3
export MESOS_log_dir=/usr/local/mesos/mesos/log
export MESOS_work_dir=/usr/local/mesos/mesos/agent
export MESOS_logging_level=INFO
export MESOS_isolation=cgroups


[root@slave4 mesos]# cat mesos-agent-env.sh  
# This file contains environment variables that are passed to mesos-agent.
# To get a description of all options run mesos-agent --help; any option
# supported as a command-line option is also supported as an environment
# variable.
# You must at least set MESOS_master.
# The mesos master URL to contact. Should be host:port for
# non-ZooKeeper based masters, otherwise a zk:// or file:// URL.
export MESOS_master=zk://slave3:2181,slave4:2181,slave5:2181/mesos
# Other options you're likely to want to set:
# export MESOS_log_dir=/var/log/mesos
# export MESOS_work_dir=/var/run/mesos
# export MESOS_isolation=cgroups
export MESOS_ip=192.168.208.184
export MESOS_port=5051
export MESOS_hostname=slave4
export MESOS_log_dir=/usr/local/mesos/mesos/log
export MESOS_work_dir=/usr/local/mesos/mesos/agent
export MESOS_logging_level=INFO
export MESOS_isolation=cgroups


[root@slave5 mesos]# cat mesos-agent-env.sh  
# This file contains environment variables that are passed to mesos-agent.
# To get a description of all options run mesos-agent --help; any option
# supported as a command-line option is also supported as an environment
# variable.
# You must at least set MESOS_master.
# The mesos master URL to contact. Should be host:port for
# non-ZooKeeper based masters, otherwise a zk:// or file:// URL.
export MESOS_master=zk://slave3:2181,slave4:2181,slave5:2181/mesos
# Other options you're likely to want to set:
# export MESOS_log_dir=/var/log/mesos
# export MESOS_work_dir=/var/run/mesos
# export MESOS_isolation=cgroups
export MESOS_ip=192.168.208.185
export MESOS_port=5051
export MESOS_hostname=slave5
export MESOS_log_dir=/usr/local/mesos/mesos/log
export MESOS_work_dir=/usr/local/mesos/mesos/agent
export MESOS_logging_level=INFO
export MESOS_isolation=cgroups


(4)复制mesos-agent-env.sh 到 mesos-slave-env.sh  (三台机器都执行

cp  mesos-agent-env.sh   mesos-slave-env.sh  


(5)启动集群

来到/usr/local/mesos/mesos/sbin目录下:

sh mesos-stop-cluster.sh 

sh mesos-start-cluster.sh 


注:我虽然配置了mesos的环境变量,但是在其他目录下执行sbin目录下的命令,并不能正确执行,提示错误如下:

[root@slave5 mesos]# mesos-start-agents.sh
Failed to find /usr/etc/mesos/slaves

但是后来重新搭建的时候,莫名其妙又好使了,不知道为啥。

(6)页面查看(slave3,slave4,slave5均能访问)

以slave4:5050为例:





这时如果kill掉此时的active master:slave3,则会自动选择slave4或者slave5为active master。

[root@slave3 mesos]# ps -ef | grep master
root       2044      1  0 Nov05 ?        00:00:02 /usr/libexec/postfix/master -w
root      36628      1  1 11:22 ?        00:02:33 /usr/local/mesos/mesos/sbin/mesos-master
root      38590  35531  0 14:25 pts/0    00:00:00 grep --color=auto master
[root@slave3 mesos]# kill 36628
[root@slave3 mesos]# ps -ef | grep master
root       2044      1  0 Nov05 ?        00:00:02 /usr/libexec/postfix/master -w
root      38604  35531  0 14:25 pts/0    00:00:00 grep --color=auto master


发现此时active master变为了slave4:




再次重新启动slave3的master:

[root@slave3 sbin]# sh mesos-start-masters.sh 
Starting mesos-master on slave3
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 slave3 /usr/local/mesos/mesos/sbin/mesos-daemon.sh mesos-master </dev/null >/dev/null
Warning: Permanently added the ECDSA host key for IP address '192.168.208.183' to the list of known hosts.
Starting mesos-master on slave4
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 slave4 /usr/local/mesos/mesos/sbin/mesos-daemon.sh mesos-master </dev/null >/dev/null
Starting mesos-master on slave5
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 slave5 /usr/local/mesos/mesos/sbin/mesos-daemon.sh mesos-master </dev/null >/dev/null
[root@slave3 sbin]# ps -ef | grep master
root       2044      1  0 Nov05 ?        00:00:02 /usr/libexec/postfix/master -w
root      38661      1  3 14:29 ?        00:00:00 /usr/local/mesos/mesos/sbin/mesos-master
root      38685  35531  0 14:29 pts/0    00:00:00 grep --color=auto master


通过页面发现,active master 依然是 slave4:



六:移植mesos

环境准备:

centos7.2,

zk,

java不需要,centos7默认有。


(1)把编译好的/usr/local/mesos/mesos  目录打包为mesos1.4.tar,放到另外三台机器上。

假定: 机器为s1,s2,s3


(2)尝试一:在普通用户家目录下尝试部署(eg:/home/wkz)

在/home/wkz下解压缩mesos1.4.tar,然后cd mesos, 修改sbin目录下mesos-daemon.sh,mesos-start-agents.sh...等*.sh文件第一行的prefix=/usr/local/mesos/mesos 为prefix=/home/wkz/mesos,然后修改etc/mesos,mesos-master-env.sh,和另外两个 .sh 文件的对应ip和hostname,以及wok_dir,slave_dir,master_dir。(所有这些操作,三台机器同时进行)

然后配置免密,配置完,随便一台进入sbin下,先测试单机的情况,运行 ./mesos-master,会发现出现如下错误:

./mesos-master: error while loading shared libraries: libsvn_delta-1.so.0: cannot open shared object file: No such file or directory

执行这个操作:yum install -y subversion-devel

再次执行./mesos-master,发现这个错误:不能发现libmesos-1.4.0.so 这个文件:

./mesos-master: error while loading shared libraries: libmesos-1.4.0.so: cannot open shared object file: No such file or directory

这个时候其实已经知道是为啥了,编译的时候是按照 /usr/local/mesos/mesos来编译的,而sbin下的mesos-master是二进制文件无法修改,即里面的prefix我们无法修改,而且libmesos-1.4.0.so在/home/wkz/mesos/lib下是存在的。

尝试了把libmesos-1.4.0.so放到新建的 /usr/local/mesos/mesos/lib,发现运行出来了./mesos-master --ip=192.168.208.184 --work_dir=/var/lib/mesos,(这个过程需要修改/usr/local/ 权限为 o+x,要不wkz用户无法创建mesos/lib)

就算你上面的搞定了,那么你启动的时候会发现需要root密码:

./mesos-agent --master=192.168.208.184:5050 --work_dir=/home/wkz/mesos
WARNING: Logging before InitGoogleLogging() is written to STDERR
I1107 17:53:40.099164 19592 main.cpp:348] Build: 2017-11-03 11:19:53 by root
I1107 17:53:40.099318 19592 main.cpp:349] Version: 1.4.0
I1107 17:53:40.249310 19592 systemd.cpp:238] systemd version `219` detected
I1107 17:53:40.249372 19592 main.cpp:459] Initializing systemd state
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password: 
==== AUTHENTICATION COMPLETE ===

..................

所以放到家目录下太折腾了,不可取,我就没再测试其他的,下面进行尝试二


(3)尝试二:(全程root)

新建/usr/local/mesos/ ,把mesos1.4.tar放到这里,解压缩,出现mesos目录,然后只需要修改各个机器上的etc/mesos下面的*.sh配置文件即可。

在做最后一步:yum install -y subversion-devel

要不然执行测试 ./mesos-master的时候,还会出现下面的错误:

./mesos-master: error while loading shared libraries: libsvn_delta-1.so.0: cannot open shared object file: No such file or directory

在之后就一起照旧了,完全实现编译好的mesos移植。


(4)尝试三:(移植到centos6)

这次是按照普通用户编译安装(详见第七)后移植的,一切照常,修改各种文件后,启动./mesos-master,出现如下问题:

./mesos-master: error while loading shared libraries: libdb-5.3.so: cannot open shared object file: No such file or directory

看了一下官网的编译步骤,发现centos6和centos7编译方式不全一样,所以不再进行尝试。

结论:跨版本移植编译的mesos没实现


七:普通用户编译安装mesos(wkz)


(1)准备跟之前root用户做的一样,然后按照官网进行操作,记得编辑/etc/sudores文件,赋予wkz用户sudo权限。

(2)在进行cd build ,执行 ../configure 时,指定prefix为,--prefix=/home/wkz/mesos,记得在wkz家目录下创建mesos文件夹。

(3)照常编译,等2个小时左右编译完成后,配置/home/wkz/mesos/etc/mesos各个配置文件

(4)这一次我再次尝试了配置mesos的环境变量,然后source后发现,可以在wkz用户的任意路径加快捷执行mesos-start-cluster.sh命令了(然后尝试上次root用户配置环境变量的方式,发现能够正常使用mesos-start-cluster.sh,不知道为啥)

(5)执行完后查看进程,发现三台机器master都能启动,但是agent都不能启动,记性如下单机测试。

执行:mesos-master --ip=192.168.208.184 --work_dir=/home/wkz/meta一切正常;

执行:mesos-slave --master=192.168.208.184:5050 --work_dir=/home/wkz/meta,发现需要root密码

[wkz@slave4 ~]$ mesos-slave --master=192.168.208.184:5050 --work_dir=/home/wkz/meta
WARNING: Logging before InitGoogleLogging() is written to STDERR
I1108 16:24:36.130376 32941 main.cpp:348] Build: 2017-11-08 13:29:37 by wkz
I1108 16:24:36.130524 32941 main.cpp:349] Version: 1.4.0
I1108 16:24:37.863833 32941 systemd.cpp:238] systemd version `219` detected
I1108 16:24:37.863987 32941 main.cpp:459] Initializing systemd state
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password: (一段时间不输入出现如下)

Failed to start mesos_executors.slice: Connection timed out
See system logs and 'systemctl status mesos_executors.slice' for details.
polkit-agent-helper-1: pam_authenticate failed: Authentication failure
E1108 16:25:03.010860 32941 shell.hpp:107] Command 'systemctl start mesos_executors.slice' failed; this is the output:
E1108 16:25:03.011312 32941 main.cpp:468] EXIT with status 1: Failed to initialize systemd: Failed to start 'mesos_executors.slice': Failed to start systemd slice `mesos_executors.slice`: Failed to execute 'systemctl start mesos_executors.slice'; the command was either not found or exited with a non-zero exit status: 1

输入root密码后,发现了一大堆东西都是在根目录下执行的,尝试配置了各个目录的o+w权限,发现到最后一个/sys/fs目录下的cgroup目录不让配置o+w,然后就无法进行下去了。

然后尝试sudo  mesos-start-cluster.sh,发现可以了(前提是三台机器root配置免密.......无语)

总结:普通用户运行agent必须要root密码,或者sudo权限。








原创粉丝点击