Ubuntu环境下Zookeeper与其他服务的集成方式
Kafka依赖Zookeeper实现集群管理、分区Leader选举及元数据存储,是大数据生态中最常见的集成场景。
openjdk-11-jdk,Kafka/JVM基础)、下载并解压Kafka(如kafka_2.13-3.7.0.tgz)与Zookeeper(如apache-zookeeper-3.7.0-bin.tar.gz)二进制包。zoo.cfg文件,设置dataDir(数据存储路径,如/var/lib/zookeeper)、clientPort(客户端连接端口,默认2181)及集群节点信息(server.X=host:2888:3888,其中X为节点ID);在每个节点的dataDir下创建myid文件(内容为对应节点ID,如节点1写1)。bin/zkServer.sh start启动服务,通过bin/zkServer.sh status验证状态(显示Mode: leader/follower即为成功)。server.properties文件,设置zookeeper.connect参数为Zookeeper集群地址(如zoo1:2181,zoo2:2181,zoo3:2181)。bin/kafka-server-start.sh config/server.properties),创建Topic(bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic test --partitions 3 --replication-factor 1),并通过生产者/消费者命令测试消息收发。Zookeeper为Hadoop提供分布式协调服务,解决NameNode单点故障、集群状态同步等问题。
hadoop-3.3.4.tar.gz)与Zookeeper(同上)。core-site.xml文件,添加Zookeeper地址配置(如<property><name>ha.zookeeper.quorum</name><value>zoo1:2181,zoo2:2181,zoo3:2181</value></property>);若启用HDFS高可用,还需配置hdfs-site.xml中的dfs.ha.fencing.methods(隔离机制)等参数。sbin/start-dfs.sh启动HDFS,sbin/start-yarn.sh启动YARN)。hdfs haadmin -getServiceState nn1命令查看NameNode状态(应显示active/standby切换正常),或访问Hadoop Web界面(如http://namenode:9870)确认集群运行状态。Dubbo使用Zookeeper作为默认注册中心,实现服务注册、发现与负载均衡。
provider.xml中添加Zookeeper注册中心配置(如<dubbo:registry address="zookeeper://192.168.1.100:2181"/>);在消费者的consumer.xml中添加相同配置,实现服务发现。invoke(myService, myMethod, params)),确认服务调用成功。PHP项目可通过php-zookeeper扩展与Zookeeper交互,实现分布式锁、配置管理等轻量级功能。
php7.4)、Composer(PHP依赖管理工具),下载并解压Zookeeper(同上)。composer require zookeeper/zookeeper),并在PHP代码中引入扩展(require 'vendor/autoload.php')。KazooClient类连接Zookeeper(如$zk = new KazooClient(['hosts' => '127.0.0.1:2181']); $zk->start();)。$zk->create('/my_node', 'data'))、数据读取($data = $zk->get('/my_node'))、分布式锁($lock = $zk->lock('/my_lock'))等。通过Zookeeper自带的zkCli.sh命令行工具,可在Shell脚本中实现自动化节点管理、数据读取等操作。
zkCli.sh工具可用(位于Zookeeper的bin目录下)。zkCli.sh -server 127.0.0.1:2181连接Zookeeper,执行create /my_node "data"(创建节点)、get /my_node(获取节点数据)、ls /(列出根节点下所有子节点)等命令。zkCli.sh命令,例如创建节点的脚本:#!/bin/bash
ZK_CLI="/opt/zookeeper/bin/zkCli.sh"
SERVER="127.0.0.1:2181"
NODE="/my_script_node"
DATA="script_data"
$ZK_CLI -server $SERVER create $NODE "$DATA"
if [ $? -eq 0 ]; then
echo "Node created successfully."
else
echo "Failed to create node."
fi