蚂蚁啃大象之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 <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学习过程相关推荐
- 蚂蚁啃大象·论开源精神·ShowMe项目策划
蚂蚁啃大象·论开源精神·ShowMe项目策划 --袁德俊 (最后更新日期:2004/7/17) 一.蚂蚁啃大象是开源精神吗? "开源"一个被重复了太多遍的词,同样,它也是饱含有太多 ...
- csdn 用户 蚂蚁翘大象_用户界面设计师房间里的大象
csdn 用户 蚂蚁翘大象 Once upon a time, an educated eye detected a new trend in UI designs, particularly, in ...
- 蚂蚁与大象共舞?DeFi 如何选择更完美的链上治理
*图片源自网络 从历史视角看人类组织,区块链最大的贡献是什么? 区块链网络作为全新的组织模式正在释放着人类全新的潜能,这类去中心化组织方式更像是一场持续的社会实验.茹毛饮血时,人类选择较小族群为的 ...
- ARM能否上演“蚂蚁撼大象”?
最近,总部位于英国剑桥的ARM的首席执行官沃伦·易斯特(Warren East)在英国<每日电讯报>上表示,ARM在移动设备市场上的统治地位必然会使英特尔公司采取利基战略(利基战略是指企业 ...
- arduino nano 的引脚输出脉冲,到底有多快?蚂蚁指挥大象,脉冲控制伺服电机走位的测试。
arduino nano 的引脚输出脉冲,到底有多快? 在loop里只写 digitalWrite(LED_BUILTIN, HIGH); digitalWrite(LED_BUILTIN, LO ...
- 基础JSP:蚂蚁大战大象
树状展现(递归调用),代码如下: <%--Created by IntelliJ IDEA.User: AdministratorDate: 2021-01-20Time: 18:39To ch ...
- 10蚂蚁-分布式解决方案——3.ZooKeeper实现选举策略与哨兵机制
Zookeeper实现哨兵机制 master选举使用场景及结构 现在很多时候我们的服务需要7*24小时工作,假如一台机器挂了,我们希望能有其它机器顶替它继续工作.此类问题现在多采用master-sal ...
- mysql 散列存储_什么是数据库散列存储? - 蚂蚁吞大象的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
什么是数据库散列存储? 上一篇 / 下一篇 2012-11-30 17:25:03 / 个人分类:数据库 (转载自百度空间http://hi.baidu.com/pplboy/item/2d7a26 ...
- 蚂蚁变大象:浅谈常规网站是如何从小变大的(转)
2005年,我开始和朋友们开始拉活儿做网站,当时第一个网站是在linux上用jsp搭建的,到后来逐步的引入了多种框架,如webwork.hibernate等.在到后来,进入公司,开始用c/c++,做分 ...
最新文章
- [SDOI2017]新生舞会
- 1使用帝国cms开发微信小程序之开发前的约定
- lightgbm简易评分卡制作
- iOS - Rac(ReactiveCocoa)
- 【note】fill函数和memset函数的区别和使用
- SAP云平台里两种类型的WebIDE
- 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案
- ue4中在物体上加ui_UE4 物体位置同步相关源码分析浅谈
- 查看so库中是否有某个定义_论Linux ELF中动态库符号重定义利用 属性/Linker 做隐藏的手法...
- Rust: CTP的rust版本如何手工封装
- 解决Office 2007 “向程序发送命令时出现问题”
- jmeter 参数为邮箱@出现%40解决办法
- 信息安全 SEED Lab2 Shellshock Attack
- Appium H5自动化测试
- 六级词汇天天练(12.11)
- 使用nose进行python自动化测试
- CS 188 (4) Uniform Cost Search( 统一代价搜索算法)
- 三色灯的点亮逻辑 | 可自定义
- 企业数字化建设的三个典型误区
- 手机管理应用研究【3】—— 垃圾清理篇
热门文章
- 特32 中国制造第一艘万吨远洋货轮
- 【oracle】创建用户(指定表空间)、删除用户
- 一个让人灵光一闪的数组C++类Array设计,可以此作为范本进行其他的C++类编写
- detached HEAD意义详解
- Java学习基础:搞懂IO
- ofstream之ios::ate,ios::app,ios::in,ios::out
- k8s集群flannel问题之telnet node节点开放端口Connect timeout情况
- React Native Elements
- codeforces 776 D The Door Problem
- 为什么很多人吐槽华为加班严重?别的公司却没有