一、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】应用
- 填入应用名称,副本数量,无状态应用类型
3.1.2 传入参数【myid】
- 制作好的镜像已经push到指定镜像仓库了
- 在选择zoo-cluster-201912191927镜像后,K8S平台会读取Dockerfile里面定义好的ENV,依次传入参数即可实现集群构建
3.2 验证集群
- 第一个deploment对应的pod上zookeeper的角色为follower
- 第二个deployment对应的pod上zookeeper的角色为leader
- 第三个deployment对应的pod上zookeeper的角色为follower
至此:zookeeper集群已经运行在阿里云K8S环境了