工作记录一-mesos+marathon

泄露秘密 提交于 2020-03-09 07:30:55

################## 1. 环境准备 #####################################
1. 使用mesosphere的rpm源安装相关软件
rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm
yum -y install mesos marathon
yum -y install mesosphere-zookeeper

2. 配置zookeeper
touch /var/lib/zookeeper/myid
echo 1 > /var/lib/zookeeper/myid # 机器在zk中ID为1
vi /etc/zookeeper/conf/zoo.cfg
# 2888是主从监视等内部交换数据,3888为选举leader用的,clientPort表示客户端连接端口,一般为2181
server.1=192.168.1.110:2888:3888

3. 配置mesos主从部分
# 主mesos
echo 192.168.1.110 | sudo tee /etc/mesos-master/ip
cp /etc/mesos-master/ip /etc/mesos-master/hostname

# 从mesos必须配置,要不主读不到从的
echo 192.168.1.110 | sudo tee /etc/mesos-slave/ip
cp /etc/mesos-slave/ip /etc/mesos-slave/hostname

# 运行docker需要增加从mesos的配置
echo 'docker,mesos' > /etc/mesos-slave/containerizers
echo '5mins' > /etc/mesos-slave/executor_registration_timeout

# 4. 配置marathon(配置在mesos-master机器上)
# 建立marathon的配置文件,
mkdir -p /etc/marathon/conf/ && touch hostname
还需要参数 --event_subscriber http_callback

# 5. 按顺序进行启动相关服务
systemctl stop firewalld # 1.关闭防火墙
systemctl start zookeeper # 2. 启动zk
systemctl start mesos-master #3.启动主mesos
systemctl start mesos-slave #4.启动从mesos
systemctl start marathon #5.启动marathon

# 6. 检查进程及相关页面
# 进程检查# mesos主要关注以下配置ip、hostname、port、master、ZK配置
ps -ef|grep mesos-master
ps -ef|grep mesos-slave
# 检查marathon进程,关注zk配置
ps -ef|grep marathon

#控制台:
http://192.168.1.110:5050
http://192.168.1.110:8080

#7. 简单命令测试
#新建应用 :command中输入
python -m SimpleHTTPServer $PORT
# 可以发现为running 状态,同时可以找到相关的URL进行访问, 可以测试增加实例个数


########## 2. docker应用的发布 ##################
# 通面页面部署Docker应用 192.168.1.110:8080
# 参数, 启动成功
"type": "DOCKER",
"docker": {
"image": "app/testwar",
"network": "BRIDGE",
"portMappings": [
{ "containerPort": 8080, "hostPort": 0, "protocol": "tcp" }
]
}


######### 3. 负载均衡及服务发现的配置 ##################
## 方式一:直接使用bamboo进行均衡,会自动维护
# bamboo自带haproxy并自助管理,使用docker容器运行,将容器内的80绑定在外部的80
docker run -d \
-p 8000:8000 \
-p 80:80 \
--name=bamboo \
-e MARATHON_ENDPOINT=http://192.168.1.110:8080 \
-e BAMBOO_ENDPOINT=http://192.168.1.110:8000 \
-e BAMBOO_ZK_HOST=192.168.1.110:2181 \
-e BAMBOO_ZK_PATH=/bamboo \
-e BIND=":8000" \
-e CONFIG_PATH="config/production.example.json" \
-e BAMBOO_DOCKER_AUTO_HOST=true \
gregory90/bamboo

# 在http://192.168.1.110中配置相关转发规则:path_beg -i /docker-web
# 通过负载均衡地址: http://192.168.1.110/docker-web访问应用

## 方式二:
# 考虑使用Haproxy+etcd+confd作为Docker的接入层


## 方式三
# 安装haproxy
yum -y imstall haproxy
配置文件: /etc/haproxy/haproxy.cfg

## 原来使用 haproxy-marathon-bridge
# 现在使用相关脚本在以下工程,待研究
https://github.com/mesosphere/marathon-lb

 

######### 4. Docker网络 ###########
先安装etcd(key/value存储,可替代zk,暂无大用,现在mesos用zk做存储)
再安装Flannel (用于跨主机容器间调用)
再安装mesos-dns(用于跨主机容器调用,也可用于负载均衡)


######### 5. 服务发现 ###############
# 使用 registrator + consul 进行服务发现
下载 consul关解压,移动到/usr/bin目录下
运行
consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node h-node -dc mydc -bind:192.168.1.110
使用 consul members 查看成员
使用相关API进行测试
1. 存入服务
curl -X PUT -d '{"Datacenter": "sz-1", "Node": "mysql-2", "Address":"mysql-2.node.consul","Semysql", "tags": ["slave","v1"], "Port": 3306}}' http://127.0.0.1:8500/v1/catalog/register
2. 查找服务
curl http://127.0.0.1:8500/v1/catalog/service/mysql

直接使用docker方式运行
docker pull index.alauda.cn/sequenceiq/consul:v0.5.0-v6
docker tag index.alauda.cn/sequenceiq/consul:v0.5.0-v6 consul:0.5

docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 consul:0.5 -server -bootstrap -ui-dir /ui
# 前台访问: http://192.168.1.110:8500/

# 下载 registrator
docker pull index.alauda.cn/caishuo/registrator

docker run -it -d \
-v /var/run/docker.sock:/tmp/docker.sock \
-h 192.168.1.110 index.alauda.cn/caishuo/registrator \
consul://192.168.1.110:8500

#可以通过API调用服务发现:
curl http://127.0.0.1:8500/v1/catalog/service/simple

# 同时在marathon中发布的docker服务能被直接发现,发布镜像名为app/testwar需要使用映射8080端口
http://127.0.0.1:8500/v1/catalog/service/testwar-8080 即可查到相关的服务列表


# 通过consul-templete可以触发更新 haproxy或nginx配置文件并执行脚本,待研
# 跨主机容器间访问问题:使用flannel定义全局IP 待研
# 使用messos的dns查询服务调用 待研,
(这边也是服务发现的一部分,可以用consule代替,
 但registrator+consulconsule只能发现marathon中部署的docker服务,也算满足要求
 外部服务发现:外部服务直接调用consule接口注册入)

####### mesos-dns相关 ##############
# 直接运行
docker run -d --net=“host” \
-e ENVIRONMENT=production \
-e PARENT_HOST=$(hostname) \
-e MESOSDNS_ZK="zk://192.168.1.110:2181/mesos" \
-e MESOSDNS_MASTERS_1="192.168.1.110:5050" \
-e MESOSDNS_RESOLVERS_1="8.8.8.8" \
-e MESOSDNS_RESOLVERS_2="114.114.114.114" \
-e MESOSDNS_DOMAIN="mesos" \
-e MESOSDNS_REFRESHSECONDS=60 \
-e MESOSDNS_TTL=60 \
-e MESOSDNS_TIMEOUT=5 \
-e MESOSDNS_PORT=53 \
-e MESOSDNS_HTTPPORT=8123 \
mesosphere/mesos-dns


#### 还有个大问题就是存储问题#############

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!