Kafka单机到集群- 自动化- SSL以及全部配置文件 作者精选

这篇具有很好参考价值的文章主要介绍了Kafka单机到集群- 自动化- SSL以及全部配置文件 作者精选。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

综述

本文实现kafka集群的配置和启动过程。并将脚本自动化,使得通用性、独立性更强。

用途

  1. 1⃣️实现kafka集群从配置到启动
    
    # 可顺序执行ca.sh、ca2.sh、congfig.sh完成kafka的SSL&&配置文件更新。
    
        核心内容
        常见问题和解决方案(含快捷命令)、配置文件内容的填充、常量化配置到变量化实现。
        
        主要文件
        1. ca.sh 准备本地所需文件
        2. ca2.sh 同步集群所需文件
        3. config.sh 自动配置kafka文件
    2⃣️脚本通用、独立。可复用 or 二次开发 实现SSL配置或中间件全局配置文件生成。

参考资料

kafka官方文档:包含安装部署、配置项、api使用等详细信息

附件:Kafka并不难学!:入门、进阶、商业实战 (邓杰):包含kafka入门和linux快捷操作等系统化认识的内容。

SSL基本概念 & 目的效果

名词 文件名 备注
证书 ca-cert 含公钥,为便于理解,以下称证书为公钥
密钥 ca-key 用于生成客户端的公钥签名
公钥签名 cert-signed 公钥+密钥获得
信任库 server.truststore.jks
client.truststore.jks
验证服务器证书的合法性。
客户端在SSL握手过程中使用。
密钥库 server.keystore.jks 服务器会从密钥库中提取自己的证书发送给客户端,以证明服务器的身份。

单节点

服务器
密钥库server.keystore.jks​​
- 公钥ca-cert

客户端
信任库client.truststore.jks​​
- 公钥ca-cert
密钥库server.keystore.jks​​
- 公钥ca-cert
- 公钥签名cert-signed

三节点 & 目的效果🚩

服务器52
server.keystore.jks
- 公钥ca-cert_52
客户端52
信任库client.truststore.jks​​
- 公钥ca-cert_52
- 公钥ca-cert_53
- 公钥ca-cert_54
密钥库server.keystore.jks​​
- 公钥ca-cert_52 
- 公钥签名cert-signed_52
- 公钥ca-cert_53
- 公钥签名cert-signed_54
- 公钥ca-cert_54
- 公钥签名cert-signed_54

其中,公钥ca-cert_52写了2次,实际只需导入一次

执行脚本

注意:变量server_id使用自动获取本机第一个IP尾号,小概率会造成server_id冲突

单节点 ca.sh

创建ssl文件目录及其脚本

注意⚠️

  • 检查路径变量值、密码值。后续输入密码尽可能与变量相同。

集群预注意事项

  1. 变量在3个文件中重复定义,修改需要全修改

执行流程

ca_path="/data/ddos/ca"
cd $ca_path && vi ca.sh
#! /bin/bash

# 变量
server_id=$(hostname -I | cut -d ' ' -f 1 | awk -F '.' '{print $NF}')
passwd="123456"
a_name=kafkaserver$server_id.transfar.com
kafka_config_path=/data/ddos2/kafka/config/server.properties
config_line="ssl.endpoint.identification.algorithm="
search_result=$(grep "^${config_line}" $kafka_config_path)

# 1、启用HTTPS协议
source ~/.bash_profile
echo "***********************启用HTTPS协议***********************"
if [ -z "$search_result" ]; then
    # 如果配置行不存在,则添加配置并注释启用HTTPS协议
    echo "Adding HTTPS configuration to $kafka_config_path"
    echo "# 启用HTTPS协议" >> $kafka_config_path
    echo "${config_line}HTTPS" >> $kafka_config_path
elif [ "$search_result" == "${config_line}HTTPS" ]; then
    echo "HTTPS configuration is already set. Skipping..."
else
    echo "请检查https协议配置,路径:$kafka_config_path"
    exit 1
fi

# 2、创建所需文件
	# 创建密钥库、公钥、私钥
echo "***********************创建密钥库、公钥、私钥***********************"
keytool -keystore server.keystore.jks -alias $a_name -validity 3650 -genkey -keyalg RSA -ext SAN=DNS:transfar.com,DNS:dn1,DNS:dn2,DNS:dn3
openssl req -new -x509 -keyout ca-key_$server_id -out ca-cert_$server_id -days 3650
	# 生成公钥签名文件
