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
相关推荐
东阳马生架构12 小时前
zk基础—4.zk实现分布式功能
zookeeper
东阳马生架构18 小时前
zk基础—3.集群与核心参数一
zookeeper
java技术小馆1 天前
Zookeeper中的Zxid是如何设计的
java·分布式·zookeeper·云原生
东阳马生架构2 天前
zk基础—3.集群与核心参数
zookeeper
纪元A梦2 天前
分布式锁算法——基于ZooKeeper的分布式锁全面解析
java·分布式·算法·zookeeper
拾荒的小海螺2 天前
JAVA:使用 Curator 进行 ZooKeeper 操作的技术指南
java·zookeeper·java-zookeeper
东阳马生架构2 天前
zk基础—1.一致性原理和算法二
zookeeper·分布式原理
东阳马生架构3 天前
zk基础—2.架构原理和使用场景
zookeeper