zookeeper 改造 SASL 认证
背景:该zookeeper集群是给Kafka提供服务。zookeeper改造成sasl认证,Kafka集群需要添加连接zookeeper的账号密码。
zookeeper服务
停止服务
# 停止Kafka
cd /app/kafka/bin
./kafka-server-stop.sh
# 停止zookeeper
cd /app/zookeeper/bin
./zkServer.sh stop
添加sasl配置
cat <<'EOF' | tee -a /app/zookeeper/conf/zoo.cfg > /dev/null
### SASL configuration begin ###
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
requireClientAuthScheme=sasl
zookeeper.sasl.client=true
sessionRequireClientSASLAuth=true
### SASL configuration end ###
EOF
创建密码文件
cat <<'EOF' | tee /app/zookeeper/conf/zk_jaas.conf > /dev/null
Server {
org.apache.zookeeper.server.auth.DigestLoginModule required
username="admin"
password="admin"
user_ops="ops-secret";
};
Client {
org.apache.zookeeper.server.auth.DigestLoginModule required
username="ops"
password="ops-secret";
};
EOF
- Server 是 zookeeper 服务端使用滴
- Client 是 zookeeper 客户端使用:例如:zkCli.sh 工具,Kafka等等...
添加启动参数
cat <<'EOF' | tee /app/zookeeper/conf/java.env > /dev/null
export JVMFLAGS="-Djava.security.auth.login.config=/app/zookeeper/conf/zk_jaas.conf ${JVMFLAGS}"
EOF
启动服务
cd /app/zookeeper/bin
./zkServer.sh start
验证服务
cd /app/zookeeper/bin
./zkCli.sh -server 192.168.32.189:2181
注意:如果 zookeeper 是集群,每个节点都需要尝试连接。
Kafka集群
连接zk的配置文件
cat <<'EOF' | tee -a /app/kafka/config/zookeeper.properties > /dev/null
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-512
EOF
连接zk的账号密码
cat <<'EOF' | tee /app/kafka/config/kafka_jaas.conf > /dev/null
// 连接zookeeper的账号密码
Client {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="ops"
password="ops-secret";
};
EOF
Kafka的启动脚本
# 复制匹配并注释该行
sed -ri '/^exec/h;/^exec/G;s/^(exec)/# \1/' /app/kafka/bin/kafka-server-start.sh
# 修改没有注释行
sed -ri 's@^(exec.*) (kafka\.)@\1 -Djava.security.auth.login.config=$(dirname $0)/../config/kafka_jaas.conf \2@' /app/kafka/bin/kafka-server-start.sh
复制匹配并注释该行 参数解释
启动服务
./kafka-server-start.sh -daemon ../config/server.properties
验证服务
# 方法一(需要过几秒再执行)
$ jps
34900 Kafka
9933 QuorumPeerMain
36333 Jps
# 方法二(这个验证为准)
# 消费者【终端一】
$ ./kafka-console-consumer.sh --bootstrap-server 192.168.32.189:9092 --topic test
hello, jiaxzeng
# 生产者【终端二】
# 输入数据,看终端一是否有消费成功
$ ./kafka-console-producer.sh --broker-list 192.168.32.189:9092 --topic test
>hello, jiaxzeng
相关命令整改
Kafka-acls.sh 命令
1. 修改命令启动配置(将最后一行注释掉,添加一行新的)
# 复制匹配并注释该行
sed -ri '/^exec/h;/^exec/G;s/^(exec)/# \1/' /app/kafka/bin/kafka-acls.sh
# 修改没有注释行
sed -ri 's@^(exec.*) (kafka\.)@\1 -Djava.security.auth.login.config=$(dirname $0)/../config/kafka_jaas.conf \2@' /app/kafka/bin/kafka-acls.sh
2. 添加连接zk sasl配置 (请先确认是有以下配置,如果有则不需要添加)
cat <<'EOF' | tee -a /app/kafka/config/zookeeper.properties > /dev/null
### SASL configuration begin ###
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-512
### SASL configuration end ###
EOF
3. 验证命令是否可用
zk_conn=$(awk -F= '/^zookeeper.connect=/ {print $2}' /app/kafka/config/server.properties)
./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=${zk_conn} --list
kafka-configs.sh 命令
1. 修改命令启动配置(将最后一行注释掉,添加一行新的)
# 复制匹配并注释该行
sed -ri '/^exec/h;/^exec/G;s/^(exec)/# \1/' /app/kafka/bin/kafka-configs.sh
# 修改没有注释行
sed -ri 's@^(exec.*) (kafka\.)@\1 -Djava.security.auth.login.config=$(dirname $0)/../config/kafka_jaas.conf \2@' /app/kafka/bin/kafka-configs.sh
2. 添加连接zk sasl配置 (请先确认是否有以下配置,如果有则不需要添加)
cat <<'EOF' | tee -a /app/kafka/config/zookeeper.properties > /dev/null
### SASL configuration begin ###
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-512
### SASL configuration end ###
EOF
3. 验证命令是否可用
zk_conn=$(awk -F= '/^zookeeper.connect=/ {print $2}' /app/kafka/config/server.properties)
./kafka-configs.sh --zookeeper ${zk_conn} --describe --entity-type users
kafka-reassign-partitions.sh 命令
1. 修改命令启动配置(将最后一行注释掉,添加一行新的)
# 复制匹配并注释该行
sed -ri '/^exec/h;/^exec/G;s/^(exec)/# \1/' /app/kafka/bin/kafka-reassign-partitions.sh
# 修改没有注释行
sed -ri 's@^(exec.*) (kafka\.)@\1 -Djava.security.auth.login.config=$(dirname $0)/../config/kafka_jaas.conf \2@' /app/kafka/bin/kafka-reassign-partitions.sh
2. 添加连接zk sasl配置 (请先确认是否有以下配置,如果有则不需要添加)
cat <<'EOF' | tee -a /app/kafka/config/zookeeper.properties > /dev/null
### SASL configuration begin ###
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-512
### SASL configuration end ###
EOF
3. 副本重分配 配置
# 修改对应的topic
cat <<EOF | tee /tmp/topic-generate.json > /dev/null
{
"topics": [
{
"topic": "jiaxzeng"
}
],
"version": 1
}
EOF
4. 验证命令是否可用
zk_conn=$(awk -F= '/^zookeeper.connect=/ {print $2}' /app/kafka/config/server.properties)
# broker-list 填写配置文件中 (broker.id) 的值
./kafka-reassign-partitions.sh --zookeeper ${zk_conn} --topics-to-move-json-file /tmp/topic-generate.json --broker-list "1,2,3" --generate
kafka-preferred-replica-election.sh 命令
1. 修改命令启动配置(将最后一行注释掉,添加一行新的)
# 复制匹配并注释该行
sed -ri '/^exec/h;/^exec/G;s/^(exec)/# \1/' /app/kafka/bin/kafka-preferred-replica-election.sh
# 修改没有注释行
sed -ri 's@^(exec.*) (kafka\.)@\1 -Djava.security.auth.login.config=$(dirname $0)/../config/kafka_jaas.conf \2@' /app/kafka/bin/kafka-preferred-replica-election.sh
2. 添加连接zk sasl配置 (请先确认是否有以下配置,如果有则不需要添加)
cat <<'EOF' | tee -a /app/kafka/config/zookeeper.properties > /dev/null
### SASL configuration begin ###
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-512
### SASL configuration end ###
EOF
3. 编写 /tmp/prefered.json 待选举的partition文件
cat <<EOF | tee /tmp/prefered.json >>/dev/null
{
"partitions": [
{ "topic": "test01", "partition": 0},
{ "topic": "test01", "partition": 2}
]
}
EOF
4. 验证命令是否可用
zk_conn=$(awk -F= '/^zookeeper.connect=/ {print $2}' /app/kafka/config/server.properties)
./kafka-preferred-replica-election.sh --zookeeper ${zk_conn} --path-to-json-file /tmp/prefered.json
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2022-03-08 Kafka常用命令
2022-03-08 安装Kafka