物联网架构成长之路(27)-Docker练习之Zookeeper安装

0. 前言

  准备了解一下消息队列MQ,对比了一些开源的中间件,最后选择Kafka作为以后用到的消息队列,消息队列的应用场景及Kafka与其他消息队列的优缺点这里就不细说了,具体的可以参考其他博客说明。不过Kafka依赖Zookeeper,因此先练习一些用Docker构建Zookeeper。

1. 安装ZooKeeper

  使用Kafka前,要安装ZooKeeper。这里利用最近刚学的Docker,我构建成一个ZooKeeper Image,供以后使用。

 1 FROM openjdk:8-jdk-alpine
 2
 3 RUN apk add --no-cache bash && rm -rf /var/cache/apk/* && /bin/bash
 4 RUN wget http://mirrors.aliyun.com/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz &&  5     tar -zxvf zookeeper-3.4.13.tar.gz &&  6     rm -rf zookeeper-3.4.13.tar.gz &&  7     mv zookeeper-3.4.13 zookeeper &&  8     cd /zookeeper && rm -rf contrib dist-maven docs recipes src *.txt *.md *.xml &&  9     cp /zookeeper/conf/zoo_sample.cfg /zookeeper/conf/zoo.cfg && 10     sed -i "s#dataDir=/tmp/zookeeper#dataDir=/data#g" /zookeeper/conf/zoo.cfg
11 ENV PATH /zookeeper/bin:$PATH
12
13 EXPOSE 2181
14
15 CMD ["zkServer.sh", "start-foreground"]

  构建、运行

1 docker build -t zookeeper:3.4.13 .
2 docker run -d -p 2181:2181 zookeeper:3.4.13

  挂载 -v /my_data:/data

2. Zookeeper Cluster模式

  具体的Cluster模式,可以参考我之前的博客 https://www.cnblogs.com/wunaozai/p/8249657.html
  现在是测试3个node的Zookeeper节点
  zoo.cfg

1 tickTime=2000
2 initLimit=10
3 syncLimit=5
4 dataDir=/data
5 clientPort=2181
6 server.1=zoo1:2888:3888
7 server.2=zoo2:2888:3888
8 server.3=zoo3:2888:3888

  docker-compose.yml

 1 version: ‘3‘
 2 services:
 3     zoo1:
 4         image: zookeeper:3.4.13
 5         volumes:
 6             - /root/workspace/docker/kafka/zookeeper/zoo.cfg:/zookeeper/conf/zoo.cfg
 7             - /root/workspace/docker/kafka/zookeeper/myid1:/data/myid
 8     zoo2:
 9         image: zookeeper:3.4.13
10         volumes:
11             - /root/workspace/docker/kafka/zookeeper/zoo.cfg:/zookeeper/conf/zoo.cfg
12             - /root/workspace/docker/kafka/zookeeper/myid2:/data/myid
13     zoo3:
14         image: zookeeper:3.4.13
15         volumes:
16             - /root/workspace/docker/kafka/zookeeper/zoo.cfg:/zookeeper/conf/zoo.cfg
17             - /root/workspace/docker/kafka/zookeeper/myid3:/data/myid

  准备运行3个节点的Zookeeper。要现在目录准备zoo.cfg文件,在该配置文件最后面,要配置server.id=server:port,然后还要为每个Zookeeper节点准备一个myid文件

1 echo "1" > myid1
2 echo "2" > myid2
3 echo "3" > myid3
4 docker-componse up 

  启动后,我们进入任意一台主机,然后create path data,这样这份数据都会同步到各个节点上。

3. zkui Zookeeper可视化Web客户端

  我使用这个Zookeeper可视化客户端,https://github.com/DeemOpen/zkui 在源代码之上,

mvn package -Dmaven.test.skip=true

  利用Dockerfile构建zkui Image
  Dockerfile

 1 FROM openjdk:8-jdk-alpine
 2
 3 MAINTAINER wunaozai <[email protected]>
 4
 5 WORKDIR /var/app
 6 ADD zkui-*.jar /var/app/zkui.jar
 7 ADD config.cfg /var/app/config.cfg
 8 ADD bootstrap.sh /var/app/bootstrap.sh
 9
10 EXPOSE 9090
11
12 ENTRYPOINT ["/var/app/bootstrap.sh"]

  bootstrap.sh

 1 #!/bin/sh
 2
 3 ZK_SERVER=${ZK_SERVER:-"localhost:2181"}
 4
 5 USER_SET=${USER_SET:-"{\"users\": [{ \"username\":\"admin\" , \"password\":\"manager\",\"role\": \"ADMIN\" \},{ \"username\":\"appconfig\" , \"password\":\"appconfig\",\"role\": \"USER\" \}]\}"}
 6 LOGIN_MESSAGE=${LOGIN_MESSAGE:-"Please login using admin/manager or appconfig/appconfig."}
 7
 8 sed -i "s/^zkServer=.*$/zkServer=$ZK_SERVER/" /var/app/config.cfg
 9
10 sed -i "s/^userSet = .*$/userSet = $USER_SET/" /var/app/config.cfg
11 sed -i "s/^loginMessage=.*$/loginMessage=$LOGIN_MESSAGE/" /var/app/config.cfg
12
13 echo "Starting zkui with server $ZK_SERVER"
14
15 exec java -jar /var/app/zkui.jar

  config.cfg

 1 #Server Port
 2 serverPort=9090
 3 #Comma seperated list of all the zookeeper servers
 4 zkServer=localhost:2181,localhost:2181
 5 #Http path of the repository. Ignore if you dont intent to upload files from repository.
 6 scmRepo=http://myserver.com/@rev1=
 7 #Path appended to the repo url. Ignore if you dont intent to upload files from repository.
 8 scmRepoPath=//appconfig.txt
 9 #if set to true then userSet is used for authentication, else ldap authentication is used.
10 ldapAuth=false
11 ldapDomain=mycompany,mydomain
12 #ldap authentication url. Ignore if using file based authentication.
13 ldapUrl=ldap://<ldap_host>:<ldap_port>/dc=mycom,dc=com
14 #Specific roles for ldap authenticated users. Ignore if using file based authentication.
15 ldapRoleSet={"users": [{ "username":"domain\\user1" , "role": "ADMIN" }]}
16 userSet = {"users": [{ "username":"admin" , "password":"manager","role": "ADMIN" },{ "username":"appconfig" , "password":"appconfig","role": "USER" }]}
17 #Set to prod in production and dev in local. Setting to dev will clear history each time.
18 env=prod
19 jdbcClass=org.h2.Driver
20 jdbcUrl=jdbc:h2:zkui
21 jdbcUser=root
22 jdbcPwd=manager
23 #If you want to use mysql db to store history then comment the h2 db section.
24 #jdbcClass=com.mysql.jdbc.Driver
25 #jdbcUrl=jdbc:mysql://localhost:3306/zkui
26 #jdbcUser=root
27 #jdbcPwd=manager
28 loginMessage=Please login using admin/manager or appconfig/appconfig.
29 #session timeout 5 mins/300 secs.
30 sessionTimeout=300
31 #Default 5 seconds to keep short lived zk sessions. If you have large data then the read will take more than 30 seconds so increase this accordingly.
32 #A bigger zkSessionTimeout means the connection will be held longer and resource consumption will be high.
33 zkSessionTimeout=5
34 #Block PWD exposure over rest call.
35 blockPwdOverRest=false
36 #ignore rest of the props below if https=false.
37 https=false
38 keystoreFile=/home/user/keystore.jks
39 keystorePwd=password
40 keystoreManagerPwd=password
41 # The default ACL to use for all creation of nodes. If left blank, then all nodes will be universally accessible
42 # Permissions are based on single character flags: c (Create), r (read), w (write), d (delete), a (admin), * (all)
43 # For example defaultAcl={"acls": [{"scheme":"ip", "id":"192.168.1.192", "perms":"*"}, {"scheme":"ip", id":"192.168.1.0/24", "perms":"r"}]
44 defaultAcl=
45 # Set X-Forwarded-For to true if zkui is behind a proxy
46 X-Forwarded-For=false

4. Zookeeper与zkui结合

  用Zookeeper自带的zkCli.sh -server 127.0.0.1 可以正常的对Zookeeper数据进行增删改查了。但是有时候测试的时候,还是要Web的客户端比较方便,前期调试开发都是比较友好的。

  docker-compose.yml

 1 version: ‘3‘
 2 services:
 3     zoo:
 4         image: registry.cn-shenzhen.aliyuncs.com/wunaozai/zookeeper
 5         ports:
 6             - 2181:2181
 7     zkui:
 8         image: registry.cn-shenzhen.aliyuncs.com/wunaozai/zkui
 9         environment:
10             - ZK_SERVER=zoo:2181
11         ports:
12             - 8080:9090

  docker-compose.yml

 1 version: ‘3‘
 2 services:
 3     zoo1:
 4         image: registry.cn-shenzhen.aliyuncs.com/wunaozai/zookeeper
 5         volumes:
 6             - /home/lmx/workspace/docker/zookeeper/zoo.cfg:/zookeeper/conf/zoo.cfg
 7             - /home/lmx/workspace/docker/zookeeper/myid1:/data/myid
 8     zoo2:
 9         image: registry.cn-shenzhen.aliyuncs.com/wunaozai/zookeeper
10         volumes:
11             - /home/lmx/workspace/docker/zookeeper/zoo.cfg:/zookeeper/conf/zoo.cfg
12             - /home/lmx/workspace/docker/zookeeper/myid2:/data/myid
13     zoo3:
14         image: registry.cn-shenzhen.aliyuncs.com/wunaozai/zookeeper
15         volumes:
16             - /home/lmx/workspace/docker/zookeeper/zoo.cfg:/zookeeper/conf/zoo.cfg
17             - /home/lmx/workspace/docker/zookeeper/myid3:/data/myid
18     zkui:
19         image: registry.cn-shenzhen.aliyuncs.com/wunaozai/zkui
20         environment:
21             - ZK_SERVER=zoo1:2181,zoo2:2181,zoo3:2181
22         ports:
23             - 8080:9090

参考资料:

  https://www.cnblogs.com/wunaozai/p/8249657.html
  http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_singleAndDevSetup
  https://hub.docker.com/r/library/openjdk/
  https://hub.docker.com/r/wurstmeister/zookeeper

本文地址: https://www.cnblogs.com/wunaozai/p/9978795.html

原文地址:https://www.cnblogs.com/wunaozai/p/9978795.html

时间: 2024-10-02 17:59:18

物联网架构成长之路(27)-Docker练习之Zookeeper安装的相关文章

物联网架构成长之路(24)-Docker练习之Compose容器编排

0.前言 一开始学的之后,是想一步到位直接上Kubernetes(K8s)的,后面没想到,好像有点复杂,有些概念不是很懂.因此学习东西还是要循序渐进,慢慢来.先了解单机编排技术Docker Compose,了解一些技术细节及原理后,在入手K8s.还是不能一口吃成胖子,要多吃几口才可以.而且目前公司都是一些小项目,能用得上DockerCompose已经很不错了,还想要上K8s,估计是不现实的. 1. 安装 可以通过运行下面命令进行安装, 1 curl -L https://github.com/d

物联网架构成长之路(56)-SpringCloudGateway+JWT实现网关鉴权

0. 前言 结合前面两篇博客,前面博客实现了Gateway网关的路由功能.此时,如果每个微服务都需要一套帐号认证体系就没有必要了.可以在网关处进行权限认证.然后转发请求到后端服务.这样后面的微服务就可以直接调用,而不需要每个都单独一套鉴权体系.参考了Oauth2和JWT,发现基于微服务,使用JWT会更方便一些,所以准备集成JWT作为微服务架构的认证方式. [https://www.cnblogs.com/wunaozai/p/12512753.html] 物联网架构成长之路(54)-基于Naco

物联网架构成长之路(0)-目录

一.基础 [http://www.cnblogs.com/wunaozai/p/8067621.html] 物联网架构成长之路(1)-前言 [http://www.cnblogs.com/wunaozai/p/8075640.html] 物联网架构成长之路(2)-脚手架工具准备 [http://www.cnblogs.com/wunaozai/p/8082332.html] 物联网架构成长之路(3)-EMQ消息服务器了解

物联网架构成长之路(33)-EMQ数据存储到influxDB

一.前言 时隔一年半,技术变化特别快,学习也要跟上才行.以前写过EMQ数据转存问题,当时用了比较笨的方法,通过写插件的方式,把MQTT里面的数据发送到数据库进行存储.当时也是为了学习erlang和emq.现在随着对物联网的深入,也结合实际需求,不停的学习.下面将介绍我实验测试可行的物联网数据分析解决方案.采用的还是开源方案.通过订阅MQTT的根Topic,把所有物联网数据转存到InfluxDB时序数据库,然后通过Grafana进行图表显示.这应该是目前比较流行的方案.二.安装InfluxDB I

物联网架构成长之路(35)-利用Netty解析物联网自定义协议

一.前言 前面博客大部分介绍了基于EMQ中间件,通信协议使用的是MQTT,而传输的数据为纯文本数据,采用JSON格式.这种方式,大部分一看就知道是熟悉Web开发.软件开发的人喜欢用的方式.由于我也是做web软件开发的,也是比较喜欢这种方式.阿里的物联网平台,也是推荐这种方式.但是,但是做惯硬件开发,嵌入式开发就比较喜欢用裸TCP-Socket连接.采用的是二进制协议.基于此大部分应用场合为了兼容旧设备,就需要单独开发一个TCP服务器的网关.这里使用以前学过的,也是比较流行的Netty框架. 话不

物联网架构成长之路(2)-脚手架工具准备

0. 说明 开始搞服务器了,总要准备几个专业一点的Linux工具,不然给人看起来不是很专业的样子.这一小节,只是简单的举例几个小工具,主要是保存一些配置文件,方便以后查看.后期心情好的话,就在以后遇到好的工具,在这里进行更新. 1. Oh-my-zsh 一般搞服务器都是在Linux上的,默认的shell不是很好用,自己一点一点的配置又有点麻烦,那就直接用这个现成的,安装后就可以使用了,这段时间用起来还算比较方便的. https://github.com/robbyrussell/oh-my-zs

物联网架构成长之路(11)-Redis缓存主从复制

1. 说明 在我的物联网平台框架框架中,会用到Redis这个中间件.作为EMQ权限认证的缓存.https://www.cnblogs.com/think-in-java/p/5123884.html 2. 编译&运行 1 wget http://download.redis.io/releases/redis-4.0.6.tar.gz 2 make && make test && make PREFIX=/home/user/workspace/redis inst

物联网架构成长之路(12)-物联网架构小结1

1. 说明 这一小节,也不具体讲些什么了.最近一个半月都在摸鱼,没什么事做,慢慢学习着SpringBoot和SpringCloud.下面两张图是进行的一次小结.以后随着深入,整个架构肯定是会变的.现在记录一下,每个项目成长都是有一个过程的. 原文地址:https://www.cnblogs.com/wunaozai/p/8312891.html

物联网架构成长之路(13)-SpringBoot入门

1. 前言 下载最新版的JavaEE eclipse-jee-oxygen-2-win32-x86_64.zip 安装STS插件 Window->Eclipse Marketplace -> popular 下那个 Spring Tools(aka Spring IDE and Spring Tool Suite) 然后通过STS工具创建一个新的Spring boot工程,这里就不细说了.网上资料很多,也比较简单就可以搭建起来.后面对SpringBoot也只是简单的提一下,还有说一下注意点.没