kafka+cmak+kerberos部署配置

news/2024/11/13 9:05:51/文章来源:https://www.cnblogs.com/zyp87/p/18350373

实验环境:(这里都是单机的,集群的,可以正常部署集群,配置一样的)
使用了火山引擎的云服务器(4c8g)
jdk环境是1.8.0_352,后面有雷点,cmak需要用jdk11,这里我去官网扒拉jdk11没找到,所以我通过docker基础镜像制作的
zookeeper的版本是3.7.2
kafka版本是2.0.1(主要是生产也是这个版本,其他版本大同小异)
kerberos版本1.15.1
以上的版本可以自己自由替换,但是cmak和jdk最好还是一致

正式部署步骤:

1、去kakfa官网下载2.0.1

wget https://archive.apache.org/dist/kafka/2.0.1/kafka_2.11-2.0.1.tgz

2、去zookeeper官网下载3.7.2

wget https://dlcdn.apache.org/zookeeper/zookeeper-3.7.2/apache-zookeeper-3.7.2-bin.tar.gz

3、配置好jdk环境

# 我这里就全局配置了,也可以根据部署的用户去配用户级别的环境

vi /etc/profile

export JAVA_HOME=/usr/local/soft/jdk64/jdk-1.8.0_352
export PATH=$JAVA_HOME/bin:$PATH

4、安装zookeeper

tar -zxf apache-zookeeper-3.7.2-bin.tar.gz -C /usr/local/soft
# 单机版的几乎可以不用配置什么了,将conf的zoo_sample.cfg拷贝 修改一下数据目录
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
dataDir=/tmp/zookeeper
/usr/local/soft/apache-zookeeper-3.7.2-bin/zkServer.sh start

5、安装kafka

tar -zxf kafka_2.11-2.0.1.tgz -C /usr/local/soft
# 后面的kafka配置我这里使用两个端口,一个是不需要任何认证的访问端口(9092),一个是使用kdc认证访问的端口(9091)
vi config/server.properties
broker.id=0
listeners=PLAINTEXT://zyp.com:9092,SASL_PLAINTEXT://zyp.com:9091
advertised.listeners=PLAINTEXT://:9092,SASL_PLAINTEXT://:9091

security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=GSSAPI
sasl.enabled.mechanisms=GSSAPI
sasl.kerberos.service.name=kafka
zookeeper.connect=localhost:2181/kafka

 然后编辑一个jaas,配置kdc认证端口
vi config/kafka-server-jaas.conf

KafkaServer {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/etc/security/keytabs/kafka.keytab"
principal="kafka/zyp.com@KAFKA.COM";
};
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/etc/security/keytabs/kafka.keytab"
principal="kafka/zyp.com@KAFKA.COM";
};


# 创建一个软连接
mkdir -m 755 -p /etc/kafka/conf && ln -s /usr/local/soft/kafka_2.11-2.0.1/config/kafka-server-jaas.conf /etc/kafka/conf/kafka-jaas.conf

# kafka启动的时候加入kdc认证配置,并开启kafka的jmx的指标采集端口,放到启动脚本的前面
vi bin/kafka-server-start.sh

export KAFKA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=false -Djava.security.auth.login.config=/etc/kafka/conf/kafka-jaas.conf"
export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=zyp.com -Dcom.sun.management.jmxremote.rmi.port=8096 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.port=8096"

到这里就配置完成了kafka,但是先不要启动服务,还要安装一下kerberos

6、安装kerberos

yum install -y krb5-libs krb5-workstation krb5-server krb5-devel
# 修改/etc/krb5.conf

# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
# renew_lifetime = 7d 这里的这个配要注销,不然会报错java KrbException: Message stream modified (41)
forwardable = true
rdns = false
pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
default_realm = KAFKA.COM
# default_ccache_name = KEYRING:persistent:%{uid} 这里也是,不然klist的时候会报系统用户的uid异常

[realms]
KAFKA.COM = {
kdc = zyp.com
admin_server = zyp.com
}