echo "***********************生成公钥签名***********************"
keytool -keystore server.keystore.jks -alias $a_name -certreq -file cert-file_$server_id
openssl x509 -req -CA ca-cert_$server_id -CAkey ca-key_$server_id -in cert-file_$server_id -out cert-signed_$server_id -days 3650 \
-CAcreateserial -passin pass:$passwd

# 3、导入所需文件  如果是集群部署需要注释该步骤,以便ca2.sh批量执行。。
	# 导入信任库
echo "***********************导入信任库***********************"
keytool -keystore client.truststore.jks -alias CAROOT_$server_id -import -file ca-cert_$server_id
keytool -keystore server.truststore.jks -alias CAROOT_$server_id -import -file ca-cert_$server_id
	# 导入密钥库
echo "***********************导入密钥库***********************"
keytool -keystore server.keystore.jks -alias CAROOT_$server_id -import -file ca-cert_$server_id
keytool -keystore server.keystore.jks -alias $a_name -import -file cert-signed_$server_id
sh ca.sh

执行过程的操作有:2次密码、6次回车、y、回车、2次密码、7次回车、密码

kafka配置ssl,kafka,自动化,ssl,zookeeper,java,分布式,spring cloud

验证结果

  • 集群版:7个文件

    [root@localhost ca]# ll
    总用量 28
    -rw-r--r--. 1 root root 1220 3月  22 21:42 ca-cert_52
    -rw-r--r--. 1 root root   17 3月  22 21:42 ca-cert_52.srl
    -rw-r--r--. 1 root root 1834 3月  22 21:42 ca-key_52
    -rw-r--r--. 1 root root 2328 3月  22 21:40 ca.sh
    -rw-r--r--. 1 root root 1097 3月  22 21:42 cert-file_52
    -rw-r--r--. 1 root root 1159 3月  22 21:42 cert-signed_52
    -rw-r--r--. 1 root root 2298 3月  22 21:42 server.keystore.jks
    [root@localhost ca]# 
    
  • 单机版:7 + client.truststore.jks

集群 ca2.sh

注意⚠️

检查路径变量值、密码值。

