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
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
  • 解压 
tar -xf zookeeper-3.4.14.tar.gz

2.3 修改配置文件

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

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

FROM registry.moguyun.com/centos7-jdk8
MAINTAINER lijun registry.moguyun.com
ENV REFRESHED_AT 20190726

ENV ZOO_HOME /opt/zookeeper
ENV ZOO_USER zookeeper
ENV ZOO_CLUSTER 1

RUN groupadd zookeeper && useradd zookeeper -g zookeeper -s /sbin/nologin -M
RUN yum install -y telnet lsof

ADD zookeeper $ZOO_HOME
WORKDIR /opt/zookeeper
RUN echo 'sed -i "s|zk${1}-mg-addr|0.0.0.0|g" '$ZOO_HOME'/conf/zoo.cfg' >> /bin/sysinit.sh && \
    echo 'echo ${1} > '$ZOO_HOME'/data/myid' >> /bin/sysinit.sh && \
    echo "chown -R zookeeper:zookeeper $ZOO_HOME" >> /bin/sysinit.sh && \
    echo "su $ZOO_USER -s /bin/bash -c \"cd $ZOO_HOME/bin && ./zkServer.sh start-foreground | 
    tee ../logs/zookeeper.log \"" >> /bin/sysinit.sh

EXPOSE 2181 2888 3888

CMD ["sh", "-c", "/bin/sysinit.sh $ZOO_CLUSTER"]

2.5 构建镜像

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

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

 三、在K8S环境构建集群

3.1 创建应用

3.1.1 创建无状态【deployment】应用

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

3.1.2 传入参数【myid】

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

3.2 验证集群

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

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

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

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

 
发布了161 篇原创文章 · 获赞 40 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_36441027/article/details/103619552