[domain_realm]
.zyp.com = KAFKA.COM
zyp.com = KAFKA.COM

# 配置kdc的管理用户
vi /var/kerberos/krb5kdc/kadm5.acl
*/admin@KAFKA.COM

# 初始化数据库
kdb5_util create -r KAFKA.COM -s

# 启动服务

systemctl start krb5kdc
systemctl start kadmin

kadmin.local

# 创建管理员
addprinc root/admin@KAFKA.COM # 记录输入的密码
# 创建kafka普通用户
addprinc kafka/zyp.com@KAFKA.COM # 记录输入的密码
# 生成kafka用户的密钥文件

ktadd -k /etc/security/keytabs/kafka.keytab kafka/zyp.com@KAFKA.COM

# 执行票据初始化看看有没有我问题
kinit -kt /etc/security/keytabs/kafka.keytab kafka/zyp.com@KAFKA.COM
klist

# 没有问题后,修改好keytab文件的权限,然后启动kafka

/usr/local/soft/kafka_2.11-2.0.1/bin/kafka-server-start.sh /usr/local/soft/kafka_2.11-2.0.1/config/server.properties # 观察启动是否有报错情况

7、部署cmak

# 首先去GitHub下载cmak
wget https://github.com/yahoo/CMAK/releases/download/3.0.0.6/cmak-3.0.0.6.zip

# 创建一个dockerfile,编辑以下内容
vi dockerfile

FROM openjdk:11

RUN mkdir -p /app/cmak

WORKDIR /app/cmak

COPY . /app/cmak

CMD ["/app/cmak/bin/cmak","-Dconfig.file=/app/cmak/conf/application.conf","-Dapplication.home=/app/cmak","-Dhttp.port=9000"]

 

# 修改application.conf

# Copyright 2015 Yahoo Inc. Licensed under the Apache License, Version 2.0
# See accompanying LICENSE file.

# This is the main configuration file for the application.
# ~~~~~

# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions.
# If you deploy your application to several instances be sure to use the same key!
play.crypto.secret="^<csmm5Fx4d=r2HEX8pelM3iBkFVv?k[mc;IZE<_Qoq8EkX_/7@Zt6dP05Pzea3U"
#play.crypto.secret=${?APPLICATION_SECRET}
play.http.session.maxAge="1h"

# The application languages
# ~~~~~
play.i18n.langs=["en"]

play.http.requestHandler = "play.http.DefaultHttpRequestHandler"
play.http.context = "/"
play.application.loader=loader.KafkaManagerLoader

# Settings prefixed with 'kafka-manager.' will be deprecated, use 'cmak.' instead.
# https://github.com/yahoo/CMAK/issues/713
kafka-manager.zkhosts="192.168.0.2:2181"
#kafka-manager.zkhosts=${?ZK_HOSTS}
cmak.zkhosts="192.168.0.2:2181"
#cmak.zkhosts=${?ZK_HOSTS}

pinned-dispatcher.type="PinnedDispatcher"
pinned-dispatcher.executor="thread-pool-executor"
application.features=["KMClusterManagerFeature","KMTopicManagerFeature","KMPreferredReplicaElectionFeature","KMReassignPartitionsFeature", "KMScheduleLeaderElectionFeature"]

akka {
loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = "INFO"
}

akka.logger-startup-timeout = 60s

basicAuthentication.enabled=false
#basicAuthentication.enabled=${?KAFKA_MANAGER_AUTH_ENABLED}