执行流程

  1. 执行ca.sh
  1. 执行ca2.sh

    ca_path="/data/ddos/ca"
    cd $ca_path && vi ca2.sh
    
    #! /bin/bash
    
    # 变量
    passwd="123456"
    ca_path="/data/ddos/ca"
    
    
    # 1、同步公共文件
    echo "***********************同步集群客户端文件***********************"
    for i in dn1 dn2 dn3; do
        rsync -avz $ca_path/ca-cert_*  $ca_path/cert-signed_*  "root@$i:$ca_path/"
    done
    
    # 2、导入所需文件
    	# 导入ca-cert_*
    for cert_file in $(find . -name 'ca-cert_*' ! -name '*.srl'); do
        cert_file_base=$(basename "$cert_file")
        alias="CAROOT_${cert_file_base#ca-cert_}"
            keytool -keystore client.truststore.jks -alias $alias -import -file "$cert_file" -noprompt -storepass $passwd
            keytool -keystore server.keystore.jks -alias CAROOT_${cert_file_base#ca-cert_} -import -file ./ca-cert_53 -noprompt -storepass $passwd
    done
    	# 导入ca-signed_*
    for signed_file in $(find . -name 'cert-signed_*'); do
        signed_base=$(basename "$signed_file")
        alias="ddos-server_${signed_base#cert-signed_}.transfar.com"
            keytool -keystore server.keystore.jks -alias $alias -import -file $signed_base -noprompt -storepass $passwd
    done
    
    sh ca2.sh
    

验证结果

15个文件 + 10个导入

  1. 验证文件 共16个文件

    sent 194 bytes  received 12 bytes  9.16 bytes/sec
    total size is 7,188  speedup is 34.89
    keytool 错误: java.lang.Exception: 证书未导入, 别名 <CAROOT_54> 已经存在
    keytool 错误: java.lang.Exception: 证书未导入, 别名 <CAROOT_54> 已经存在
    证书已添加到密钥库中
    证书已添加到密钥库中
    证书已添加到密钥库中
    证书已添加到密钥库中
    证书已添加到密钥库中
    证书已添加到密钥库中
    证书已添加到密钥库中
    [root@test ca]# ll
    总用量 72
    -rw-r--r--. 1 root root 1060 3月  23 16:08 ca2.sh
    -rw-r--r--. 1 root root 1220 3月  23 16:04 ca-cert_52
    -rw-r--r--. 1 root root   17 3月  23 16:04 ca-cert_52.srl
    -rw-r--r--. 1 root root 1220 3月  23 16:04 ca-cert_53
    -rw-r--r--. 1 root root   17 3月  23 16:04 ca-cert_53.srl
    -rw-r--r--. 1 root root 1220 3月  23 16:04 ca-cert_54
    -rw-r--r--. 1 root root   17 3月  23 16:04 ca-cert_54.srl
    -rw-r--r--. 1 root root 1834 3月  23 16:04 ca-key_54
    -rw-r--r--. 1 root root 2290 3月  23 15:59 ca.sh
    -rw-r--r--. 1 root root 1091 3月  23 16:04 cert-file_54
    -rw-r--r--. 1 root root 1159 3月  23 16:04 cert-signed_52
    -rw-r--r--. 1 root root 1159 3月  23 16:04 cert-signed_53
    -rw-r--r--. 1 root root 1159 3月  23 16:04 cert-signed_54
    -rw-r--r--. 1 root root 2711 3月  23 16:08 client.truststore.jks
    -rw-r--r--. 1 root root 8328 3月  23 16:08 server.keystore.jks
    [root@test ca]# 
    
  2. 验证密钥库和信任库

    共3+7个条目

    passwd=123456
    # 3个条目
    keytool -list -v -keystore client.truststore.jks -noprompt -storepass $passwd
    # 7个条目:3个签名,4个证书
    keytool -list -v -keystore server.keystore.jks -noprompt -storepass $passwd
    

    kafka配置ssl,kafka,自动化,ssl,zookeeper,java,分布式,spring cloud

自动配置 & 启动kakfa

config_kafka.sh

注意⚠️

  1. 检查路径变量值、密码值。
  2. 配置文件已被备份

执行流程

  # 备份原配置文件
config_file="/data/ddos2/kafka/config/server.properties"
cp $config_file ${config_file}.back
 # 编辑config_kafka.sh脚本
cd /data/ddos2/kafka
vi config_kafka.sh
#!/bin/bash

  # 变量定义
server_ip=$(hostname -I| cut -d ' ' -f 1)
server_id=$(hostname -I | cut -d ' ' -f 1 | awk -F '.' '{print $NF}')
config_file="/data/ddos2/kafka/config/server.properties"
log_dirs="/data/ddos2/kafka/logs"
keystore_path="/data/ddos/ca"
dn1=dn1
dn2=dn2
dn3=dn3
passwd="123456"
		# advertised.listeners端口的变量
plain_port=$((9092 + server_id))
ssl_port=$((9192 + server_id))


  # 检查配置文件是否存在
if [ ! -f "$config_file" ]; then
echo "######### server.properties配置文件不存在,请检查变量是否正确。 #########"
exit 1
fi

  # 覆盖配置文件
cat > $config_file <<EOF
  ############################# Kafka 基本配置 #############################

  # 唯一id
broker.id=$server_id
  # 设置磁盘 IO 请求线程数
num.io.threads=20
  # 设置 Zookeeper 的连接地址
zookeeper.connect=$dn1:2181,$dn2:2181,$dn3:2181
  # 设置 Zookeeper 连接超时时间
zookeeper.connection.timeout.ms=60000
  
  ############################# Topic 配置 #############################

  # topic数据路径
log.dirs=$log_dirs
  # 默认分区数
num.partitions=10
  # 设置 Kafka 的副本数
default.replication.factor=3
  # 设置 Kafka 的日志段大小
log.segment.bytes=1073741824
  # 允许删除主题
delete.topic.enable=true
  # 允许自动创建 Topic
auto.create.topics.enable=true
  # 设置主题保留时间
log.retention.hours=168
  # 不允许 Unclean Leader 选举。
unclean.leader.election.enable=false
  # 不允许定期进行 Leader 选举。
auto.leader.rebalance.enable=false
  # 当生产者将 acks 设置为 "all"(或"-1")时,此配置指定必须确认写入的副本的最小数量,才能认为写入成功
min.insync.replicas=1

############################# 网络 配置 #############################

  # 设置网络请求处理线程数
num.network.threads=10
  # 设置发送 buffer 字节数
socket.send.buffer.bytes=1024000
  # 设置收到 buffer 字节数
socket.receive.buffer.bytes=1024000
  # 设置最大请求字节数
socket.request.max.bytes=1048576000

############################# SSL 配置  #############################
  
    # 开启 SSL
ssl.endpoint.identification.algorithm=
        # 客户端连接的方式和客户端地址 :9092指任意ip的9092端口
listeners=PLAINTEXT://:$plain_port,SSL://:$ssl_port
        # 外网 IP 或域名 ,建议设置为负载均衡器的公共IP地址和端口,并且 IP不能为空,而listeners配置则对应于Kafka实例的内部网络接口。
# advertised.listeners=PLAINTEXT://$dn3:9092,SSL://$dn2:9093
advertised.listeners=PLAINTEXT://$server_ip:$plain_port,SSL://$server_ip:$ssl_port
        # 密钥库文件路径
ssl.keystore.location=$keystore_path/server.keystore.jks
        # 密钥库密码
ssl.keystore.password=$passwd
        # 信任库文件路径
ssl.truststore.location=$keystore_path/server.truststore.jks
        # 密钥库密码
ssl.truststore.password=$passwd
        # 密钥密码
ssl.key.password=$passwd
        # 客户端也需要开启认证
ssl.client.auth=required

EOF
echo "修改成功
查看配置: cat config/server.properties
启动kafaka:source ~/.bash_profile
kafka-server-start.sh $KAFKA_HOME/config/server.properties &"

启动验证

sh config_kafka.sh
source ~/.bash_profile
kafka-server-start.sh $KAFKA_HOME/config/server.properties &

常见问题 & 解决方案

1     linux环境变量和DNS解析问题

  • 问题

    无法解析主机名dn1

    找不到命令kafka-server-start.sh

参考pdf,属于安装部署Kafka && linux技巧提升的内容。本文不再赘述。

2    👍Debug思路

debug:遇到报错,看所在语句。

kafka配置ssl,kafka,自动化,ssl,zookeeper,java,分布式,spring cloud

🔧工具补充

剪贴板📋

        常用命令的粘贴工具

Windows:win+v

mac:paste(很好用)

如果是没用命令,可以yum install -y < tool_name >一下,不再赘述。

3     🥳🥳🥳SSL核心配置

故障现象​​

52号机器弹窗太快

kafka配置ssl,kafka,自动化,ssl,zookeeper,java,分布式,spring cloud

# 只能kill
kill -9 $(jps | grep Kafka | awk '{print $1}')

解决方案

​advertised.listeners​配置项宣布对外(外网和其他客户端)端口,需要使用负载均衡或简单均衡。这里仅简单均衡并配置自动化书修改advertised.listeners​项脚本。

  1. 方案一:添加负载均衡IP和port(kafka建议)
  2. 方案二:简单均衡

    server_id plain_port ssl_port
    52 9092 9093
    53 9094 9095
    54 9096 9097
  3. # 改造内容
        # 开启 SSL
    ssl.endpoint.identification.algorithm=
            # 客户端连接的方式和客户端地址 :9092指任意ip的9092端口
    listeners=PLAINTEXT://:$plain_port,SSL://:$ssl_port
    advertised.listeners=PLAINTEXT://$server_ip:$plain_port,SSL://$server_ip:$ssl_port

​​​​​​​

文章生成过程

最先是pdf笔记,然后是集群的SSL配置比较复杂,整理成子文件SSL思路,后总结升级为实践文档,并开源笔记。文章来源地址https://www.toymoban.com/news/detail-850354.html

到了这里,关于Kafka单机到集群- 自动化- SSL以及全部配置文件 作者精选的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自动化测试之selenium的chromedriver安装、配置的全部问题详解(保姆级教程)

    因为对自动化测试很感兴趣,本人研究了好一段时间相关selenium的东西,在配置chromedriver的过程中遇到了很多问题,当即在网上找了很多资料,看了很多的文章,可是由于文章太过琐碎(或者说以我的知识理解能力感觉说的都不是很详细),很久都没能解决问题,这导致我学

    2024年02月04日
    浏览(32)
  • acme自动化---免费SSL证书申请并自动续期

    acme.sh 仓库地址:acme.sh acme.sh 中文说明:官方中文说明 各个 dnsapi 说明:dnsapi 安装 acme,后面my@example.com换成自己的邮箱 如果上面官方下载地址失败 或者 太慢,可以选用国内的备用地址 然后在 root 目录下 ls -a 就可以看到有一个 .acme.sh 的文件夹,进入后里面有个 account.conf

    2023年04月13日
    浏览(28)
  • 微服务自动化.跨主机集群

    bridge模式 host模式 自定义网络 Container模式 None模式 二、跨主机通信 Docker默认的网络环境下 , 单台主机上的 Docker 容器可以通过 docker0 网桥直接通信 , 而不同主机上 的Docker 容器之间只能通过在主机上做端口映射进行通信。 这种端口映射方式对很多集群应用来说极不方便。 如

    2024年02月02日
    浏览(36)
  • 申请Let‘s Encrypt免费SSL证书、自动化续签证书

    安装证书的环境为 Centos + Nginx ,如果没有安装Nginx则需要先安装。 1、开放 80 和 443 端口 2、安装 certbot 使用certbot工具能够很方便的申请和续签let’s encript证书。 3、执行命令 站点目录:html文件保存位置,只需要到文件夹即可。 比如index.html在/www/a/b/index.html,则这里只要取

    2024年02月08日
    浏览(32)
  • 微服务自动化 etcd集群搭建

    它需要开多个虚拟机 那我们就找到你使用的那个虚拟机复制 (强调两个主机都已经安装好了etcd服务并且能够正常运行) 不是复制就可以使用 我们需要把里面的不是vmdk和vmx的文件删了     然后再回到我们的虚拟机,鼠标右键选择打开   然后启动虚拟机它会提示我们是否已

    2024年01月17日
    浏览(27)
  • 【Ambari】Ansible自动化部署大数据集群

    目录 一.版本说明和介绍信息 1.1 大数据组件版本 1.2 Apache Components 1.3 Databases支持版本 二.安装包上传和说明 三.服务器基础环境配置 3.1global配置修改 3.2主机名映射配置 3.3免密用户名密码配置 3.4 ansible安装 四. 安装Ambari-server 4.1 安装ambari-server 4.2 检查REPO源 五、HDP 安装

    2024年04月15日
    浏览(53)
  • 37 | Kafka & ZMQ:自动化交易流水线

    在进行这节的学习前,我们先来回顾一下,前面三节,我们学了些什么。 第 34 讲,我们介绍了如何通过 RESTful API 在交易所下单;第 35 讲,我们讲解了如何通过 Websocket ,来获取交易所的 orderbook 数据;第 36 讲,我们介绍了如何实现一个策略,以及如何对策略进行历史回测。

    2024年01月16日
    浏览(37)
  • 自动化测试:5分钟了解Selenium以及如何提升自动化测试的效果

    在快节奏的技术世界里,自动化测试已经成为确保 Web 应用程序质量和性能的重要手段。自动化测试不仅加快了测试过程,还提高了测试的重复性和准确性。Selenium,作为领先的自动化测试工具之一,为测试人员提供了强大的功能来模拟用户在 Web 浏览器中的行为。在本文中

    2024年01月20日
    浏览(33)
  • 【Python】实现公章自动化生成以及自动盖章效果

    前言:因为工作中需要经常自己盖章到模板图片上然后去打印签名,每次基本都是一个重复循环的过程,遂探索是否可以变成自动化脚本供我提高工作效率,同时在这次编码中我也使用chatgpt帮我实现一些代码,整个功能开发的过程非常快。 patr1: 【实现贴图盖章的功能】 原理

    2024年02月12日
    浏览(42)
  • K8S自动化运维容器化(Docker)集群程序

    1.什么是K8S K8S全程为Kubernetes,由于K到S直接有8个字母简称为K8S。 版本:目前一般是1.18~1.2.0,后续可能会到1.24-1.26,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.27 官网:https://kubernetes.io GitHub:GitHub - kubernetes/kubernetes: Production-Grade Container Schedul

    2024年02月10日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包