总体架构
231是我们的marathon master,采用dcos1.7,因为只需要一个agent就好了,不像1.8,还得需要public。
229是我们的唯一一台agent,奔腾双核3GHz,16GB内存。
目标
将zk防止在marathon里面
问题1 几个application的问题
如果是docker + swarm的形式,我们需要开三个,然后采用name去连接就好了。
但是这里是marathon,里面最牛逼的功能就是scale,我们的zk咋扩容来? 每一个都有每一个的目录。我们在本地挂载一个磁盘/dcos/volume1,为啥是这个来,因为貌似这个目录会自动被docs识别。然后我们新建zk zk1 zk2 zk3四个目录,后三个每个zk节点一个。
zk目录是作为共享/etc/hosts的。
问题2 /etc/hosts为啥要共享来
本来我也没用,我用的方法是采用vip的方式,zk1有一个vip地址,zk2有一个,zk3有一个,这样其实是不行的,想想也是,
在这个地方折腾了一天时间,把zk版本都换了。 后来就采用了/etc/hosts挂载到每个机器的做法,这样大家在开机的时候可以把自己的地址放进去,注意,这个只是addon追加,不能sed删除,会提示sed资源紧张,估计和一个目录挂载到三个docker容器有关系,好吧,暂时先跑着。
问题3 外部如何给别人调用来
呵呵,我们挂掉一个试试,没啥问题。
呵呵,我们再挂掉一个试试,不行喽。
zk的marathon application json文件是啥来
{
"id": "/zk1",
"cmd": null,
"cpus": 0.1,
"mem": 128,
"disk": 0,
"instances": 1,
"container": {
"type": "DOCKER",
"volumes": [
{
"containerPath": "/tmp/zookeeper",
"hostPath": "/dcos/volume1/zk1/",
"mode": "RW"
},
{
"containerPath": "/etc/hosts",
"hostPath": "/dcos/volume1/zk/hosts",
"mode": "RW"
}
],
"docker": {
"image": "reg.ops.ac.cn:5000/zookeeper:v3.4.7e1",
"network": "BRIDGE",
"portMappings": [
{
"containerPort": 2181,
"hostPort": 0,
"servicePort": 0, # 注意,这个地方打入的时候应该是0,因为marathon会随机生成。
"protocol": "tcp",
"name": "2181",
"labels": {
"VIP_0": "10.9.9.1:2181"
}
}
],
"privileged": false,
"parameters": [],
"forcePullImage": true
}
},
"env": {
"ZOO_LOG_DIR": "/tmp/zookeeper/logs/"
},
"uris": [
"http://soft.ops.ac.cn/registry/docker.tar.gz"
]
}
zk的配置文件咋样
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
Dockerfile如何来
from reg.ops.ac.cn:5000/centos:v6.8e1
#add ./zoo.cfg /opt/zookeeper/conf/zoo.cfg
add ./zookeeper /usr/local/zookeeper/
add ./hostsmodify.sh /tmp/hostsmodify.sh
run yum install -y wget curl net-tools bind-utils iproute telnet
#entrypoint /opt/zookeeper/bin/zkServer.sh start-foreground
entrypoint /tmp/hostsmodify.sh;/usr/local/zookeeper/bin/zkServer.sh start-foreground
#entrypoint /bin/bas
自动化生成docker并上传到registry的脚本来
#!/bin/bash
name="zookeeper"
tag="v3.4.7e1"
repoaddr="reg.ops.ac.cn:5000"
docker build -t $name:$tag .
imageid=`docker images | grep $tag | head -n 1 | awk '{print $3}'`
#docker tag -f $imageid $repoaddr/$name:$tag
docker tag $imageid $repoaddr/$name:$tag
docker push $repoaddr/$name:$tag
自动修改hosts成自己的ip地址来
#!/bin/bash
IP=`ifconfig eth0 | grep inet | awk '{print $2}' | head -n 1 | awk -F\: '{print $2}'`
ID=`cat /tmp/zookeeper/myid`
sed -i "/ zk$ID/d" /etc/hosts
echo "$IP zk$ID" >> /etc/hosts