ZooKeeper集群指南-安装配置

节点之间配置ssh免密,第一台节点配置完成后将目录scp到其他节点,除了5. 节点ID配置不同以外,其他都一致

1. 安装Java环境

bash 复制代码
# 安装OpenJDK 8
apt-get update
apt-get install openjdk-8-jdk -y

2. 下载并安装ZooKeeper

bash 复制代码
# 下载指定版本
cd /data
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz

# 解压安装
tar -zxf apache-zookeeper-3.6.2-bin.tar.gz
mv apache-zookeeper-3.6.2-bin zookeeper

# 创建必要目录
mkdir -p /data/zookeeper/data
mkdir -p /data/zookeeper/logs

3. 配置环境变量

创建环境变量配置文件

bash 复制代码
vim /etc/profile.d/zookeeper.sh

添加以下配置

bash 复制代码
# ZooKeeper Environment
export ZOOKEEPER_HOME=/data/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

# Java Environment
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin

# ZooKeeper Security Configuration
export ZK_CLIENT_OPTS="-Djava.security.auth.login.config=/data/zookeeper/conf/zookeeper_jaas.conf"
export JVMFLAGS="-Djava.security.auth.login.config=/data/zookeeper/conf/zookeeper_jaas.conf"

使环境变量生效

bash 复制代码
source /etc/profile.d/zookeeper.sh

4. ZooKeeper配置

创建配置文件

bash 复制代码
vim /data/zookeeper/conf/zoo.cfg

添加以下配置内容

properties 复制代码
# 基础配置
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
admin.serverPort=8081

# 监听配置
quorumListenOnAllIPs=true

# 集群配置
server.1=172.24.77.10:2888:3888
server.2=172.24.77.11:2888:3888
server.3=172.24.77.12:2888:3888

# 四字母命令配置
4lw.commands.whitelist=*

# 自动清理配置
autopurge.snapRetainCount=3
autopurge.purgeInterval=1

# 会话超时配置
maxSessionTimeout=60000
minSessionTimeout=4000

# 安全认证配置
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000

jaas配置

Server是zk之间加密通信用的,Client是kafka或者zkClient使用的。默认情况下,zk谁都可以连接查询数据

yaml 复制代码
$ cat zookeeper_jaas.conf 
# 1. Server部分 - ZooKeeper服务器认证配置
Server {
    org.apache.zookeeper.server.auth.DigestLoginModule required
    user_super="super_password"    # super是用户名,super_password是密码
    user_kafka="kafka_password";   # kafka是用户名,kafka_password是密码
};
# 2. Client部分 - ZK客户端认证配置
Client {
    org.apache.zookeeper.server.auth.DigestLoginModule required
    username="super"               # 使用Server中定义的super用户
    password="super_password";     # 必须匹配Server中user_super的密码
};

5. 节点ID配置

bash 复制代码
# 在每个节点的dataDir目录下创建myid文件
# 节点1
echo "1" > /data/zookeeper/data/myid

# 节点2
echo "2" > /data/zookeeper/data/myid

# 节点3
echo "3" > /data/zookeeper/data/myid

6. 配置说明

配置项 说明 默认值
tickTime 基本时间单位(毫秒) 2000
initLimit 初始同步时限 10
syncLimit 同步时限 5
clientPort 客户端连接端口 2181
admin.serverPort 管理端口 8081
server.X 集群服务器配置 -

7. 服务管理

bash 复制代码
# 启动服务
zkServer.sh start

# 检查状态
zkServer.sh status

# 停止服务
zkServer.sh stop

# 重启服务
zkServer.sh restart

8. 验证安装

bash 复制代码
# 检查进程
ps aux | grep zookeeper

# 检查端口
netstat -nlpt | grep -E '2181|2888|3888|8081'

# 检查日志
tail -f /data/zookeeper/logs/zookeeper.log

9. ACL配置

shell 复制代码
# 1. 首先确保已正确配置JAAS并连接(前面已经定义,这里检查一下)
export JVMFLAGS="-Djava.security.auth.login.config=/data/zookeeper/conf/zookeeper_jaas.conf"
export ZK_CLIENT_OPTS="-Djava.security.auth.login.config=/data/zookeeper/conf/zookeeper_jaas.conf"

# 2. 使用zkCli连接并认证
zkCli.sh -server localhost:2181

# 3. 查看当前ACL
[zk: localhost:2181(CONNECTED) 0] getAcl /
'world,'anyone
: cdrwa

# 4. 设置新的ACL (使用sasl方案)
[zk: localhost:2181(CONNECTED) 0] setAcl / sasl:super:cdrwa

# 5. 验证ACL已修改
[zk: localhost:2181(CONNECTED) 0] getAcl /
'sasl,'super
: cdrwa
相关推荐
Rookie小强7 天前
ZooKeeper和Reids做分布式锁的区别?
分布式·zookeeper·云原生
蓝眸少年CY7 天前
(第三篇)spring cloud之Zookeeper注册中心
spring·spring cloud·zookeeper
斯普信专业组7 天前
zookeeper因jute.maxbuffer启动异常问题排查处理
分布式·zookeeper·云原生
阿里云云原生12 天前
金融级 ZooKeeper 来袭:性能提升100%,SLA 99.99%,数据防护升级
zookeeper
亲爱的非洲野猪13 天前
ZooKeeper 深度实践:从原理到 Spring Boot 全栈落地
spring boot·zookeeper·java-zookeeper
zlpzlpzyd15 天前
Zookeeper符合cap中的AP还是CP
linux·分布式·zookeeper
yuanzhengme15 天前
Shell【脚本 02】离线安装配置Zookeeper及Kafka并添加service服务和开机启动(脚本分析)
linux·zookeeper·kafka·自动化·安装脚本
巴里巴气18 天前
zookeeper基本概念介绍
linux·分布式·zookeeper