赞
踩
由于生产环境上使用的是zookeeper3.6.3集群,需要容器化部署。
版本:zookeeper 3.6.3
要求:数据持久化
wget http://www.apache.org/dist/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
cat zkGenConfig.sh
#!/usr/bin/env bash ZK_USER=${ZK_USER:-"zookeeper"} ZK_LOG_LEVEL=${ZK_LOG_LEVEL:-"INFO"} ZK_DATA_DIR=${ZK_DATA_DIR:-"/data/zookeeper/data_dir"} #change ZK_DATA_LOG_DIR=${ZK_DATA_LOG_DIR:-"/data/zookeeper/log_dir"} #change ZK_LOG_DIR=${ZK_LOG_DIR:-"/data/zookeeper/logs"} #change ZK_CONF_DIR=${ZK_CONF_DIR:-"/opt/zookeeper/conf"} ZK_CLIENT_PORT=${ZK_CLIENT_PORT:-2181} ZK_SERVER_PORT=${ZK_SERVER_PORT:-2888} ZK_ELECTION_PORT=${ZK_ELECTION_PORT:-3888} ZK_TICK_TIME=${ZK_TICK_TIME:-2000} ZK_INIT_LIMIT=${ZK_INIT_LIMIT:-10} ZK_SYNC_LIMIT=${ZK_SYNC_LIMIT:-5} ZK_HEAP_SIZE=${ZK_HEAP_SIZE:-2G} ZK_MAX_CLIENT_CNXNS=${ZK_MAX_CLIENT_CNXNS:-1000} #change ZK_MIN_SESSION_TIMEOUT=${ZK_MIN_SESSION_TIMEOUT:- $((ZK_TICK_TIME*2))} ZK_MAX_SESSION_TIMEOUT=${ZK_MAX_SESSION_TIMEOUT:- $((ZK_TICK_TIME*20))} ZK_SNAP_RETAIN_COUNT=${ZK_SNAP_RETAIN_COUNT:-3} ZK_PURGE_INTERVAL=${ZK_PURGE_INTERVAL:-0} ID_FILE="$ZK_DATA_DIR/myid" ZK_CONFIG_FILE="$ZK_CONF_DIR/zoo.cfg" LOGGER_PROPS_FILE="$ZK_CONF_DIR/log4j.properties" JAVA_ENV_FILE="$ZK_CONF_DIR/java.env" HOST=`hostname -s` DOMAIN=`hostname -d` function print_servers() { for (( i=1; i<=$ZK_REPLICAS; i++ )) do echo "server.$i=$NAME-$((i-1)).$DOMAIN:$ZK_SERVER_PORT:$ZK_ELECTION_PORT" done } function validate_env() { echo "Validating environment" if [ -z $ZK_REPLICAS ]; then echo "ZK_REPLICAS is a mandatory environment variable" exit 1 fi if [[ $HOST =~ (.*)-([0-9]+)$ ]]; then NAME=${BASH_REMATCH[1]} ORD=${BASH_REMATCH[2]} else echo "Failed to extract ordinal from hostname $HOST" exit 1 fi MY_ID=$((ORD+1)) echo "ZK_REPLICAS=$ZK_REPLICAS" echo "MY_ID=$MY_ID" echo "ZK_LOG_LEVEL=$ZK_LOG_LEVEL" echo "ZK_DATA_DIR=$ZK_DATA_DIR" echo "ZK_DATA_LOG_DIR=$ZK_DATA_LOG_DIR" echo "ZK_LOG_DIR=$ZK_LOG_DIR" echo "ZK_CLIENT_PORT=$ZK_CLIENT_PORT" echo "ZK_SERVER_PORT=$ZK_SERVER_PORT" echo "ZK_ELECTION_PORT=$ZK_ELECTION_PORT" echo "ZK_TICK_TIME=$ZK_TICK_TIME" echo "ZK_INIT_LIMIT=$ZK_INIT_LIMIT" echo "ZK_SYNC_LIMIT=$ZK_SYNC_LIMIT" echo "ZK_MAX_CLIENT_CNXNS=$ZK_MAX_CLIENT_CNXNS" echo "ZK_MIN_SESSION_TIMEOUT=$ZK_MIN_SESSION_TIMEOUT" echo "ZK_MAX_SESSION_TIMEOUT=$ZK_MAX_SESSION_TIMEOUT" echo "ZK_HEAP_SIZE=$ZK_HEAP_SIZE" echo "ZK_SNAP_RETAIN_COUNT=$ZK_SNAP_RETAIN_COUNT" echo "ZK_PURGE_INTERVAL=$ZK_PURGE_INTERVAL" echo "ENSEMBLE" print_servers echo "Environment validation successful" } function create_config() { rm -f $ZK_CONFIG_FILE echo "Creating ZooKeeper configuration" echo "#This file was autogenerated by k8szk DO NOT EDIT" >> $ZK_CONFIG_FILE echo "clientPort=$ZK_CLIENT_PORT" >> $ZK_CONFIG_FILE echo "dataDir=$ZK_DATA_DIR" >> $ZK_CONFIG_FILE echo "dataLogDir=$ZK_DATA_LOG_DIR" >> $ZK_CONFIG_FILE echo "tickTime=$ZK_TICK_TIME" >> $ZK_CONFIG_FILE echo "initLimit=$ZK_INIT_LIMIT" >> $ZK_CONFIG_FILE echo "syncLimit=$ZK_SYNC_LIMIT" >> $ZK_CONFIG_FILE echo "maxClientCnxns=$ZK_MAX_CLIENT_CNXNS" >> $ZK_CONFIG_FILE echo "minSessionTimeout=$ZK_MIN_SESSION_TIMEOUT" >> $ZK_CONFIG_FILE echo "maxSessionTimeout=$ZK_MAX_SESSION_TIMEOUT" >> $ZK_CONFIG_FILE echo "autopurge.snapRetainCount=$ZK_SNAP_RETAIN_COUNT" >> $ZK_CONFIG_FILE echo "autopurge.purgeInterval=$ZK_PURGE_INTERVAL" >> $ZK_CONFIG_FILE echo "4lw.commands.whitelist=*" >> $ZK_CONFIG_FILE echo "quorumListenOnAllIPs=true" >> $ZK_CONFIG_FILE if [ $ZK_REPLICAS -gt 1 ]; then print_servers >> $ZK_CONFIG_FILE fi echo "Wrote ZooKeeper configuration file to $ZK_CONFIG_FILE" } function create_data_dirs() { echo "Creating ZooKeeper data directories and setting permissions" if [ ! -d $ZK_DATA_DIR ]; then mkdir -p $ZK_DATA_DIR chown -R $ZK_USER:$ZK_USER $ZK_DATA_DIR fi if [ ! -d $ZK_DATA_LOG_DIR ]; then mkdir -p $ZK_DATA_LOG_DIR chown -R $ZK_USER:$ZK_USER $ZK_DATA_LOG_DIR fi if [ ! -d $ZK_LOG_DIR ]; then mkdir -p $ZK_LOG_DIR chown -R $ZK_USER:$ZK_USER $ZK_LOG_DIR fi if [ ! -f $ID_FILE ]; then echo $MY_ID >> $ID_FILE fi echo "Created ZooKeeper data directories" } function create_log_props () { rm -f $LOGGER_PROPS_FILE echo "Creating ZooKeeper log4j configuration" echo "zookeeper.root.logger=CONSOLE" >> $LOGGER_PROPS_FILE echo "zookeeper.console.threshold="$ZK_LOG_LEVEL >> $LOGGER_PROPS_FILE echo "log4j.rootLogger=\${zookeeper.root.logger}" >> $LOGGER_PROPS_FILE echo "log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender" >> $LOGGER_PROPS_FILE echo "log4j.appender.CONSOLE.Threshold=\${zookeeper.console.threshold}" >> $LOGGER_PROPS_FILE echo "log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout" >> $LOGGER_PROPS_FILE echo "log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n" >> $LOGGER_PROPS_FILE echo "Wrote log4j configuration to $LOGGER_PROPS_FILE" } function create_java_env() { rm -f $JAVA_ENV_FILE echo "Creating JVM configuration file" echo "ZOO_LOG_DIR=$ZK_LOG_DIR" >> $JAVA_ENV_FILE echo "JVMFLAGS=\"-Xmx$ZK_HEAP_SIZE -Xms$ZK_HEAP_SIZE\"" >> $JAVA_ENV_FILE echo "Wrote JVM configuration to $JAVA_ENV_FILE" } validate_env && create_config && create_log_props && create_data_dirs && create_java_env
cat zkOk.sh
#!/usr/bin/env bash
# zkOk.sh uses the ruok ZooKeeper four letter work to determine if the instance
# is health. The $? variable will be set to 0 if server responds that it is
# healthy, or 1 if the server fails to respond.
ZK_CLIENT_PORT=${ZK_CLIENT_PORT:-2181}
OK=$(echo ruok | nc 127.0.0.1 $ZK_CLIENT_PORT)
if [ "$OK" == "imok" ]; then
exit 0
else
exit 1
fi
cat zkMetrics.sh
#!/usr/bin/env bash
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
ZK_CLIENT_PORT=${ZK_CLIENT_PORT:-2181}
echo mntr | nc localhost $ZK_CLIENT_PORT >& 1
cat Dockerfile
FROM ubuntu:20.04 MAINTAINER wangkx #defaine env args ENV ZK_USER=zookeeper \ ZK_DATA_DIR=/data/zookeeper/data_dir \ ZK_DATA_LOG_DIR=/data/zookeeper/log_dir \ ZK_LOG_DIR=/data/zookeeper/logs \ JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 \ ZK_DIST=apache-zookeeper-3.6.3-bin #copy zk package ADD $ZK_DIST.tar.gz /opt #install java nc tools and clean cache RUN set -x \ && apt-get update \ && apt-get install -y openjdk-8-jre-headless netcat-openbsd \ && ln -s /opt/$ZK_DIST /opt/zookeeper \ && rm -rf /var/lib/apt/lists/* # Copy configuration generator script to bin COPY zkGenConfig.sh zkOk.sh zkMetrics.sh /opt/zookeeper/bin/ # Create a user for the zookeeper process and configure file system ownership # for necessary directories and symlink the distribution as a user executable RUN set -x \ && useradd $ZK_USER \ && [ `id -u $ZK_USER` -eq 1000 ] \ && [ `id -g $ZK_USER` -eq 1000 ] \ && chmod +x /opt/zookeeper/bin/zkGenConfig.sh \ && chmod +x /opt/zookeeper/bin/zkOk.sh \ && chmod +x /opt/zookeeper/bin/zkMetrics.sh \ && mkdir -p $ZK_DATA_DIR $ZK_DATA_LOG_DIR $ZK_LOG_DIR /usr/share/zookeeper /usr/etc/ \ && chown -R "$ZK_USER:$ZK_USER" /opt/$ZK_DIST $ZK_DATA_DIR $ZK_LOG_DIR $ZK_DATA_LOG_DIR \ && ln -s /opt/zookeeper/conf/ /usr/etc/zookeeper \ && ln -s /opt/zookeeper/bin/* /usr/bin \ && ln -s /opt/zookeeper/lib/* /usr/share/zookeeper
docker build -t zookeeper:3.6.3 -f Dockerfile .
docker login --username=wkx_0422@163.com registry.cn-hangzhou.aliyuncs.com #登陆个人版仓库
docker tag zookeeper:3.6.3 registry.cn-hangzhou.aliyuncs.com/my_image_repo/zookeeper:3.6.3
docker push registry.cn-hangzhou.aliyuncs.com/my_image_repo/zookeeper:3.6.3
至此完成zookeeper3.6.3 镜像的制作,下一节 将此镜像部署到k8s集群中。
都到这儿了,更多文章,详见个人微信公众号ALL In Linux,来扫一扫吧!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。