k8s实战案例之部署Zookeeper集群

打印 上一主题 下一主题

主题 528|帖子 528|积分 1584

1、Zookeeper简介

zookeeper是一个开源的分布式协调服务,由知名互联网公司Yahoo创建,它是Chubby的开源实现;换句话讲,zookeeper是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于它实现数据的发布/订阅、负载均衡、名称服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列;
2、PV/PVC及zookeeper


3、构建zookeeper镜像

3.1、下载java环境基础镜像,将对应镜像修改本地harbor地址上传至harbor


3.2 基于java环境基础镜像,构建zookeeper镜像
  1. root@k8s-master01:~/k8s-data/dockerfile/web/magedu/zookeeper# ll
  2. total 36900
  3. drwxr-xr-x  4 root root     4096 Jun  4 11:03 ./
  4. drwxr-xr-x 11 root root     4096 Aug  9  2022 ../
  5. -rw-r--r--  1 root root     1954 Jun  4 10:57 Dockerfile
  6. -rw-r--r--  1 root root    63587 Jun 22  2021 KEYS
  7. drwxr-xr-x  2 root root     4096 Jun  4 10:11 bin/
  8. -rwxr-xr-x  1 root root      251 Jun  4 10:58 build-command.sh*
  9. drwxr-xr-x  2 root root     4096 Jun  4 10:11 conf/
  10. -rwxr-xr-x  1 root root     1156 Jun  4 11:03 entrypoint.sh*
  11. -rw-r--r--  1 root root       91 Jun 22  2021 repositories
  12. -rw-r--r--  1 root root     2270 Jun 22  2021 zookeeper-3.12-Dockerfile.tar.gz
  13. -rw-r--r--  1 root root 37676320 Jun 22  2021 zookeeper-3.4.14.tar.gz
  14. -rw-r--r--  1 root root      836 Jun 22  2021 zookeeper-3.4.14.tar.gz.asc
  15. root@k8s-master01:~/k8s-data/dockerfile/web/magedu/zookeeper# cat Dockerfile
  16. FROM harbor.ik8s.cc/baseimages/slim_java:8
  17. ENV ZK_VERSION 3.4.14
  18. ADD repositories /etc/apk/repositories
  19. # Download Zookeeper
  20. COPY zookeeper-3.4.14.tar.gz /tmp/zk.tgz
  21. COPY zookeeper-3.4.14.tar.gz.asc /tmp/zk.tgz.asc
  22. COPY KEYS /tmp/KEYS
  23. RUN apk add --no-cache --virtual .build-deps \
  24.       ca-certificates   \
  25.       gnupg             \
  26.       tar               \
  27.       wget &&           \
  28.     #
  29.     # Install dependencies
  30.     apk add --no-cache  \
  31.       bash &&           \
  32.     #
  33.     #
  34.     # Verify the signature
  35.     export GNUPGHOME="$(mktemp -d)" && \
  36.     gpg -q --batch --import /tmp/KEYS && \
  37.     gpg -q --batch --no-auto-key-retrieve --verify /tmp/zk.tgz.asc /tmp/zk.tgz && \
  38.     #
  39.     # Set up directories
  40.     #
  41.     mkdir -p /zookeeper/data /zookeeper/wal /zookeeper/log && \
  42.     #
  43.     # Install
  44.     tar -x -C /zookeeper --strip-components=1 --no-same-owner -f /tmp/zk.tgz && \
  45.     #
  46.     # Slim down
  47.     cd /zookeeper && \
  48.     cp dist-maven/zookeeper-${ZK_VERSION}.jar . && \
  49.     rm -rf \
  50.       *.txt \
  51.       *.xml \
  52.       bin/README.txt \
  53.       bin/*.cmd \
  54.       conf/* \
  55.       contrib \
  56.       dist-maven \
  57.       docs \
  58.       lib/*.txt \
  59.       lib/cobertura \
  60.       lib/jdiff \
  61.       recipes \
  62.       src \
  63.       zookeeper-*.asc \
  64.       zookeeper-*.md5 \
  65.       zookeeper-*.sha1 && \
  66.     #
  67.     # Clean up
  68.     apk del .build-deps && \
  69.     rm -rf /tmp/* "$GNUPGHOME"
  70. # 拷贝配置文件和脚本
  71. COPY conf /zookeeper/conf/
  72. COPY bin/zkReady.sh /zookeeper/bin/
  73. COPY entrypoint.sh /
  74. ENV PATH=/zookeeper/bin:${PATH} \
  75.     ZOO_LOG_DIR=/zookeeper/log \
  76.     ZOO_LOG4J_PROP="INFO, CONSOLE, ROLLINGFILE" \
  77.     JMXPORT=9010
  78. # 启动zookeeper,entrypoint 脚本和cmd联合使用,entrypoint会把cmd当作参数传递给entrypoint脚本执行,即entrypoint脚本通常用来做一些环境初始化;比如这里就是用来在线生成zk集群配置
  79. ENTRYPOINT [ "/entrypoint.sh" ]
  80. CMD [ "zkServer.sh", "start-foreground" ]
  81. EXPOSE 2181 2888 3888 9010
  82. root@k8s-master01:~/k8s-data/dockerfile/web/magedu/zookeeper# cat conf/zoo.cfg
  83. tickTime=2000
  84. initLimit=10
  85. syncLimit=5
  86. dataDir=/zookeeper/data
  87. dataLogDir=/zookeeper/wal
  88. #snapCount=100000
  89. autopurge.purgeInterval=1
  90. clientPort=2181
  91. quorumListenOnAllIPs=trueroot@k8s-master01:~/k8s-data/dockerfile/web/magedu/zookeeper# cat entrypoint.sh
  92. #!/bin/bash
  93. # 生成zk集群配置
  94. echo ${MYID:-1} > /zookeeper/data/myid #将$MYID的值写入MYID文件,如果变量为空就默认为1,$MYID为pod中的系统级别环境变量,该变量由部署zk清单中的环境变量指定
  95. if [ -n "$SERVERS" ]; then #如果$SERVERS不为空则向下执行,SERVERS为pod中的系统级别环境变量,该变量同样也是在zk部署清单中指定的环境变量的
  96. IFS=\, read -a servers <<<"$SERVERS"  #IFS为bash内置变量用于分割字符并将结果形成一个数组
  97. for i in "${!servers[@]}"; do #${!servers[@]}表示获取servers中每个元素的索引值,此索引值会用做当前ZK的ID
  98.   printf "\nserver.%i=%s:2888:3888" "$((1 + $i))" "${servers[$i]}" >> /zookeeper/conf/zoo.cfg #打印结果并输出重定向到文件/zookeeper/conf/zoo.cfg,其中%i和%s的值来分别自于后面变量"$((1 + $i))" "${servers[$i]}"
  99. done
  100. fi
  101. cd /zookeeper
  102. exec "$@" #$@变量用于引用给脚本传递的所有参数,传递的所有参数会被作为一个数组列表,exec为终止当前进程、保留当前进程id、新建一个进程执行新的任务,即CMD [ "zkServer.sh", "start-foreground" ]
  103. root@k8s-master01:~/k8s-data/dockerfile/web/magedu/zookeeper# cat build-command.sh
  104. #!/bin/bash
  105. TAG=$1
  106. #docker build -t harbor.ik8s.cc/magedu/zookeeper:${TAG} .
  107. #sleep 1
  108. #docker push  harbor.ik8s.cc/magedu/zookeeper:${TAG}
  109. nerdctl  build -t harbor.ik8s.cc/magedu/zookeeper:${TAG} .
  110. nerdctl push harbor.ik8s.cc/magedu/zookeeper:${TAG}
  111. root@k8s-master01:~/k8s-data/dockerfile/web/magedu/zookeeper#
复制代码

可以看到zk3加入集群以后,对应身份并不能直接变为leader,这是因为集群已经有一个leader存在;
        出处:https://www.cnblogs.com/qiuhom-1874/        本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表