Apache Mesos可以在一樣的集羣機器上運行多種分佈式系統類型,更加動態有效率低共享資源。提供失敗偵測,任務發佈,任務跟蹤,任務監控,低層次資源管理和細粒度的資源共享,能夠擴展伸縮到數千個節點。html
Apache Mesos主從服務器調度資源的順序爲首先由Mesos主服務器查詢可用資源給調度器,第二步調度器向主服務器發出加載任務,主服務器再傳達給從服務器,從服務器向執行器命令加載任務執行,執行器執行任務之後,將狀態反饋上報給從服務器,最終告知調度器 。java
Apache Mesos主服務器使用Zookeeper進行服務選舉和發現。它有一個註冊器記錄了全部運行任何和從服務器信息,使用MultiPaxos進行日誌複製實現一致性。
Apache Mesos有一個從服務器恢復機制,不管何時一個從服務器死機了,用戶的任務仍是可以繼續運行,從服務器會將一些關鍵點信息如任務信息 狀態更新持久化到本地磁盤上,從新啓動時能夠從磁盤上恢復運行這些任務(相似Java中的鈍化和喚醒)。python
它是一個mesos框架,可以支持運行長服務,好比web應用等。是集羣的分佈式Init.d,可以原樣運行任何Linux二進制發佈版本,如Tomcat Play等,能夠集羣的多進程管理。也是一種私有的Pass,實現服務的發現,爲部署提供提供REST API服務,有受權和SSL、配置約束,經過HAProxy實現服務發現和負載平衡。linux
Apache Mesos框架是一個在Mesos上運行分佈式應用的應用程序,它有兩個組件:
調度器 : 與Mesos交互,訂閱資源,而後在mesos從服務器中加載任務;
執行器 : 從框架的環境變量配置中得到信息,在mesos從服務器中運行任務;nginx
主機名 | IP地址 | 安裝軟件包 |
---|---|---|
master | 192.168.96.46 | jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、zookeeper-3.4.10.tar.gz、marathon-0.15.2.tgz |
master1 | 192.168.96.47 | jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、zookeeper-3.4.10.tar.gz |
master2 | 192.168.96.48 | jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、zookeeper-3.4.10.tar.gz |
slave | 192.168.96.49 | jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、docker |
slave1 | 192.168.96.50 | jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、docker |
cat /etc/redhat-release
uname -r
setenforce 0 systemctl stop firewalld.service
tar zxvf jdk-8u144-linux-x64.tar.gz -C /usr/local/
vim /etc/profileweb
export JAVA_HOME=/usr/local/jdk1.8.0_144 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
source /etc/profile
java -version
yum groupinstall -y "Development Tools"
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
vim /etc/yum.repos.d/wandisco-svn.repodocker
[WANdiscoSVN] name=WANdisco SVN Repo 1.9 enabled=1 baseurl=http://opensource.wandisco.com/centos/7/svn-1.9/RPMS/$basearch/ gpgcheck=1 gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
yum install -y apache-maven python-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel apr-util-devel subversion-devel
vim /etc/profileapache
export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so
source /etc/profile
#下載mesos wget http://archive.apache.org/dist/mesos/0.25.0/mesos-0.25.0.tar.gz #解壓軟件包 tar zxvf mesos-0.25.0.tar.gz -C /opt/ #移動至/root目錄下 mv mesos-0.25.0/ /root/ #進入mesos安裝目錄 cd /root/mesos-0.25.0 #新建build目錄並進入 mkdir build cd build #配置 ../configure #編譯(編譯時間較長) make #檢查 make check #安裝 make install
#master節點: hostnamectl set-hostname master #master1節點: hostnamectl set-hostname master1 #master2節點: hostnamectl set-hostname master2
vim /etc/hostsjson
192.168.96.46 master 192.168.96.47 master1 192.168.96.48 master2 192.168.96.49 slave 192.168.96.50 slave1
ln -sf /root/mesos-0.25.0/build/bin/mesos-master.sh /usr/sbin/mesos-master
#slave節點: hostnamectl set-hostname slave #slave1節點: hostnamectl set-hostname slave1
vim /etc/hostsvim
192.168.96.46 master 192.168.96.47 master1 192.168.96.48 master2 192.168.96.49 slave 192.168.96.50 slave1
ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave
yum install docker -y
systemctl start docker.service systemctl enable docker.service
echo "export PATH=/home/q/zookeeper-3.4.10/bin:$PATH" >> /etc/profile
source /etc/profile
zkServer.sh start /home/q/zookeeper-3.4.10/conf/zoo.cfg
zkServer.sh start /home/q/zookeeper-3.4.10/conf/zoo.cfg
zkServer.sh start /home/q/zookeeper-3.4.10/conf/zoo.cfg
zkServer.sh status
#解壓縮 tar zxvf zookeeper-3.4.10.tar.gz #移動至/home/q目錄下 mv zookeeper-3.4.10 /home/q/ #進入zookeeper目錄 cd /home/q/zookeeper-3.4.10/
mv conf/zoo_sample.cfg conf/zoo.cfg
vim conf/zoo.cfg
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/home/q/zookeeper-3.4.10/data //修改 dataLogDir=/home/q/zookeeper-3.4.10/datalog //修改 # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 server.1=192.168.96.46:2888:3888 //添加master節點 server.2=192.168.96.47:2888:3888 //添加master1節點 server.3=192.168.96.48:2888:3888 //添加master2節點
scp conf/zoo.cfg 192.168.96.47:/home/q/zookeeper-3.4.10/conf/ scp conf/zoo.cfg 192.168.96.48:/home/q/zookeeper-3.4.10/conf/
cd /home/q/zookeeper-3.4.10/ mkdir data mkdir datalog
echo 1 > data/myid
cat data/myid
cd /home/q/zookeeper-3.4.10/ mkdir data mkdir datalog
echo 2 > data/myid
cat data/myid
cd /home/q/zookeeper-3.4.10/ mkdir data mkdir datalog
echo 3 > data/myid
cat data/myid
./bin/zkServer.sh start conf/zoo.cfg
./bin/zkServer.sh start conf/zoo.cfg
./bin/zkServer.sh start conf/zoo.cfg
./bin/zkServer.sh status
./bin/zkServer.sh status
./bin/zkServer.sh status
Marathon是一個Mesos框架,可以支持運行長服務,好比web應用的等.
#下載 wget http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz #解壓縮 tar zxvf marathon-0.15.2.tgz -C /home/q/ #進入maratchon目錄 cd /home/q/marathon-0.15.2/
/home/q/marathon-0.15.2/bin/start --hostname 192.168.96.46 --master zk://192.168.96.46:2181,192.168.96.47:2181,192.168.96.48:2181/mesos
mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.96.46:2181/mesos --quorum=2
mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.96.47:2181/mesos --quorum=2
mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.96.48:2181/mesos --quorum=2
mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.96.46:2181,192.168.96.47:2181,192.168.96.48:2181/mesos --no-hostname_lookup --ip=0.0.0.0
經過Marathon API的形式建立Docker的Nginx任務
vim nginx.json
{ "id":"/nginx", //ID名稱 "container":{ "type":"DOCKER", "docker":{ "image":"nginx", //nginx鏡像 "network":"HOST", //網絡模式爲HOST "parameters":[], "privileged":false, "forcePullImage":false //不強制更新鏡像 } }, "cpus":0.1, "mem":32.0, "instances":1 }
curl -X POST -H "Content-type:application/json" http://192.168.96.46:8080/v2/apps -d@nginx.json
ps aux | grep docker
root 3668 0.0 0.6 121912 12872 pts/0 Sl+ 10:20 0:00 /usr/bin/docker-current -H unix:///var/run/docker.sock pull nginx:latest docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/nginx latest c82521676580 3 weeks ago 109 MB
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1140fbfdb9f6 nginx "nginx -g 'daemon ..." 5 minutes ago Up 5 minutes mesos-a0b5fe43-dfab-4b7e-8a1f-df205371dffd-S0.0b72cb40-29e6-4d6b-a266-6f61c77f6951 a07783adf66d docker.io/centos "/bin/bash" 8 hours ago Exited (0) 8 hours ago optimistic_austin 6dfc71a1c5bd nginx "nginx -g 'daemon ..." 8 hours ago Created ecstatic_euclid f5df1d3fef2a 015566d5b844 "/bin/sh -c 'yum -..." 9 hours ago Exited (1) 9 hours ago eloquent_davinci 02fb081e0119 015566d5b844 "/bin/sh -c 'yum -..." 9 hours ago Exited (1) 9 hours ago confident_brahmagupta