蚂蚁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 p_w_picpaths
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 p_w_picpaths
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先到这。啃下一个。

转载于:https://blog.51cto.com/xiaotaoge/1739399

蚂蚁啃大象之zookeeper学习过程相关推荐

  1. 蚂蚁啃大象·论开源精神·ShowMe项目策划

    蚂蚁啃大象·论开源精神·ShowMe项目策划 --袁德俊 (最后更新日期:2004/7/17) 一.蚂蚁啃大象是开源精神吗? "开源"一个被重复了太多遍的词,同样,它也是饱含有太多 ...

  2. csdn 用户 蚂蚁翘大象_用户界面设计师房间里的大象

    csdn 用户 蚂蚁翘大象 Once upon a time, an educated eye detected a new trend in UI designs, particularly, in ...

  3. 蚂蚁与大象共舞?DeFi 如何选择更完美的链上治理

    ​ *图片源自网络 从历史视角看人类组织,区块链最大的贡献是什么? 区块链网络作为全新的组织模式正在释放着人类全新的潜能,这类去中心化组织方式更像是一场持续的社会实验.茹毛饮血时,人类选择较小族群为的 ...

  4. ARM能否上演“蚂蚁撼大象”?

    最近,总部位于英国剑桥的ARM的首席执行官沃伦·易斯特(Warren East)在英国<每日电讯报>上表示,ARM在移动设备市场上的统治地位必然会使英特尔公司采取利基战略(利基战略是指企业 ...

  5. arduino nano 的引脚输出脉冲,到底有多快?蚂蚁指挥大象,脉冲控制伺服电机走位的测试。

    arduino nano 的引脚输出脉冲,到底有多快? 在loop里只写 digitalWrite(LED_BUILTIN, HIGH);   digitalWrite(LED_BUILTIN, LO ...

  6. 基础JSP:蚂蚁大战大象

    树状展现(递归调用),代码如下: <%--Created by IntelliJ IDEA.User: AdministratorDate: 2021-01-20Time: 18:39To ch ...

  7. 10蚂蚁-分布式解决方案——3.ZooKeeper实现选举策略与哨兵机制

    Zookeeper实现哨兵机制 master选举使用场景及结构 现在很多时候我们的服务需要7*24小时工作,假如一台机器挂了,我们希望能有其它机器顶替它继续工作.此类问题现在多采用master-sal ...

  8. mysql 散列存储_什么是数据库散列存储? - 蚂蚁吞大象的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

    什么是数据库散列存储? 上一篇 / 下一篇  2012-11-30 17:25:03 / 个人分类:数据库 (转载自百度空间http://hi.baidu.com/pplboy/item/2d7a26 ...

  9. 蚂蚁变大象:浅谈常规网站是如何从小变大的(转)

    2005年,我开始和朋友们开始拉活儿做网站,当时第一个网站是在linux上用jsp搭建的,到后来逐步的引入了多种框架,如webwork.hibernate等.在到后来,进入公司,开始用c/c++,做分 ...

最新文章

  1. [SDOI2017]新生舞会
  2. 1使用帝国cms开发微信小程序之开发前的约定
  3. lightgbm简易评分卡制作
  4. iOS - Rac(ReactiveCocoa)
  5. 【note】fill函数和memset函数的区别和使用
  6. SAP云平台里两种类型的WebIDE
  7. 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案
  8. ue4中在物体上加ui_UE4 物体位置同步相关源码分析浅谈
  9. 查看so库中是否有某个定义_论Linux ELF中动态库符号重定义利用 属性/Linker 做隐藏的手法...
  10. Rust: CTP的rust版本如何手工封装
  11. 解决Office 2007 “向程序发送命令时出现问题”
  12. jmeter 参数为邮箱@出现%40解决办法
  13. 信息安全 SEED Lab2 Shellshock Attack
  14. Appium H5自动化测试
  15. 六级词汇天天练(12.11)
  16. 使用nose进行python自动化测试
  17. CS 188 (4) Uniform Cost Search( 统一代价搜索算法)
  18. 三色灯的点亮逻辑 | 可自定义
  19. 企业数字化建设的三个典型误区
  20. 手机管理应用研究【3】—— 垃圾清理篇

热门文章

  1. 特32 中国制造第一艘万吨远洋货轮
  2. 【oracle】创建用户(指定表空间)、删除用户
  3. 一个让人灵光一闪的数组C++类Array设计,可以此作为范本进行其他的C++类编写
  4. detached HEAD意义详解
  5. Java学习基础:搞懂IO
  6. ofstream之ios::ate,ios::app,ios::in,ios::out
  7. k8s集群flannel问题之telnet node节点开放端口Connect timeout情况
  8. React Native Elements
  9. codeforces 776 D The Door Problem
  10. 为什么很多人吐槽华为加班严重?别的公司却没有