basicAuthentication.ldap.enabled=false
#basicAuthentication.ldap.enabled=${?KAFKA_MANAGER_LDAP_ENABLED}
basicAuthentication.ldap.server=""
#basicAuthentication.ldap.server=${?KAFKA_MANAGER_LDAP_SERVER}
basicAuthentication.ldap.port=389
#basicAuthentication.ldap.port=${?KAFKA_MANAGER_LDAP_PORT}
basicAuthentication.ldap.username=""
#basicAuthentication.ldap.username=${?KAFKA_MANAGER_LDAP_USERNAME}
basicAuthentication.ldap.password=""
#basicAuthentication.ldap.password=${?KAFKA_MANAGER_LDAP_PASSWORD}
basicAuthentication.ldap.search-base-dn=""
#basicAuthentication.ldap.search-base-dn=${?KAFKA_MANAGER_LDAP_SEARCH_BASE_DN}
basicAuthentication.ldap.search-filter="(uid=$capturedLogin$)"
#basicAuthentication.ldap.search-filter=${?KAFKA_MANAGER_LDAP_SEARCH_FILTER}
basicAuthentication.ldap.group-filter=""
#basicAuthentication.ldap.group-filter=${?KAFKA_MANAGER_LDAP_GROUP_FILTER}
basicAuthentication.ldap.connection-pool-size=10
#basicAuthentication.ldap.connection-pool-size=${?KAFKA_MANAGER_LDAP_CONNECTION_POOL_SIZE}
basicAuthentication.ldap.ssl=false
#basicAuthentication.ldap.ssl=${?KAFKA_MANAGER_LDAP_SSL}
basicAuthentication.ldap.ssl-trust-all=false
#basicAuthentication.ldap.ssl-trust-all=${?KAFKA_MANAGER_LDAP_SSL_TRUST_ALL}

basicAuthentication.username="admin"
#basicAuthentication.username=${?KAFKA_MANAGER_USERNAME}
basicAuthentication.password="xxxxx"
#basicAuthentication.password=${?KAFKA_MANAGER_PASSWORD}

basicAuthentication.realm="Kafka-Manager"
basicAuthentication.excluded=["/api/health"] # ping the health of your instance without authentification


#kafka-manager.consumer.properties.file=${?CONSUMER_PROPERTIES_FILE}
kafka-manager.consumer.properties.file=/app/cmak/conf/consumer.properties

# 修改consumer.properties

security.protocol=SASL_PLAINTEXT
key.deserializer=org.apache.kafka.common.serialization.ByteArrayDeserializer
value.deserializer=org.apache.kafka.common.serialization.ByteArrayDeserializer
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka

# 增加jaas.config配置
vi jaas.config

 KafkaClient{

com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/app/cmak/conf/kafka.keytab"
principal="kafka/zyp.com@KAFKA.COM"
serviceName="kafka"
doNotPrompt=true;
};
Client {
// Noauthentication required
};

 

 # 由于zookeeeper没有开启认证,所以创建一个空模块Client就好

 # 将kafka.keytab和krb5.conf配置文件拷贝到当前的conf中去

8、构建cmak的docker镜像

 docker build -t cmak_kcd:v1 . && docker run -itd --name cmak_kdc -p 9000:9000 cmak_kdc:v1 && docker exec -it cmak_kdc /bin/bash
# 由于我用了域名,说有我还要进入容器加上域名配置
echo "192.168.0.2 zyp.com" >> /etc/hosts

9、开始添加kafka集群信息

http://192.168.0.2:9001/
# 输入账号密码登录
# 添加集群

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/781861.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AtCoder Regular Contest 182

原来第二题比第一题简单吗😢 A.Chmax Rush! \(\texttt{Diff 1110}\)给定三个序列 \(S,P,V\),其中 \(S\) 的长度为 \(N\),\(P,V\) 的长度为 \(Q\),按从小到大的顺序对每个 \(i\in[1,Q]\) 执行下述操作: 在 \([1,P_{i}]\) 和 \([P_{i},N]\) 中选择一个区间,要求其中所有的…

「代码随想录算法训练营」第三十五天 | 动态规划 part8

121. 买卖股票的最佳时机题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ 文章讲解:https://programmercarl.com/0121.买卖股票的最佳时机.html 题目难度:简单 视频讲解:https://www.bilibili.com/video/BV1Xe4y1u77q 题目状态:有一半的思路思路…

【GeoScene】三、GeoScene Enterprise 3.1 在银河麒麟V10上安装部署

