JDK、Nginx、Kafka、Zookeeper安装部署
- 电脑硬件
- 2025-09-04 21:54:02

原来项目用到的版本比较低了,趁项目升级,计划升级下相关版本。
下载地址zookeeper 3.9.3 下载地址 kafka 3.9.0 下载地址 nginx 1.17.8 下载地址
Nginx 安装这部分相比较简单,之前文件章也有描述,Linux的安装过程请参看之前博客内容: blog.csdn.net/xuxiannian/article/details/95967766 windows安使用,只需去Nginx官网下载包,解压即可使用。 便于一键安装的脚本已写好,拿去~~
#!/bin/bash #Nginx版本 NGINX_VERSION="1.20.2" #安装目录 NGINX_INSTALL_HOME="/data/install" #中间件目录 NGINX_HOME="/usr/local/nginx" if [ -d ${NGINX_HOME} ];then echo "delete old exist Nginx ..." sleep 2 rm -rf ${NGINX_HOME} fi if [!-d ${NGINX_INSTALL_HOME}]; then mkdir ${NGINX_INSTALL_HOME} fi tar -zxvf nginx-${NGINX_VERSION}.tar.gz sleep 2 if [ $? -eq 0 ]; then echo "解压命令执行成功" else echo "解压命令 tar -zxvf nginx-${NGINX_VERSION}.tar.gz, Nginx源码失败,请检查文件是否完整。" exit 1 fi echo "解压Nginx源码文件..." mkdir /data/install sleep 2 mv nginx-${NGINX_VERSION} /data/install echo "======准备安装依赖组件=========" yum install gcc echo "已安装编译器GCC..." yum install pcre-devel echo "已安装表达式支持依赖PCRE库..." yum install zlib zlib-devel echo "已安装支持HTTP响应的GZIP压缩组件...." yum install openssl openssl-devel echo "已安装支持HTTPS(SSL/TLS 加密)、HTTP/2等安全协议组件主库..." echo "=========安装依赖组件库完毕=====" #进入Nginx安装目录 cd /data/install/nginx-${NGINX_VERSION} echo "配置Nginx..." #./configure --prefix=${INSTALL_DIR} --with-http_ssl_module --with-http_v2_module ./configure --with-http_ssl_module --with-http_v2_module if [ $? -ne 0 ]; then echo "配置Nginx失败,请检查依赖是否安装完整。" exit 1 fi # 编译和安装 echo "编译和安装Nginx..." make if [ $? -ne 0 ]; then echo "编译Nginx失败,请检查错误信息。" exit 1 fi sudo make install if [ $? -ne 0 ]; then echo "安装Nginx失败,请检查权限或目录是否正确。" exit 1 fi #设置环境变量 echo ${NGINX_HOME} echo " ">>/etc/profile echo "# Nginx ENV">>/etc/profile echo "NGINX_HOME=${NGINX_HOME}/sbin">>/etc/profile echo 'PATH=$NGINX_HOME/sbin:$PATH'>>/etc/profile echo 'export NGINX_HOME'>>/etc/profile echo 'export CLASSPATH'>>/etc/profile source /etc/profile # 验证安装 echo "验证安装..." ${NGINX_HOME}/nginx -v if [ $? -ne 0 ]; then echo "Nginx安装验证失败,请检查安装过程。" exit 1 fi echo "Nginx安装完成!" JDK安装方便JDK安装,可以将下面脚本保存在one-step-install-jdk.sh中。然后把 jdk-8u144-linux-x64.rpm和该脚本放一个路径下,用命令sh one-step-install-jdk.sh 执行即可 一键安装脚本附上~~~
#安装jdk if [ -e /usr/java ];then echo "delete old exist jdk ..." sleep 2 rm -rf /usr/java rpm -e jdk1.8.0_144-1.8.0_144-fcs.x86_64 echo "install new jdk ..." mkdir /usr/java sleep 2 rpm -ivh jdk-8u144-linux-x64.rpm else mkdir /usr/java rpm -ivh jdk-8u144-linux-x64.rpm fi JDKPATH="jdk1.8.0_144" echo ${JDKPATH} echo " ">>/etc/profile echo "# JDK ENV">>/etc/profile echo "JAVA_HOME=/usr/java/${JDKPATH}">>/etc/profile echo 'PATH=$JAVA_HOME/bin:$PATH'>>/etc/profile echo 'CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar'>>/etc/profile echo 'export JAVA_HOME'>>/etc/profile echo 'export PATH'>>/etc/profile echo 'export CLASSPATH'>>/etc/profile source /etc/profile Zookeeper 安装 解压缩:tar -xvf kafka_2.12-2.0.0.tgz复制配制文件:进入conf目录,cp zoo_sample.cfg zoo.cfg修改配置文件:修改datadir、server.1… dataDir=/data/zookeeper #修改日志文件路径 #修改log4l.properties文件 zookeeper.log.dir=/data/zookeeper/log #修改bin/zkEnv.sh if [ "x${ZOO_LOG_DIR}" = "x" ] then #日志输出路径 不需mkdir zookeeper启动时自动创建 ZOO_LOG_DIR="/data/zookeeper/log" fi # 默认2888端口用于同步数据;3888用于选举 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2889:3889zookeeper 端口说明
2888端口主要用于ZooKeeper集群内部服务器之间的数据同步和通信。在ZooKeeper集群环境中,各个服务器节点(包括Leader和Follower)之间需要频繁地进行数据同步和状态更新,以确保集群的一致性和稳定性。这个过程中,2888端口就作为服务器之间通信的桥梁,承载着数据同步和状态更新的重要任务。具体来说,Leader服务器会监听2888端口,接收来自Follower服务器的数据同步请求,并将最新的数据同步给Follower服务器。 3888端口则用于ZooKeeper集群中的Leader选举过程。在ZooKeeper集群中,如果Leader服务器因为某种原因宕机或失去联系,集群就需要进行Leader选举,以选出一个新的Leader服务器来继续提供服务。这个过程中,3888端口就作为集群内部服务器之间进行投票和通信的通道。服务器节点会通过3888端口向其他节点发送投票信息,并接收其他节点的投票结果,最终根据投票结果来确定新的Leader服务器。 创建myid文件 分别在不同节点上创建myid文件 echo 1 > /data/zookeeper/myid echo 2 > /data/zookeeper/myid echo 3 > /data/zookeeper/myid 启动 bin/zkServer.sh start 也可配成服务启停:systemctl start zookeeper.service vi /systemd/system/zookeeper.service或者目录为 /usr/lib/systemd/system/zookeeper.service [Unit] Description=Startup script for the ZooKeeper daemon Documentation=http://zookeeper.apache.org/ After=network.target remote-fs.target nss-lookup.target [Service] Type=forking ExecStart=/opt/zookeeper-3.4.11/bin/zkServer.sh start ExecReload=/bin/kill -HUP $MAINPID ExecStop=/opt/zookeeper-3.4.11/bin/zkServer.sh stop PrivateTmp=true [Install] WantedBy=multi-user.target Kafka安装 解压缩包:tar -xzf kafka_2.11-2.0.0.tgz修改config/server.properties zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 #kafka的集群就是起多个borker,注意每个borker.id不能一样。如果是在同一个机器上,使用不用的配置文件,其中id,端口号,log目录不能一样。 config/server-1.properties: broker.id=1 listeners=PLAINTEXT://:9093 log.dir=/tmp/kafka-logs-1 config/server-2.properties: broker.id=2 listeners=PLAINTEXT://:9094 log.dir=/tmp/kafka-logs-2 启动kafka 启动kafka nohup bin/kafka-server-start.sh config/server.properties 1>/dev/null 2>&1 & 停止kafka bin/kafka-server-stop.sh 小Tip:1>/dev/null 2>&1 &这个组合指令的意思是:将命令的标准输出和标准错误都重定向到/dev/null(即丢弃所有输出),并将该命令置于后台执行。这通常用于运行不需要任何输出且不希望干扰当前终端会话的长时间运行任务。 kafka、Zookeeper 一步安装脚本便于安装又没用容器化部署,下面脚本可以微调下IP、路径可直接用
#安装jdk #!/bin/bash # 配置区域(根据实际情况修改) ############################################################ JAVA_VERSION="8" # Java版本 ZOOKEEPER_VERSION="3.9.3" # ZooKeeper版本 KAFKA_VERSION="3.9.0" # Kafka版本 SCALA_VERSION="2.12" # Scala版本 INSTALL_DIR="/data/install" # 安装目录 CLUSTER_NODES=("192.168.1.152" "192.168.1.115" "192.168.1.168") # 集群节点列表(hostname或IP) ZOOKEEPER_PORT_BASE=2181 # ZooKeeper端口基准 KAFKA_PORT=9092 # Kafka端口基准 USER="appuser" # 运行服务的用户 LOCAL_IP="1192.168.1.115" ZOOKEEPER_HOME="/data/server/zookeeper3.9.3" KAFKA_HOME="/data/server/kafka2.12-3.9.0" ############################################################ # 配置zookeeper setup_zookeeper(){ echo "正在部署Zookeeper集群..." tar -xvf /data/software/apache-zookeeper-${ZOOKEEPER_VERSION}-bin.tar.gz -C $INSTALL_DIR mkdir -p $ZOOKEEPER_HOME ln -s $INSTALL_DIR/apache-zookeeper-${ZOOKEEPER_VERSION}-bin $ZOOKEEPER_HOME echo "解压缩Zookeeper源码文件.." #生成集群配置 mkdir -p $ZOOKEEPER_HOME/{data,logs} chown -R $USER:$USER $ZOOKEEPER_HOME #定义配置文件为本地变量 local zk_cfg="$INSTALL_DIR/apache-zookeeper-${ZOOKEEPER_VERSION}-bin/conf/zoo.cfg" cp $INSTALL_DIR/apache-zookeeper-${ZOOKEEPER_VERSION}-bin/conf/zoo_sample.cfg $zk_cfg #直接修改配置文件的LOG路径 sed -i "s|dataDir=/tmp/zookeeper|dataDir=${ZOOKEEPER_HOME}/data|" $zk_cfg echo "dataLogDir=$ZOOKEEPER_HOME/logs" >> $zk_cfg # 添加集群节点配置 echo "集群节点配置:" for i in "${!CLUSTER_NODES[@]}"; do local node_id=$((i+1)) #echo "server.$node_id=${CLUSTER_NODES[i]}:$((2888)):$((3888))" >> $zk_cfg echo "server.$node_id=${CLUSTER_NODES[i]}:2888:3888" >> $zk_cfg # 生成myid文件(如果是当前节点) if [[ "${CLUSTER_NODES[i]}" == "$(hostname)" ]] || [[ "${CLUSTER_NODES[i]}" == "$LOCAL_IP" ]]; then echo $node_id > $ZOOKEEPER_HOME/data/myid fi done # 配置环境变量 echo "export ZOOKEEPER_HOME1=$INSTALL_DIR/apache-zookeeper-${ZOOKEEPER_VERSION}-bin" >> /etc/profile echo 'export PATH=$PATH:${ZOOKEEPER_HOME1}/bin' >> /etc/profile } # 配置Kafka集群 setup_kafka() { echo "正在部署Kafka集群..." tar -xzf /data/software/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz -C $INSTALL_DIR mkdir -p $KAFKA_HOME ln -s $INSTALL_DIR/kafka_${SCALA_VERSION}-${KAFKA_VERSION} $KAFKA_HOME # 生成集群配置 mkdir -p $KAFKA_HOME/logs chown -R $USER:$USER $KAFKA_HOME local kafka_cfg="$INSTALL_DIR/kafka_${SCALA_VERSION}-${KAFKA_VERSION}/config/server.properties" local broker_id=$(hostname | grep -oE '[0-9]+' || echo "1"I) #cp $INSTALL_DIR/kafka_${SCALA_VERSION}-${KAFKA_VERSION}/conf/server.properties $kafka_cfg sed -i "s|broker.id=0|broker.id=${broker_id}|" $kafka_cfg sed -i "s|log.dirs=/tmp/kafka-logs|log.dirs=$KAFKA_HOME/logs|" $kafka_cfg sed -i "s|^#listeners=PLAINTEXT://:9092|listeners=PLAINTEXT://$LOCAL_IP:$KAFKA_PORT|" $kafka_cfg # 配置ZooKeeper连接 local zk_connect=$(IFS=,; echo "${CLUSTER_NODES[*]}:${ZOOKEEPER_PORT_BASE}") sed -i "s|localhost:2181|$zk_connect|" $kafka_cfg # 配置副本参数 echo "default.replication.factor=3" >> $kafka_cfg echo "min.insync.replicas=2" >> $kafka_cfg # 配置环境变量 echo "export KAFKA_HOME1=$INSTALL_DIR/kafka_${SCALA_VERSION}-${KAFKA_VERSION}" >> /etc/profile echo 'export PATH=$PATH:${KAFKA_HOME1}/bin' >> /etc/profile } # 创建系统服务文件 create_service() { echo "正在创建系统服务..." # ZooKeeper服务 cat > /etc/systemd/system/zookeeper.service <<EOF [Unit] Description=ZooKeeper Service After=network.target [Service] User=$USER Type=forking Environment="JAVA_HOME=$JAVA_HOME" ExecStart=$INSTALL_DIR/apache-zookeeper-${ZOOKEEPER_VERSION}-bin/bin/zkServer.sh start ExecStop=$INSTALL_DIR/apache-zookeeper-${ZOOKEEPER_VERSION}-bin/bin/zkServer.sh stop Restart=always [Install] WantedBy=multi-user.target EOF # Kafka服务 cat > /etc/systemd/system/kafka.service <<EOF [Unit] Description=Kafka Service After=network.target zookeeper.service [Service] User=$USER Type=simple Environment="JAVA_HOME=$JAVA_HOME" ExecStart=$INSTALL_DIR/kafka_${SCALA_VERSION}-${KAFKA_VERSION}/bin/kafka-server-start.sh $INSTALL_DIR/kafka_${SCALA_VERSION}-${KAFKA_VERSION}/config/server.properties ExecStop=$INSTALL_DIR/kafka_${SCALA_VERSION}-${KAFKA_VERSION}/bin/kafka-server-stop.sh Restart=on-failure [Install] WantedBy=multi-user.target EOF systemctl daemon-reload } # 启动服务 start_services() { echo "正在启动集群服务..." systemctl enable --now zookeeper.service systemctl enable --now kafka.service sleep 5 systemctl status zookeeper.service kafka.service } # 验证安装 verify_installation() { echo -e "\n验证部署结果:" # 检查ZooKeeper状态 echo "[ZooKeeper状态]" $INSTALL_DIR/apache-zookeeper-${ZOOKEEPER_VERSION}-bin/bin/zkServer.sh status 2>/dev/null # 创建测试Topic echo -e "\n[Kafka测试]" local test_topic="test-cluster-topic" $INSTALL_DIR/kafka_${SCALA_VERSION}-${KAFKA_VERSION}/bin/kafka-topics.sh --create \ --bootstrap-server $LOCAL_IP:$KAFKA_PORT \ --replication-factor 3 \ --partitions 1 \ --topic $test_topic # 列出Topic $INSTALL_DIR/kafka_${SCALA_VERSION}-${KAFKA_VERSION}/bin/kafka-topics.sh --list \ --bootstrap-server $LOCAL_IP:$KAFKA_PORT echo -e "\n部署完成!" } main() { mkdir -p /data/install setup_zookeeper setup_kafka create_service start_services verify_installation } main Zookeeper、Kafka鉴权配置Kafka 和 ZooKeeper 的鉴权配置是保障分布式系统安全的重要环节。以下是基于 SASL/PLAIN 机制的开通鉴权详细步骤,涵盖 ZooKeeper 与 Kafka 的配置及验证方法:
一、ZooKeeper 鉴权配置
修改 ZooKeeper 配置文件 在 zoo.cfg 中添加以下参数,启用 SASL 认证:
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider requireClientAuthScheme=sasl jaasLoginRenew=3600000创建 JAAS 认证文件 在 conf 目录下新建 zk_server_jaas.conf,内容示例如下:
Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_kafka="kafka_password"; }; user_kafka 表示用户名为 kafka,密码为 kafka_password。修改启动脚本 编辑 zkServer.sh,在第一行添加 JVM 参数加载 JAAS 文件:
export JVMFLAGS="-Djava.security.auth.login.config=/path/to/zk_server_jaas.conf"启动 ZooKeeper
./zkServer.sh start二、Kafka 鉴权配置
修改 Kafka 配置文件 在 server.properties 中启用 SASL 认证并配置监听地址:
listeners=SASL_PLAINTEXT://0.0.0.0:9092 security.inter.broker.protocol=SASL_PLAINTEXT sasl.enabled.mechanisms=PLAIN sasl.mechanism.inter.broker.protocol=PLAIN zookeeper.set.acl=true # 确保 Kafka 与 ZooKeeper 的通信启用 ACL创建 Kafka JAAS 文件 在 config 目录下新建 kafka_server_jaas.conf,内容示例如下:
KafkaServer { org.apache.kafka mon.security.plain.PlainLoginModule required username="admin" password="admin_password" user_admin="admin_password"; }; Client { org.apache.zookeeper.server.auth.DigestLoginModule required username="kafka" password="kafka_password"; }; Client 部分需与 ZooKeeper 的 zk_server_jaas.conf 用户一致。修改 Kafka 启动脚本 在 kafka-server-start.sh 中添加 JVM 参数:
export KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf"启动 Kafka
./kafka-server-start.sh -daemon config/server.properties三、客户端鉴权配置
生产者与消费者配置 在客户端配置文件(如 producer.properties 或 consumer.properties)中添加:
security.protocol=SASL_PLAINTEXT sasl.mechanism=PLAIN sasl.jaas.config=org.apache.kafka mon.security.plain.PlainLoginModule required username="admin" password="admin_password";命令行测试示例
生产者:./kafka-console-producer.sh --broker-list localhost:9092 --topic test --producer-property security.protocol=SASL_PLAINTEXT --producer-property sasl.mechanism=PLAIN 消费者:./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --consumer-property security.protocol=SASL_PLAINTEXT --consumer-property sasl.mechanism=PLAIN四、高级配置选项
动态用户管理(SCRAM) 若需动态添加用户,推荐使用 SASL/SCRAM 认证,通过 kafka-configs.sh 创建用户,无需重启集群:
./kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=user1_pwd]' --entity-type users --entity-name user1SSL/TLS 加密 结合 SSL 加密通信(如 listeners=SSL://...),需生成证书并配置 server.properties 中的 ssl.keystore.location 和 ssl.truststore.location 参数。
五、验证与监控
ZooKeeper ACL 验证 通过 zkCli.sh 登录并检查节点权限:
./zkCli.sh -server localhost:2181 getAcl /brokers/topicsKafka Eagle 监控工具 配置 Kafka Eagle 的 system-config.properties 文件,启用 SASL 鉴权参数以监控安全集群。
通过上述步骤,即可为 Kafka 和 ZooKeeper 开通鉴权,保障系统安全。若需更复杂的权限控制(如基于 Kerberos 或 Ranger),可参考相关扩展配置。
如何配置Kafka域名访问JDK、Nginx、Kafka、Zookeeper安装部署由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“JDK、Nginx、Kafka、Zookeeper安装部署”