Docker Hadoop 自动化构建分析
docker hadoop 自动化
使用软件
serf dnsmasq
说明
serf (注册中心)
所有 slave join master 机器,处理 serf members 返回值到 /etc/dnsmasq.d/0hosts
文件
1 2 3 4 5 6 7 8 9 10 11
| root@master:~# serf members slave1.kiwenlau.com 172.17.0.3:7946 alive slave6.kiwenlau.com 172.17.0.8:7946 alive slave4.kiwenlau.com 172.17.0.6:7946 alive slave9.kiwenlau.com 172.17.0.11:7946 alive slave5.kiwenlau.com 172.17.0.7:7946 alive slave8.kiwenlau.com 172.17.0.10:7946 alive master.kiwenlau.com 172.17.0.2:7946 alive slave2.kiwenlau.com 172.17.0.4:7946 alive slave3.kiwenlau.com 172.17.0.5:7946 alive slave7.kiwenlau.com 172.17.0.9:7946 alive
|
dnsmasq (dns 服务器)
- 配置/etc/resolv.conf 指向 dns 服务器 127.0.0.1
- 利用 serf 解析 members 数据添加 address 解析 hostname 和 ip 到 /etc/dnsmasq.d/0hosts 文件
- 使用 service dnsmqsq restart 重启 dnsmasq 使其生效
kiwenlau/hadoop-master 各命令位置及启动顺序
使用 docker -w 控制工作目录在/root –dns 127.0.0.1 修改/etc/resolv.conf 文件 nameserver 127.0.0.1
/root/start-ssh-serf.sh 启动 ssh 服务(所有镜像使用同一个 rsa key 实现免密码登录)
启动 start-serf-agent.sh 并输出日志到 serf_log
1
| /etc/serf/start-serf-agent.sh > serf_log &
|
启动 dnsmqsq 服务
输出$JOIN_IP(docker 启动使用 -e JOIN_IP= 设置环境变量)到 join.json
启动 serf
(master 机器无 JOIN_IP 变量,各 slave 机器有 JOIN_IP 变量)
Docker Hadoop 启动脚本备份
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| {% raw %}
#!/bin/bash
N=$1
if [ $# = 0 ] then N=3 fi
sudo docker rm -f master &> /dev/null echo "start master container..." sudo docker run --net=none -p 50070:50070 -p 50010:50010 -p 9000:9000 -d -t --dns 127.0.0.1 -P --name master -h master.kiwenlau.com -w /root kiwenlau/hadoop-master:0.1.0 /bin/bash &> /dev/null MASTER_ID=$(docker inspect -f {{.Id}} master) MASTER_IP=192.168.88.180 pipework br0 $MASTER_ID $MASTER_IP/24 sudo docker exec master /root/start-ssh-serf.sh
i=1 while [ $i -lt $N ] do sudo docker rm -f slave$i &> /dev/null echo "start slave$i container..." sudo docker run --net=none -d -t --dns 127.0.0.1 -P --name slave$i -h slave$i.kiwenlau.com -e JOIN_IP=$MASTER_IP kiwenlau/hadoop-slave:0.1.0 /bin/bash &> /dev/null TEMP_NAME=slave$i echo $TEMP_NAME SLAVE_TMP_ID=$(docker inspect -f {{.Id}} $TEMP_NAME) TEMP_IP=192.168.88.18$i echo $TEMP_IP pipework br0 $SLAVE_TMP_ID $TEMP_IP/24 sudo docker exec $TEMP_NAME /root/start-ssh-serf.sh ((i++)) done
sudo docker exec -it master bash
{% endraw %}
|