蚂蚁啃大象之zookeeper学习过程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蚂蚁啃大象之zookeeper学习过程相关的知识,希望对你有一定的参考价值。
蚂蚁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 <[email protected]> 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下来后自己保存着)
[[email protected] opt]# docker load < centos.tar.gz
下载上面文章的zookeeper镜像
docker pull garland/zookeeper
查看镜像:
[[email protected] 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
查看运行的容器
[[email protected] ~]# 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后,容器继续运行的脚本(本脚本来自老男孩教育-讲师找班长)
[[email protected] ~]# vim enter_doker.sh #!/bin/bash PID=`docker inspect --format "{{.State.Pid}}" $1` nsenter -t $PID -u -i -n -p
进入容器:
[[email protected] ~]# ./enter_doker.sh f09f7d3f100b [[email protected] ~]#
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。
完整的配置文件:
[[email protected] conf]# cd /opt/zookeeper/conf/ [[email protected] 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
运行服务:
[[email protected] ~]# /opt/zookeeper/bin/zkServer.sh start JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
查看状态:
[[email protected] ~]# /opt/zookeeper/bin/zkServer.sh status JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Mode: follower
[[email protected] ~]# /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 [email protected] 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 .
查看镜像:
[[email protected] 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
以上是关于蚂蚁啃大象之zookeeper学习过程的主要内容,如果未能解决你的问题,请参考以下文章