DEVOPS-在K8S生产集群上构建zookeeper集群

释放双眼,带上耳机,听听看~!

一、zookeeper集群运行模式

Zookeeper 有三种运行模式:单机模式、伪集群模式和集群模式。这里我们以集群模式为例进行介绍。 集群模式最重要的一点是,只要集群中存在超过一半的机器能够正常工作,那么整个集群就能够正常对外服务。正是基于这个特性,要将 ZK 集群的节点数量要为奇数(2n+1:如 3、5、7 个节点)较为合适。

由于生产环境服务需要上k8s,会依赖zookeeper作为注册中心,所以需要在k8s集群上搭建好一套zookeeper集群。

二、 制作zookeeper镜像

因为构建的是zookeeper集群,myid是变量,所以编写的Dockerfile需要配置好ENV,启动镜像的时候传入参数才可以成功构建集群。

2.1 准备好JAVA运行环境

JDK安装配置,请参考CentOS7安装JDK8

2.2 下载、解压

  • 下载zookeeper-3.4.14


1
2
1wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
2
  • 解压 


1
2
1tar -xf zookeeper-3.4.14.tar.gz
2

2.3 修改配置文件


1
2
3
4
5
6
7
8
9
10
1tickTime=2000
2initLimit=10
3syncLimit=5
4dataDir=/opt/zookeeper/data
5clientPort=2181
6server.1=zk1-mg-addr:2888:3888
7server.2=zk2-mg-addr:2888:3888
8server.3=zk3-mg-addr:2888:3888
9
10
  • 参数说明:

dataDir=/opt/zookeeper/data

dataDir:默认情况下,事务日志也会存储在这里。

server.id=IP/Host : port1 : port2
id:用来配置ZK集群中的各节点,并建议id的值和myid保持一致。
IP/Host: 服务器的 IP 或者是与 IP 地址做了映射的主机名
port1:Leader和Follower或Observer交换数据使用
port2:用于Leader选举
注意:如果是伪集群的配置方式,不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

2.4 编写Dockerfile

通过设置ENV ZOO_CLUSTER变量,就可以在启动镜像的时候传入1,2,3

] # vim Dockerfile


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1FROM registry.moguyun.com/centos7-jdk8
2MAINTAINER lijun registry.moguyun.com
3ENV REFRESHED_AT 20190726
4
5ENV ZOO_HOME /opt/zookeeper
6ENV ZOO_USER zookeeper
7ENV ZOO_CLUSTER 1
8
9RUN groupadd zookeeper && useradd zookeeper -g zookeeper -s /sbin/nologin -M
10RUN yum install -y telnet lsof
11
12ADD zookeeper $ZOO_HOME
13WORKDIR /opt/zookeeper
14RUN echo 'sed -i "s|zk${1}-mg-addr|0.0.0.0|g" '$ZOO_HOME'/conf/zoo.cfg' >> /bin/sysinit.sh && \
15    echo 'echo ${1} > '$ZOO_HOME'/data/myid' >> /bin/sysinit.sh && \
16    echo "chown -R zookeeper:zookeeper $ZOO_HOME" >> /bin/sysinit.sh && \
17    echo "su $ZOO_USER -s /bin/bash -c \"cd $ZOO_HOME/bin && ./zkServer.sh start-foreground |
18    tee ../logs/zookeeper.log \"" >> /bin/sysinit.sh
19
20EXPOSE 2181 2888 3888
21
22CMD ["sh", "-c", "/bin/sysinit.sh $ZOO_CLUSTER"]
23
24

2.5 构建镜像

docker build 默认寻找当前目录下的Dockerfile,. 标识的是上下文环境


1
2
1docker build -t registry-***.aliyuncs.com/moguyun-prod/common:zoo-cluster-201912191927 .
2

 三、在K8S环境构建集群

3.1 创建应用

3.1.1 创建无状态【deployment】应用

  • 填入应用名称,副本数量,无状态应用类型

DEVOPS-在K8S生产集群上构建zookeeper集群

3.1.2 传入参数【myid】

  • 制作好的镜像已经push到指定镜像仓库了
  • 在选择zoo-cluster-201912191927镜像后,K8S平台会读取Dockerfile里面定义好的ENV,依次传入参数即可实现集群构建

DEVOPS-在K8S生产集群上构建zookeeper集群

3.2 验证集群

  1. 第一个deploment对应的pod上zookeeper的角色为follower

DEVOPS-在K8S生产集群上构建zookeeper集群

  1. 第二个deployment对应的pod上zookeeper的角色为leader

DEVOPS-在K8S生产集群上构建zookeeper集群

  1. 第三个deployment对应的pod上zookeeper的角色为follower

DEVOPS-在K8S生产集群上构建zookeeper集群

至此:zookeeper集群已经运行在阿里云K8S环境了

 

给TA打赏
共{{data.count}}人
人已打赏
安全运维

故障复盘的简洁框架-黄金三问

2021-9-30 19:18:23

安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索