当前位置: 首页 > article >正文

JDK、Nginx、Kafka、Zookeeper安装部署

原来项目用到的版本比较低了,趁项目升级,计划升级下相关版本。

下载地址

zookeeper 3.9.3 下载地址
kafka 3.9.0 下载地址
nginx 1.17.8 下载地址

Nginx 安装

这部分相比较简单,之前文件章也有描述,Linux的安装过程请参看之前博客内容:https://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:3889

zookeeper 端口说明

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 鉴权配置

  1. 修改 ZooKeeper 配置文件
    zoo.cfg 中添加以下参数,启用 SASL 认证:

    authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
    requireClientAuthScheme=sasl
    jaasLoginRenew=3600000
    
  2. 创建 JAAS 认证文件
    conf 目录下新建 zk_server_jaas.conf,内容示例如下:

    Server {
        org.apache.zookeeper.server.auth.DigestLoginModule required
        user_kafka="kafka_password";
    };
    
    • user_kafka 表示用户名为 kafka,密码为 kafka_password
  3. 修改启动脚本
    编辑 zkServer.sh,在第一行添加 JVM 参数加载 JAAS 文件:

    export JVMFLAGS="-Djava.security.auth.login.config=/path/to/zk_server_jaas.conf"
    
  4. 启动 ZooKeeper

    ./zkServer.sh start
    

二、Kafka 鉴权配置

  1. 修改 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
    
  2. 创建 Kafka JAAS 文件
    config 目录下新建 kafka_server_jaas.conf,内容示例如下:

    KafkaServer {
        org.apache.kafka.common.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 用户一致。
  3. 修改 Kafka 启动脚本
    kafka-server-start.sh 中添加 JVM 参数:

    export KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf"
    
  4. 启动 Kafka

    ./kafka-server-start.sh -daemon config/server.properties
    

三、客户端鉴权配置

  1. 生产者与消费者配置
    在客户端配置文件(如 producer.propertiesconsumer.properties)中添加:

    security.protocol=SASL_PLAINTEXT
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin_password";
    
  2. 命令行测试示例

    • 生产者
      ./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
      

四、高级配置选项

  1. 动态用户管理(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 user1
    
  2. SSL/TLS 加密
    结合 SSL 加密通信(如 listeners=SSL://...),需生成证书并配置 server.properties 中的 ssl.keystore.locationssl.truststore.location 参数。


五、验证与监控

  1. ZooKeeper ACL 验证
    通过 zkCli.sh 登录并检查节点权限:

    ./zkCli.sh -server localhost:2181
    getAcl /brokers/topics
    
  2. Kafka Eagle 监控工具
    配置 Kafka Eagle 的 system-config.properties 文件,启用 SASL 鉴权参数以监控安全集群。


通过上述步骤,即可为 Kafka 和 ZooKeeper 开通鉴权,保障系统安全。若需更复杂的权限控制(如基于 Kerberos 或 Ranger),可参考相关扩展配置。

如何配置Kafka域名访问


http://www.kler.cn/a/550430.html

相关文章:

  • 网络安全专业好就业吗?
  • 【力扣】114.二叉树展开为链表
  • 使用神经网络对驾驶数据进行道路类型分类
  • TCP/IP参考模型之区别(Differences Between the OSI and TCP/IP Reference Models)
  • python下载文件
  • QML 部件获得焦点触发的全局槽函数 onActiveFocusItemChanged
  • Android车机DIY开发之软件篇(十七) Android模拟器移植Automotive
  • 使用 AbilityKit 创建服务卡片
  • iOS 中使用 FFmpeg 的高级功能 - 滤镜(Filters)
  • Office word打开加载比较慢处理方法
  • 【PCIe 总线及设备入门学习专栏 1.1 -- PCI 设备访问方法】
  • B2B2C商城系统:如何利用大数据实现精准营销?
  • JavaScript 内置对象-字符串对象
  • SSH远程服务器免密码连接|含注意事项细节
  • 【PowerBI】使用形状地图创建地图可视化
  • 【设计模式精讲】六大设计原则 (SOLID)
  • 软件测试需要考的证书
  • 关于DeepSeek与ChatGPT等模型的原始训练数据
  • java数据结构_二叉树_5.5
  • learngit git常用指令