前言: 哈哈哈,想到什么就写什么了,没有顺序可言 系统要求:性能越高越好😆😆 然后是下载安装包、连接服务器、上传文件就不写了吧,这些应该都会吧 许可让公司商务找易智瑞的售前申请 一、环境准备 1、关闭防火墙(可选) 停止防火墙:systemctl stop firewalld.service…

yum网络源的配置

yum 的原理 yum 的全称是 Yellow dog Updater,Modified,yum 是 CentOS 或者是 RedHat 中最常见的包管理器。早期的 Linux 发行版安装软件包要解决软件包的依赖问题,这些依赖的问题需要人工手动解决,通常是需要安装的软件有多个依赖,依赖又有其他的依赖所以自行手动安装很麻…

网络划分

视频 子网划分 用 子网掩码 子网掩码 = 网络位 + 主机位 ip地址自然分类127.0.0.1理解为什么进行子网划分 掌握怎么进行子网划分

谷歌浏览器降级的方法-及chromedriver 下载文件

为了适配python selenium 使用 chromedriver 对应当前谷歌浏览器,降级 https://www.chromedownloads.net/chrome64win/#google_vignette 这个地址为谷歌浏览器老版本的地址http://chromedriver.storage.googleapis.com/index.html 这个地址为谷歌浏览器对应的 chromedriver 的…

记录兼职运维的一天

不以物喜,不以己悲,挣钱为主1.背景 7月底部门的运维大哥离职了,奈何又没有新运维接替,至于为什么没有补位,懂得都懂,按老大的意思是先让开发一人顶一块,8月底争取补上。 打心底我有点排斥这事,但是人到中年又有什么办法呢,上有老下有小,唯有苟。 分派给我的部分是服务…

Teamcenter数据库-获取组别

1、select pg.*,isnull(pn.PIPL10N_NAME_4,pn_EN.PIPL10N_NAME_4) cn_group_name fromPPOM_GROUP pgleft joinPL10N_NAME pn on pg.puid = pn.puid and pn.PIPL10N_NAME_7 = ZH_CNleft joinPL10N_NAME pn_EN on pg.puid = pn_EN.puid and pn_EN.PIPL10N_NAME_7 = EN_US

预见未来科技,尽在指尖滑动间——手机产品模型可视化

在这个日新月异的数字时代,手机已不仅仅是通讯工具,它更是我们生活方式的延伸,是连接世界的窗口,是创意与科技的完美结晶。想象一下,在浩瀚的数字海洋中,一款尚未面世的手机,通过高精度的3D建模技术,以逼真无比的方式展现在你眼前。屏幕上的每一个像素都跃动着生命的活…

数据可视化是什么?带你了解各行业看板!

数据可视化是一种通过图形化手段将数据呈现出来的技术,它将复杂的数据和信息转化为易于理解的图表、地图、仪表盘等视觉元素,使得数据的模式、趋势和关系更加直观地展现出来。通过数据可视化,用户可以快速识别重要信息、发现潜在问题,并做出数据驱动的决策。这种技术不仅提…

Jenkins+gitlab+harbor+docker-compose自动化部署配置

本文主要讲解Jenkins在Linux环境下实现自动化部署项目(提供一种思路) 持续集成与持续部署(CI/CD)流程的实现,需要依赖一系列先进的工具和技术。这些工具不仅提高了开发效率,还确保了代码质量和发布的可靠性。以下是构建CI/CD流程所需的关键工具列表及其作用概述:Jenkins…

手把手教你实现Scrapy-Redis分布式爬虫:从配置到最终运行的实战指南

本文详细讲解了如何通过Scrapy-Redis实现分布式爬虫的全过程,涵盖配置步骤、代码实现以及最终运行的效果展示。通过实战操作,帮助读者快速掌握Scrapy-Redis在分布式爬虫中的应用技巧。1.scrapy-redis的环境准备 pip install scrapy-redis安装完毕之后确保其可以正常导入使用即…