centos8中zookeeper3.6.1集群部署与配置配置优化

本文详细介绍了在CentOS8系统中部署Zookeeper3.6.1集群的步骤,包括系统环境要求、下载解压、配置环境变量、修改配置文件、设置myid、复制到其他节点、启动验证等环节,强调了防火墙设置和端口开放的重要性。

一、前言

zookeeper集群中,只有超过半数节点可用才能提供服务,所以节点最好是基数。例如有3个节点,其中一个节点运行出了故障,有两台是正常的,因为超过半数可以提供服务。如果有4个节点,其中有两个节点出故障,剩余2个节点不超过半数,不能提供服务,也就是4个节点也只能处理一个节点故障。

二、部署zookeeper所需要的系统环境

    1. 3台机器(可用虚拟机搞或者在同一台机器指定不同端口号)
         192.168.198.128
         192.168.198.129
         192.168.198.130

    2. 修改三台主机的/etc/hosts文件,指定主机名与ip的映射
        192.168.17.161 server1
        192.168.17.162 server2
        192.168.17.163 server3
    
    3. zookeeper的运行依赖于jdk,确保机器已经安装了jdk
         zookeeper支持运行在jdk1.8、jdk11、jdk12,不支持jdk9和jdk10
         jdk的安装可参考在centos8中下载和安装openJDK
   
    4. 关闭防火墙或者设置三台机器的2181、2888、3888端口互通
         2181端口是给客户端连接的端口
         2888端口是给集群选举用的端口
         3888端口是给集群进行通讯同步数据的端口
         如果端口不通启动zookeeper时会报“java.net.NoRouteToHostException: No route to host (Host unreachable)”的异常
         可以通过systemctl stop firewalld.service关闭防火墙

三、下载和解压3.6.1版本的zookeeper

        1.进入准备server1的安装目录 cd /data
        
        2. 下载zookeeper
            wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz
            
        3. 解压下载好的包
            tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz
            
        4. 把目录名称改短一些
            mv apache-zookeeper-3.6.1-bin zookeeper3.6.1
            
        5. 创建内存快照的存放目录以及事务日志目录
            如果有条件的话这两个目录尽量分开存储,zookeeper的增删改会有产生大量的事务日志类似于MySQL的binlog
            mkdir -p /data/zookeeper3.6.1/data
            mkdir -p /data/zookeeper3.6.1/logs

四、给三台机器配置以下zookeeper环境变量

        1. 在/etc/profile文件的末尾添加一下两行配置
            export ZOOKEEPER_HOME=/data/zookeeper
            export PATH=$ZOOKEEPER_HOME/bin:$PATH
            
        2. 刷新配置:source /etc/profile

五、修改zookeeper的配置文件

         server1:
         1. 设置节点的myid
             echo "1" > /data/zookeeper3.6.1/data/myid

         2. 修改中刚解压好的zookeeper的配置文件/data/zookeeper3.6.1/conf/zoo.cfg

#把示例配置文件的文件修改为zoo.cfg:mv zoo_sample.cfg zoo.cfg
#修改配置:
# 心跳单位,2s
tickTime=2000
# zookeeper初始化的同步超时时间,10个心跳单位,也即20s
initLimit=10
# 普通同步:发送一个请求并得到响应的超时时间,5个心跳单位也即10s
syncLimit=5
# 内存快照数据的存储位置
dataDir=/data/zookeeper3.6.1/data
# 事务日志的存储位置
dataLogDir=/data/zookeeper3.6.1/logs
# 当前zookeeper节点的端口 
clientPort=2181
# 单个客户端到集群中单个节点的并发连接数,通过ip判断是否同一个客户端,默认60
maxClientCnxns=1000
# 保留7个内存快照文件在dataDir中,默认保留3个
autopurge.snapRetainCount=7
# 清除快照的定时任务,默认1小时,如果设置为0,标识关闭清除任务
autopurge.purgeInterval=1
#允许客户端连接设置的最小超时时间,默认2个心跳单位
minSessionTimeout=4000
#允许客户端连接设置的最大超时时间,默认是20个心跳单位,也即40s,
maxSessionTimeout=300000
#集群地址配置
server.1=server1:2888:3888
server.2=server2:2888:3888
server.3=server3:2888:3888

        3. 修改日志配置,默认会写控制台,修改为每天产生一个日志文件

#修改/data/zookeeper3.6.1/bin/zkEnv.sh文件
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
	ZOO_LOG_DIR="$ZOOKEEPER_PREFIX/logs"
fi
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
	ZOO_LOG4J_PROP="INFO,CONSOLE"
fi
#改成:
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
	ZOO_LOG_DIR="../logs"
fi
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
	ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi
#修改/data/zookeeper3.6.1/bin/zkServer.sh的日志配置名称
ZOO_LOG_FILE=zookeeper-$USER-server-$HOSTNAME.log
_ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper-$USER-server-$HOSTNAME.out"
#改为:
ZOO_LOG_FILE=zookeeper.log
_ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"
#修改/data/zookeeper3.6.1/conf/log4j.properties文件,如下图所示
zookeeper.root.logger=INFO,CONSOLE 
zookeeper.log.dir=./
zookeeper.log.file=zookeeper.log
zookeeper.log.maxfilesize=100MB
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
#改为:
zookeeper.root.logger=INFO,ROLLINGFILE 
zookeeper.log.dir=/data/zookeeper3.6.1/logs
zookeeper.log.file=zookeeper.log
zookeeper.log.maxfilesize=100MB
log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender

        4. 修改jvm heap大小

#默认的jvm对内存是1000M,可根据压测情况合理设置堆内存的大小
#可通过修改ZK_SERVER_HEAP:-1024这个参数的方式来调整堆内存的大小
ZK_SERVER_HEAP="${ZK_SERVER_HEAP:-1024}"
export SERVER_JVMFLAGS="-Xmx${ZK_SERVER_HEAP}m $SERVER_JVMFLAGS"

六、复制到其他节点,并修改myid

#server1 复制修改好的目录到server2和server3
scp -r /data/zookeeper3.6.1/ root@server2:/data
scp -r /data/zookeeper3.6.1/ root@server3:/data
#server2 把server2中的zookeeper的myid修改为2
echo "2" > /data/zookeeper3.6.1/data/myid
#server3 把server3中的zookeeper的myid修改为3
echo "3" > /data/zookeeper3.6.1/data/myid

七、分别启动zookeeper三个节点

#server1:
cd /data/zookeeper3.6.1/bin
./zkServer.sh start

#server2:
cd /data/zookeeper3.6.1/bin
./zkServer.sh start

#server3:
cd /data/zookeeper3.6.1/bin
./zkServer.sh start

八、启动后验证集群是否已正常

1、在各个节点执行./zkServer.sh status查看启动状态

      可以看到Mode: leader或者Mode:followe

2、使用客户端连接创建和查询目录

cd /data/zookeeper3.6.1/bin
./zkCli.sh -server server1:2181
create /zcjtest test01
get /zcjtest

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值