您的位置:首页 > 其它

蚂蚁啃大象之zookeeper学习过程

2016-01-27 23:22 183 查看
蚂蚁01啃大象:

# 本文作者-刘晓涛
# 创建时间:2016-1-26:22:30
# 完成时间:2016-1-27-23:11
# 我不比别人聪明,学习东西也慢,记忆力也好像降低了(奔三了),但我不能放弃学习止步不前!
# 写此文章,一 督促自己还有任务没有完成 二:记录学习过程,方便后期查找,加深记忆 三 共同交流探讨

要啃的大象:
(文章:“使用 Docker,7 个命令部署一个 Mesos 集群”。文章来源于Linux公社网站(www.linuxidc.com) 链接为:http://www.linuxidc.com/Linux/2015-06/118589.htm )

蚂蚁01:下文-all

本编文章的目的:
1 通过zookeeper的Dockerfile复习复习docker
2 通过zookeeper的Dockerfile学习zookeeper

该zookeeper镜像信息的地址为: https://registry.hub.docker.com/u/garland/zookeeper/ https://github.com/sekka1/mesosphere-docker/tree/master/zookeeper
Dockerfile
======================================
# DOCKER-VERSION 1.0.1
# VERSION        0.5
# SOURCE         https://github.com/jplock/docker-zookeeper FROM debian:jessie
MAINTAINER Justin Plock <justin@plock.net>
RUN apt-get update && apt-get install -y openjdk-7-jre-headless wget
RUN wget -q -O - http://apache.mirrors.pair.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz | tar -xzf - -C /opt \
&& mv /opt/zookeeper-3.4.6 /opt/zookeeper \
&& cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg \
&& mkdir -p /tmp/zookeeper
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
ADD ./run.sh /opt/run.sh
RUN chmod 777 /opt/run.sh
EXPOSE 2181 2888 3888
WORKDIR /opt/zookeeper
VOLUME ["/opt/zookeeper/conf", "/tmp/zookeeper"]
CMD ["/opt/run.sh"]
=======================================
看到此Dockerfile第一眼:我擦,大便系统,没玩过啊,第二眼:没关系,类unix系统,原理通用。

大体一看:
两个RUN命令,得知zookeeper的安装环境需要java和如何安装zookeeper
EXPOSE命令,对外提供三个端口(之前看了一下zookeeper,大概知道zookeeper要三个端口)
ADD命令:擦,加了运行脚本进去,啥脚本啊这是,待我搭好docker环境进入容器拷贝出来之后研究
VOLUME:该命令我只记得是挂载,忘了是挂载 A-B了还是两个都对外挂载,等会创建容器后看看

通过上面的大体一看,可以知道zookeeper如何大概安装运行,配置文件路径,对外提供那个端口服务(软件的原理都差不多:安装运行、配置文件、端口)

开始啃大象:
指定目标:
1 构建一个Centos7的zookeeper镜像(基本照抄吧)
2 制作基于Centos7系统(非镜像)zookeeper的安装部署文档
3 尽可能的深入了解zookeeper的原理(zookeeper是什么?可以用来干什么?怎么干的?)
如何去做:
1 先准备个干净的Centos7环境把zookeeper安装运行一下
2 在Centos7安装运行没问题了,可以考虑构建Dockerfile了
3 参考百度 谷歌 官方文档 理解zookeeper原理。(之前2步要是遇到问题,我也得去搜去问去解决,我又不是大神)
(刚刚又突然冒出个想法:使用saltstack来安装zookeeper,自己给自己吓一跳,先算了吧,以后再说)

目标1-1 下载镜像,并运行(安装docker 略)
systemctl start docker
导入centos镜像(提前下载好了,不然网络下载太慢,建议翻墙或是用国外主机pull下来后自己保存着)
[root@linux-node1 opt]# docker load < centos.tar.gz

下载上面文章的zookeeper镜像
docker pull garland/zookeeper


查看镜像:
[root@linux-node1 local]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
docker.io/centos              latest              60e65a8e4030        4 weeks ago         196.6 MB
docker.io/garland/zookeeper   latest              0e07387e8ab2        12 months ago       378.5 MB
下载完成后,使用该镜像运行容器
docker run -d \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
garland/zookeeper


查看运行的容器
[root@linux-node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                                                    NAMES
f09f7d3f100b        garland/zookeeper   "/opt/run.sh"       22 minutes ago      Up 22 minutes       0.0.0.0:2181->2181/tcp, 0.0.0.0:2888->2888/tcp, 0.0.0.0:3888->3888/tcp   lonely_tesla
进入容器,exit后,容器继续运行的脚本(本脚本来自老男孩教育-讲师找班长)
[root@linux-node1 ~]# vim enter_doker.sh
#!/bin/bash
PID=`docker inspect --format "{{.State.Pid}}" $1`
nsenter -t $PID -u -i -n -p
进入容器:
[root@linux-node1 ~]# ./enter_doker.sh f09f7d3f100b
[root@f09f7d3f100b ~]#
run.sh的内容:
=============================================================
#!/bin/sh
ZOO_CFG="/opt/zookeeper/conf/zoo.cfg"
# Output server ID
echo "server id (myid): ${SERVER_ID}"
echo "${SERVER_ID}" > /tmp/zookeeper/myid
# Add additional ZooKeeper servers into the zoo.cfg file
echo "${ADDITIONAL_ZOOKEEPER_1}" >> ${ZOO_CFG}
echo "${ADDITIONAL_ZOOKEEPER_2}" >> ${ZOO_CFG}
echo "${ADDITIONAL_ZOOKEEPER_3}" >> ${ZOO_CFG}
echo "${ADDITIONAL_ZOOKEEPER_4}" >> ${ZOO_CFG}
echo "${ADDITIONAL_ZOOKEEPER_5}" >> ${ZOO_CFG}
echo "${ADDITIONAL_ZOOKEEPER_6}" >> ${ZOO_CFG}
echo "${ADDITIONAL_ZOOKEEPER_7}" >> ${ZOO_CFG}
echo "${ADDITIONAL_ZOOKEEPER_8}" >> ${ZOO_CFG}
echo "${ADDITIONAL_ZOOKEEPER_9}" >> ${ZOO_CFG}
echo "${ADDITIONAL_ZOOKEEPER_10}" >> ${ZOO_CFG}
# Start Zookeeper
/opt/zookeeper/bin/zkServer.sh start-foreground
============================================================
看到此 有点懵,echo一大堆东西,不知道什么意思啊。
唯一看明白的是要想做zookeeper镜像,那么要让zookeeper运行在前台,参数就是start-foreground

先自己在centos7上搭建吧
cd /opt
wget http://apache.mirrors.pair.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz tar -xzf zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 zookeeper
cp zookeeper/conf/zoo_sample.cfg zookeeper/conf/zoo.cfg
mkdir -p /tmp/zookeeper


配置文件详解:
zookeeper/conf/zoo_sample.cfg
tickTime=2000
# zookeeper服务端之间或是服务端与客户端(follower)之间维持心跳的时间间隔(毫秒)
initLimit=10
# 这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,
而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。
当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,
那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
syncLimit=5
# 这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度最长不能超过多少个 tickTime 的时间长度,
总的时间长度就是 2*2000=4 秒
dataDir=/tmp/zookeeper
# Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里
clientPort=2181
#这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
# the maximum number of client connections. increase this if you need to handle more clients
#maxClientCnxns=60
# 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.56.21:2888:3888
server.2=192.168.56.22:2888:3888
# server.A=B:C:D
其中
A 是一个数字,表示这个是第几号服务器;
B 是这个服务器的 ip 地址;
C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;
D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。


如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。

完整的配置文件:
[root@linux-node1 conf]# cd /opt/zookeeper/conf/
[root@linux-node1 conf]# vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/data
clientPort=2181
server.1=192.168.56.21:2888:3888
server.2=192.168.56.22:2888:3888


运行服务:
[root@linux-node1 ~]# /opt/zookeeper/bin/zkServer.sh start
JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
查看状态:
[root@linux-node1 ~]# /opt/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower
[root@linux-node2 ~]# /usr/local/zookeeper-3.4.6/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: leader


zookeeper搭建完成,配置文件详解完成,原理可以看http://blog.csdn.net/qinglu000/article/details/23844359,很详细

基于centos的zookeeper镜像的Dockerfile构建:
# auther: liuxiaotao
# date: 2016-1-27
# version: 1.0
FROM centos
MAINTAINER liuxiaotao taoge_admin@163.com
RUN yum update -y \
&& yum install -y java-1.7.0-openjdk java-1.7.0-openjdk-devel java-1.7.0-openjdk-headless
ADD zookeeper-3.4.6.tar.gz /usr/local/src/
# docker can zuto untar zhe *.tar.gz files
RUN mv /usr/local/src/zookeeper-3.4.6 /usr/local/zookeeper
ADD zoo.cfg /usr/local/zookeeper/conf/
EXPOSE 2181 2888 3888
VOLUME ["/usr/local/zookeeper/conf", "/usr/local/zookeeper/data"]
CMD ["/usr/local/zookeeper/bin/zkServer.sh start-foreground"]
构建
docker build -t lezyo/zookepeer:v2 .


查看镜像:
[root@linux-node1 docker]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
lezyo/zookepeer               v2                  cb3c2eb639ec        10 minutes ago      561.8 MB
lezyo/zookeeper               v1                  b83857ea996f        41 minutes ago      561.8 MB
<none>                        <none>              2d8697315524        44 minutes ago      523 MB
<none>                        <none>              898c41613f2f        45 minutes ago      523 MB
<none>                        <none>              e6ef1aaeb302        48 minutes ago      523 MB
docker.io/centos              latest              60e65a8e4030        4 weeks ago         196.6 MB
docker.io/garland/zookeeper   latest              0e07387e8ab2        12 months ago       378.5 MB
运行:
docker run -d -P lezyo/zookepeer:v2 /usr/local/zookeeper/bin/zkServer.sh start-foreground


运行成功,但是简陋了点,好了zookeeper先到这。啃下一个。
本文出自 “linux飞龙在天” 博客,请务必保留此出处http://xiaotaoge.blog.51cto.com/1462401/1739399
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: