zookeeper

zookeeper 总览
zookeeper 快速开始
zookeeper 管理员手册

dockerfile

FROM 1209233066/jre:1.8.0_281
LABEL Name=zookeeper Version=3.4.13

ADD https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz /opt
RUN tar xf /opt/zookeeper-3.4.14.tar.gz -C /opt &&\
    ln -svf  /opt/zookeeper-3.4.14 /opt/zookeeper
CMD ["sh", "-c", "/opt/zookeeper-3.4.14/bin/zkServer.sh print-cmd"]
docker build . -t 1209233066/zookeeper:3.4.14

configmap

apiVersion: v1
kind: ConfigMap
metadata:
  name: zookeeper-cm
data: 
  zoo.cfg: |
    tickTime=2000
    dataDir=/var/lib/zookeeper/
    clientPort=2181
    initLimit=5
    syncLimit=2
    # 3888 内部选举端口 ;
    # 2888 leader向follwer同步数据使用;
    # 2181提供给客户端连接 
    server.1=zookeeper-0.zookeeper:2888:3888
    server.2=zookeeper-1.zookeeper:2888:3888
    server.3=zookeeper-2.zookeeper:2888:3888
  log4j.properties: |
    # Define some default values that can be overridden by system properties
    zookeeper.root.logger=INFO, CONSOLE
    zookeeper.console.threshold=INFO
    zookeeper.log.dir=.
    zookeeper.log.file=zookeeper.log
    zookeeper.log.threshold=DEBUG
    zookeeper.tracelog.dir=.
    zookeeper.tracelog.file=zookeeper_trace.log

    #
    # ZooKeeper Logging Configuration
    #

    # Format is "<default threshold> (, <appender>)+

    # DEFAULT: console appender only
    log4j.rootLogger=${zookeeper.root.logger}

    # Example with rolling log file
    #log4j.rootLogger=DEBUG, CONSOLE, ROLLINGFILE

    # Example with rolling log file and tracing
    #log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE

    #
    # Log INFO level and above messages to the console
    #
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold}
    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n

    #
    # Add ROLLINGFILE to rootLogger to get log file output
    #    Log DEBUG level and above messages to a log file
    log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
    log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}
    log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}

    # Max log file size of 10MB
    log4j.appender.ROLLINGFILE.MaxFileSize=10MB
    # uncomment the next line to limit number of backup files
    #log4j.appender.ROLLINGFILE.MaxBackupIndex=10

    log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
    log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n


    #
    # Add TRACEFILE to rootLogger to get log file output
    #    Log DEBUG level and above messages to a log file
    log4j.appender.TRACEFILE=org.apache.log4j.FileAppender
    log4j.appender.TRACEFILE.Threshold=TRACE
    log4j.appender.TRACEFILE.File=${zookeeper.tracelog.dir}/${zookeeper.tracelog.file}

    log4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout
    ### Notice we are including log4j's NDC here (%x)
    log4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L][%x] - %m%n

statefulset

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: zk-pdb
spec:
  selector:
    matchLabels:
      app: zookeeper
  # 保证最大不可用数量,防止集群更新过程中服务降级
  # https://www.jianshu.com/p/7da065228a04
  maxUnavailable: 1
---
apiVersion: v1
kind: Service
metadata:
  name: zookeeper
spec:
  type: NodePort
  ports:
  - name: zookeeper-client
    port: 2181
    nodePort: 32181
    targetPort: 2181
  selector:
    app: zookeeper
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: zookeeper
spec:
  serviceName: zookeeper
  selector:
    matchLabels:
      app: zookeeper
  replicas: 3
  # OrderedReady:默认方式,按照pod的次序依次创建每个pod并等待ready之后才创建后面的pod。
  # Parallel:并行创建或删除pod,和deployment类型的pod一样。
  podManagementPolicy: Parallel
  template:
    metadata:
      labels:
        app: zookeeper
    spec:
      nodeName: 10.4.7.31
      volumes:
      - name: config
        configMap:
          name: zookeeper-cm
          items:
          - key: zoo.cfg
            path: zoo.cfg
          - key: log4j.properties
            path: log4j.properties
      containers:
      - name: zookeeper
        image: 1209233066/zookeeper:3.4.14
        imagePullPolicy: IfNotPresent
        command: ["sh", "-c", "order_num=`hostname|awk -F \"\" '{print $NF}'` && echo $(($order_num+1)) >/var/lib/zookeeper/myid && /opt/zookeeper-3.4.14/bin/zkServer.sh start-foreground"]
        volumeMounts:
        - name: config
          mountPath: /opt/zookeeper/conf
        - name: zookeeper-pvc
          mountPath: /var/lib/zookeeper/
  volumeClaimTemplates:
  - apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: zookeeper-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: csi-rbd-sc
      resources:
        requests:
          storage: 1000Mi

python 客户端测试
其他客户端工具

#!/usr/bin/python3

from kazoo.client import KazooClient

zk=KazooClient(hosts='10.4.7.31:32181')
zk.start()

# zk.create("/name",b"wangendao")
node=zk.get_children('/')

print(node)

zk.stop()
zk.close()

posted @ 2022-05-22 21:56  mingtian是吧  阅读(31)  评论(0编辑  收藏  举报