• pulsar集群搭建_亲测成功


    pulsar集群搭建_亲测成功

    单机运行请看:

    Linux MacBook单机部署Pulsar并开启认证功能

    集群组成

    1. 搭建 Pulsar 集群至少需要 3 个组件:ZooKeeper 集群、BookKeeper 集群和 broker 集群(Broker 是 Pulsar 的自身实例)。这三个集群组件如下:
    • ZooKeeper 集群(3(或多) 个 ZooKeeper 节点组成)

    • bookie 集群(也称为 BookKeeper 集群,3(或多) 个 BookKeeper 节点组成)

    • broker 集群(3(或多) 个 Pulsar 节点组成)

    1. Pulsar 的安装包已包含了搭建集群所需的各个组件库。无需单独下载 ZooKeeper 安装包和 BookKeeper 安装包。

    环境准备

    安装JDK

    在所需服务器上安装 JDK(要求版本不低于 JDK 8)安装请看:

    Linux卸载openjdk并安装Oracle jdk

    MacBook安装jdk8

    下载最新版本pulsar
    官方下载地址:https://pulsar.apache.org/download/
    上传至服务器

    解压安装包到指定目录

    tar -zxvf apache-pulsar-2.8.0-bin.tar.gz -C /home/software

    安装建议

    官方建议需要6台机器:

    • 3台用于运行Zookeeper集群, 建议使用性能较弱的机器, Pulsar仅将Zookeeper用于与协调有关的定期任务和与配置有关的任务,而不用于基本操作.

    • 3台用于运行bookie集群和broker集群,建议使用性能强劲的机器.

    但是也可以在一台机器上同时部署Zookeeper,bookie,broker,也就是最少需要三台机器就可以部署一个Pulsar集群.

    其实也还可以在3台机器上部署Zookeeper集群,另外3台机器部署bookie集群,在另外3台机器部署broker集群,也就是一共需要消耗9台机器.

    总结: 部署一个Pulsar集群(包含一个Zookeeper集群(3个Zookeeper节点组成), 一个bookie集群(也称为Bookeeper集群,3个Bookeeper节点组成), 一个broker集群(3个Pulsar节点组成)), 最少需要3台机器, 官方建议6台机器, 最多需要9台机器.

    3台机器集群为例

    192.168.1.17

    192.168.1.18

    192.168.1.19

    先搭建zookeeper的集群

    #在17 18 19上分别创建目录
    mkdir -pv /home/software/zookeeper/logs
    
    #17上执行
    echo 1 > /home/software/zookeeper/myid 
    #18上执行
    echo 2 > /home/software/zookeeper/myid 
    #19上执行
    echo 3 > /home/software/zookeeper/myid
    
    #分别修改三台zookeeper配置
    vim /home/software/apache-pulsar-2.8.0/conf/zookeeper.conf
    #zookeeper数据保存目录 
    dataDir=/home/software/zookeeper
    #日志保存目录
    dataLogDir=/home/software/zookeeper/logs
    #端口,默认:2181,如果被占用,请修改,我这里修改为:12181
    clientPort=12181
    
    #最后加入集群配置,server.后面的数字(编号),要和上面写入myid相对应
    #端口一般配置为:2888:3888,我这里修改为了:12888:13888
    server.1=192.168.1.17:12888:13888
    server.2=192.168.1.18:12888:13888
    server.3=192.168.1.19:12888:13888
    
    #分别启动三台zookeeper: 执行后台运行命令
    bin/pulsar-daemon start zookeeper
    
    #停止zookeeper命令
    bin/pulsar-daemon stop zookeeper
    
    #查看启动情况
    ps aux|grep pulsar
    
    #查看端口启动情况
    netstat -tpnl |grep 12181
    netstat -tpnl |grep 2181    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    最后验证 ZooKeeper 节点是否启动成功

    #执行 zookeeper 客户端连接命令
    #如果是默认端口情况下,执行如果命令连接
    bin/pulsar zookeeper-shell
    
    #指定ip和端口的情况下,执行如下命令连接
    bin/pulsar zookeeper-shell -server 192.168.1.17:12181
    
    bin/pulsar zookeeper-shell -server 192.168.1.18:12181
    
    bin/pulsar zookeeper-shell -server 192.168.1.19:12181
    
    #查看所有zk节点数据,命令如下
    ls /
    #显示如下,表示zk的集群已经搭建好了
    [zookeeper]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    初始化集群元数据

    #先查看端口占用情况,避免后面启动时会报端口占用错误
    netstat -tpnl |grep 8080  
    netstat -tpnl |grep 8443
    netstat -tpnl |grep 6650
    netstat -tpnl |grep 6651
    
    # 在任一个 zooKeeper 节点,如:18,初始化集群元数据
    # 进入Apache-pulsar 目录
    # 执行命令初始化集群元数据
    bin/pulsar initialize-cluster-metadata \
    --cluster pulsar-cluster-iot \
    --zookeeper 192.168.1.18:12181 \
    --configuration-store 192.168.1.18:12181 \
    --web-service-url http://192.168.1.17:18080,192.168.1.18:1808,192.168.1.19:1808 \
    --web-service-url-tls https://192.168.1.17:8443,192.168.1.18:8443,192.168.1.19:8443 \
    --broker-service-url pulsar://192.168.1.17:6650,192.168.1.18:6650,192.168.1.19:6650 \
    --broker-service-url-tls pulsar+ssl://192.168.1.17:6651,192.168.1.18:6651,192.168.1.19:6651
    
    #注意: 这个命令只设置了一个节点的元数据, 后面访问其他节点有问题, 请用上面的命令
    bin/pulsar initialize-cluster-metadata \
    --cluster pulsar-cluster-iot \
    --zookeeper 192.168.1.18:12181 \
    --configuration-store 192.168.1.18:12181 \
    --web-service-url http://192.168.1.18:18080 \
    --web-service-url-tls https://192.168.1.18:8443 \
    --broker-service-url pulsar://192.168.1.18:6650 \
    --broker-service-url-tls pulsar+ssl://192.168.1.18:6651
    
    #连接任意一台zookeeper,比如:17
    bin/pulsar zookeeper-shell -server 192.168.1.17:12181
    #查询数据
    ls /
    #显示如下,有bookies,pulsar等信息,表示成功初始化
    [admin, bookies, ledgers, managed-ledgers, namespace, pulsar, stream, zookeeper]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    重新初始化或删除数据时

    建议: 先停掉zookeeper, 然后直接删除三台zookeeper数据目录,然后在重新启动

    重新初始化,删除zookeeper里的数据, 除了这个zookeeper不删除

    这样删除启动bookie 报错,把zookeeper集群停了,删除目录数据

    #删除命令
    delete /bookies
    
    delete /counters
    报错:
    Node not empty: /counters
    
    #deleteall命令。它将递归删除路径下的所有节点
    deleteall /counters
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    配置部署 BookKeeper 集群

    #分别每个节点执行
    
    #创建bookie所需要目录
    mkdir -pv /home/software/bookkeeper/tmp/journal
    mkdir -pv /home/software/bookkeeper/tmp/ledger
    
    #注意下面的配置:修改每个节点对应的ip
    
    # 进入bookie 配置文件目录,编辑 bookkeeper.conf 文件
    vim bookkeeper.conf
    
    # advertisedAddress 修改为服务器对应的ip,在另外两台服务器也做对应的修改advertisedAddress=192.168.1.17
    advertisedAddress=192.168.1.17
    
    # 修改以下两个文件目录地址
    journalDirectory=/home/software/bookkeeper/tmp/journal
    
    ledgerDirectories=/home/software/bookkeeper/tmp/ledger
    
    # 修改zk地址和端口信息
    zkServers=192.168.1.17:12181,192.168.1.18:12181,192.168.1.19:12181
    
    #查看8000端口是否占用, 如果占用,修改为8100
    netstat -tpnl |grep 8000   
    
    #httpServerPort默认也是8000,建议修改,我这里修改为:8100
    prometheusStatsHttpPort=8100
    
    # 初始化元数据,并启动 bookie 集群
    # 执行初始化元数据命令;若出现提示,输入 Y,继续(只需在任意一个bookie节点执行一次)
    bin/bookkeeper shell metaformat
    
    #初始化成功
    
    #修改端口
    vim bookkeeper.conf
    prometheusStatsHttpPort=8100
    
    #bookie关闭命令
    bin/pulsar-daemon stop bookie
    
    #启动bookie命令,以后台进程启动bookie
    bin/pulsar-daemon start bookie
    
    #查看日志,因为8000端口被占用,如果上面修改为:8100,就不会报此错误
    vim logs/pulsar-bookie-rabbitmq1.log 
    Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8000
    Caused by: java.net.BindException: 地址已在使用
    
    #按照以上步骤,启动另外两个 bookie 节点。
    
    #验证是否启动成功
    bin/bookkeeper shell bookiesanity
    
    #出现如下显示,表示启动成功Bookie
    Bookie sanity test succeeded
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    部署配置 Broker 集群

    #修改配置文件 broker.conf
    
    vim conf/broker.conf 
    # 修改集群名,和 ZooKeeper 里初始化元数据时指定的集群名(--cluster pulsar-cluster-iot)相同
    clusterName=pulsar-cluster-iot
    
    # 修改如下两个配置,指定的都是 ZooKeeper 集群地址和端口号zookeeperServers=192.168.1.17:12181,192.168.1.18:12181,192.168.1.19:12181
    configurationStoreServers=192.168.1.17:12181,192.168.1.18:12181,192.168.1.19:12181
    
    # 修改如下参数为本服务器ip地址,另外两个 broker 节点配置文件也做对应修改
    advertisedAddress=192.168.1.17
    
    #由于8080端口被占用,修改为18080
    webServicePort=18080
    
    #启动 broker 节点
    
    # 以后台进程启动 broker
    bin/pulsar-daemon start broker
    
    #停止 broker
    bin/pulsar-daemon stop broker 
    
    # 查看集群 brokers 节点情况
    bin/pulsar-admin brokers list pulsar-cluster-iot
    #报错:
    HTTP 404 Not Found
    
    #客户端修改,需要修改端口:18080
    vim conf/client.conf 
    修改为18080端口
    webServiceUrl=http://localhost:18080/
    
    bin/pulsar-admin brokers list pulsar-cluster-iot
    bin/pulsar-admin brokers list pulsar-cluster
    bin/pulsar-admin --admin-url http://192.168.1.17:18080 brokers list pulsar-cluster-iot
    
    #显示如下:表式集群搭建成功
    "192.168.1.17:18080"
    "192.168.1.18:18080"
    "192.168.1.19:18080"
    
    #查看端口启动情况
    netstat -tpnl |grep 8080
    netstat -tpnl |grep 18080
    
    #报错如下,都是端口占用情况
    Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8080
    Caused by: java.net.BindException: 地址已在使用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    测试

    #订阅
    bin/pulsar-client consume \
      persistent://public/default/test \
      -n 100 \
      -s "consumer-test" \
      -t "Exclusive"
    
    #发送
    bin/pulsar-client produce \
      persistent://public/default/test \
      -n 1 \
      -m "Hello Pulsar"
    
    ----- 收到消息 -----
    Hello Pulsar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    参考链接:
    https://www.jianshu.com/p/715ead13ecce
    https://blog.51cto.com/u_536410/2408686
    https://blog.csdn.net/daydreameri/article/details/105031977
    https://www.jianshu.com/p/dd328bdd2a32

  • 相关阅读:
    地产高质量发展时代:房企为何需要“利他思维”?
    k8s集群添加新节点-主节点和工作节点
    代码随想录二刷 Day36
    计算机系统基础知识-经典题目
    几个友好java代码编写习惯建议
    java-net-php-python-jsp网上拍卖系统计算机毕业设计程序
    面试求职-经典面试问题
    C++ 多线程编程教程:使用 std::thread 和 std::future 进行并发任务管理 ,处理线程超时
    python创建智能问答机器人
    【CSS应用篇】——CSS如何实现圆角边框
  • 原文地址:https://blog.csdn.net/yinjl123/article/details/132631611