暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Pulsar(1)安装笔记

beenrun 2022-05-03
2576

本文主要介绍安装pulsar和pulsar manager的过程,在安装过程中解决了各种问题。解决了zookeeper版本域pulsar不匹配,8080端口被zookeeper占用。希望对大家有所帮助。

1.安装准备(3台机器)

官网地址:Pulsar官网集群安装地址
(1) jdk安装,jdk8及以上
(2)单独安装zookeeper安装完成要求版本要在3.6.3及以上,否则或报错,后面有我报错的解决方法
(3)确保3台机器都安装完成
(4)防火墙关闭、ssh免登录

(5)同步脚本多台服务器,

修改hostname:hadoop192 hadoop193 hadoop191

    #!/bin/bash
    #1. 判断参数个数
    if [ $# -lt 1 ]
    then
    echo Not Enough Arguement!
    exit;
    fi
    #2. 遍历集群所有机器
    for host in hadoop192 hadoop193 hadoop191
    do
    echo ==================== $host ====================
    #3. 遍历所有目录,挨个发送
    for file in $@
    do
    #4. 判断文件是否存在
    if [ -e $file ]
    then
    #5. 获取父目录
    pdir=$(cd -P $(dirname $file); pwd)
    #6. 获取当前文件的名称
    fname=$(basename $file)
    ssh $host "mkdir -p $pdir"
    rsync -av $pdir/$fname $host:$pdir
    else
    echo $file does not exists!
    fi
    done
    done


    2.集群规划

    集群名称机器IP服务名称
    hadoop191192.168.10.191JKD,Zookeeper,BookKeeper,Broker
    hadoop192192.168.10.192JKD,Zookeeper,BookKeeper,Broker
    hadoop193192.168.10.193JKD,Zookeeper,BookKeeper,Broker

    3.验证安装的jdk和Zookeeper

    (1)验证jdk
    java -version

      [root@hadoop191 ~]# java -version
      java version "1.8.0_212"
      Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
      Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
      [root@hadoop191 ~]#


      (2)验证zookeeper
      由于信息较长,删除了部分日志内容

        [root@hadoop193 apache-zookeeper-3.5.7-bin]# bin/zkCli.sh -server 127.0.0.1:2181
        Connecting to 127.0.0.1:2181
        2022-04-30 16:18:36,097 [myid:] - INFO [main:Environment@109] - Client
        2022-04-30 16:18:36,158 [myid:127.0.0.1:2181] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@959] - Socket connection established, initiating session, client: 127.0.0.1:44318, server: localhost/127.0.0.1:2181
        2022-04-30 16:18:36,175 [myid:127.0.0.1:2181] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@1394] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x300004d3c460000, negotiated timeout = 30000


        WATCHER::


        WatchedEvent state:SyncConnected type:None path:null
        [zk: 127.0.0.1:2181(CONNECTED) 0]


        4.pulsar集群部署模式

        (1)下载

        https://archive.apache.org/dist/pulsar/
        选择自己的版本

          cd opt/software


          wget
          https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=pulsar/pulsar-2.10.0/apache-pulsar-2.10.0-bin.tar.gz


          (2)解压

            [root@hadoop191 software]# tar  -zxvf apache-pulsar-2.10.0-bin.tar.gz -C ../module/


            (3)创建软连接
              [root@hadoop191 module]# ln -s apache-pulsar-2.10.0 pulsar_2.10.0


              软连接创建后结果


              5.修改bookkeeper配置

              (1)进入配置目录

                cd opt/module/apache-pulsar-2.10.0/conf
                (2)打开文件bookkeeper.conf
                  [root@hadoop191 conf]# vim bookkeeper.conf

                  (3)修改文件内容
                  vim中快速到某行:退出编辑模式(esc),然后输入冒号+行号

                  :行号

                    #39行
                    journalDirectory=/opt/module/apache-pulsar-2.10.0/tmp/journal


                    # 56行:本机IP 或hostname
                    advertisedAddress=hadoop191


                    #405行,创建临时目录
                    ledgerDirectories=/opt/module/apache-pulsar-2.10.0/tmp/ledgers


                    #633行:zookeeker集群
                    zkServers=hadoop191:2181,hadoop192:2181,hadoop193:2181


                    6.修改broker配置

                      (1)进入broker.conf文件
                      cd opt/module/apache-pulsar-2.10.0/conf
                      [root@hadoop191 conf]# vim broker.conf
                      (2)修改vroker.conf的内容
                      #23行 Zookeeper quorum connection string
                      zookeeperServers=hadoop191:2181,hadoop192:2181,hadoop193:2181


                      #26行 Configuration Store connection string
                      configurationStoreServers=hadoop191:2181,hadoop192:2181,hadoop193:2181


                      #47行,本地ip地址或者服务器名称hostname
                      advertisedAddress=hadoop191


                      #101行,修改集群名称
                      clusterName=pulsar-cluser


                      7.将配置好的结果分发到另外2台机器

                      使用同步脚本进行同步

                        [root@hadoop191 ~]# sh synfile.sh /opt/module/apache-pulsar-2.10.0

                        8.在另外2台机器创建软连接

                          [root@hadoop193 module]# ln -s apache-pulsar-2.10.0/ pulsar_2.10.0


                          9.修改另外2台broker和bookies的地址

                            vim  bookkeeper.conf 


                            # 56行:本机IP 或hostname
                            advertisedAddress=hadoop192


                            vim broker.conf


                            #61行,本地ip地址或者服务器名称hostname
                            advertisedAddress=hadoop192


                            10.启动zookeeper集群并检查状态

                            3台服务器都都启动zookeeper

                              [root@hadoop193 apache-zookeeper-3.5.7-bin]# bin/zkServer.sh start


                              检查状态
                              [root@hadoop193 apache-zookeeper-3.5.7-bin]# bin/zkServer.sh status
                              ZooKeeper JMX enabled by default
                              Using config: opt/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
                              Client port found: 2181. Client address: localhost.
                              Mode: leader
                              [root@hadoop193 apache-zookeeper-3.5.7-bin]#
                              应该是有2个follower和一个leader


                              11.初始化Pulsar元数据信息

                              (1)进入目录/opt/module/apache-pulsar-2.10.0

                                cd opt/module/apache-pulsar-2.10.0/bin

                                (2)执行初始化

                                如果一次初始化没有成功,可以再初始化一次试试

                                只在一台机器上执行

                                  #执行初始化脚本
                                  ./pulsar initialize-cluster-metadata \
                                  --cluster pulsar-cluster \
                                  --zookeeper hadoop191:2181,hadoop192:2181,hadoop193:2181 \
                                  --configuration-store hadoop191:2181,hadoop192:2181,hadoop193:2181 \
                                  --web-service-url http://hadoop191:8080,hadoop192:8080,hadoop193:8080 \
                                  --web-service-url-tls https://hadoop191:8443,hadoop192:8443,hadoop193:8443 \
                                  --broker-service-url pulsar://hadoop191:6650,hadoop192:6650,hadoop193:6650 \
                                  --broker-service-url-tls pulsar+ssl://hadoop191:6651,hadoop192:6651,hadoop193:6651


                                  (3)元素说明

                                    集群元数据说明:
                                    cluster
                                    集群名称
                                    zookeeper
                                    ZooKeeper集群连接参数,仅需要包含ZooKeeper集群中的一个节点即可
                                    configuration-store
                                    Pulsar实例的配置存储集群(ZooKeeper),多集群部署时才会发挥作用,需要另外部署ZooKeeper集群,但是单集群部署时可以和–zookeeper参数设置一样,只需要包含ZooKeeper集群中的一个节点即可
                                    web-service-url
                                    集群Web服务的URL+端口,URL是一个标准的DNS名称,默认端口8080,不建议修改。
                                    web-service-url-tls
                                    集群Web提供TLS服务的URL+端口,端口默认8443,不建议修改。
                                    broker-service-url
                                    集群brokers服务URL,URL中DNS的名称和Web服务保持一致,URL使用pulsar替代http/http,端口默认6650,不建议修改。
                                    broker-service-url-tls
                                    集群brokers提供TLS服务的URL,默认端口6551,不建议修改。
                                    (4)初始化错误
                                      2022-04-30T18:42:00,150+0800 [main-SendThread(hadoop192:2181)] INFO  org.apache.zookeeper.ClientCnxn - SASL config status: Will not attempt to authenticate using SASL (unknown error)
                                      2022-04-30T18:42:00,153+0800 [main-SendThread(hadoop192:2181)] INFO org.apache.zookeeper.ClientCnxn - Socket connection established, initiating session, client: 192.168.10.191:45040, server: hadoop192/192.168.10.192:2181
                                      2022-04-30T18:42:00,169+0800 [main-SendThread(hadoop192:2181)] INFO org.apache.zookeeper.ClientCnxn - Session establishment complete on server hadoop192/192.168.10.192:2181, session id = 0x20000d08d4e0000, negotiated timeout = 30000
                                      2022-04-30T18:42:00,171+0800 [main-EventThread] INFO org.apache.bookkeeper.zookeeper.ZooKeeperWatcherBase - ZooKeeper client is connected now.
                                      2022-04-30T18:42:00,181+0800 [main-SendThread(hadoop192:2181)] WARN org.apache.zookeeper.ClientCnxn - Session 0x20000d08d4e0000 for sever hadoop192/192.168.10.192:2181, Closing socket connection. Attempting reconnect except it is a SessionExpiredException.
                                      org.apache.zookeeper.ClientCnxn$EndOfStreamException: Unable to read additional data from server sessionid 0x20000d08d4e0000, likely server has closed socket
                                      at org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:77) ~[org.apache.zookeeper-zookeeper-3.6.3.jar:3.6.3]
                                      at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350) ~[org.apache.zookeeper-zookeeper-3.6.3.jar:3.6.3]
                                      at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1290) [org.apache.zookeeper-zookeeper-3.6.3.jar:3.6.3]
                                      Exception in thread "main" org.apache.pulsar.metadata.api.MetadataStoreException: org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for
                                      at org.apache.pulsar.metadata.impl.ZKMetadataStore.<init>(ZKMetadataStore.java:89)
                                      at org.apache.pulsar.metadata.impl.MetadataStoreFactoryImpl.newInstance(MetadataStoreFactoryImpl.java:52)
                                      at org.apache.pulsar.metadata.impl.MetadataStoreFactoryImpl.createExtended(MetadataStoreFactoryImpl.java:36)
                                      at org.apache.pulsar.metadata.api.extended.MetadataStoreExtended.create(MetadataStoreExtended.java:43)
                                      at org.apache.pulsar.PulsarClusterMetadataSetup.initMetadataStore(PulsarClusterMetadataSetup.java:338)
                                      at org.apache.pulsar.PulsarClusterMetadataSetup.main(PulsarClusterMetadataSetup.java:203)
                                      Caused by: org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for
                                      at org.apache.zookeeper.KeeperException.create(KeeperException.java:106)
                                      at org.apache.zookeeper.KeeperException.create(KeeperException.java:54)
                                      at org.apache.zookeeper.ZooKeeper.addWatch(ZooKeeper.java:3192)
                                      at org.apache.pulsar.metadata.impl.PulsarZooKeeperClient.access$3301(PulsarZooKeeperClient.java:74)
                                      at org.apache.pulsar.metadata.impl.PulsarZooKeeperClient$23.call(PulsarZooKeeperClient.java:1130)
                                      at org.apache.pulsar.metadata.impl.PulsarZooKeeperClient$23.call(PulsarZooKeeperClient.java:1124)
                                      at org.apache.pulsar.metadata.impl.PulsarZooKeeperClient$ZooWorker.syncCallWithRetries(PulsarZooKeeperClient.java:1529)
                                      at org.apache.pulsar.metadata.impl.PulsarZooKeeperClient.addWatch(PulsarZooKeeperClient.java:1124)
                                      at org.apache.pulsar.metadata.impl.ZKMetadataStore.<init>(ZKMetadataStore.java:82)
                                              ... 5 more
                                      (5)分析问题:

                                      (5.1)检查原来的配置是否正确
                                      没有任何问题
                                      (5.2)zookeeper版本错误
                                      我自己装的版本是3.5.7与Pulsar中需要的版本3.6.3不一致
                                      发现错误信息中有zookeeper版本是3.6.3
                                      所以准备重新装给新的版本zookeeper

                                      (6)解决方法:下载新的zookeeper 3.6.3
                                      下载完后,进行初始化,初始化成功,问题解决

                                      (7)初始化完成,只执行一次
                                      初始化后,部分信息如下

                                        2022-05-01T07:03:58,647+0800 [main-EventThread] INFO  org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x300000c76710000
                                        2022-05-01T07:03:58,752+0800 [main] INFO org.apache.zookeeper.ZooKeeper - Session: 0x300000c76710001 closed
                                        2022-05-01T07:03:58,752+0800 [main-EventThread] INFO org.apache.pulsar.metadata.impl.ZKSessionWatcher - Got ZK session watch event: WatchedEvent state:Closed type:None path:null
                                        2022-05-01T07:03:58,752+0800 [main-EventThread] INFO org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x300000c76710001
                                        2022-05-01T07:03:58,753+0800 [main] INFO  org.apache.pulsar.PulsarClusterMetadataSetup - Cluster metadata for 'pulsar-cluster' setup correctly

                                        12.初始化Pulsar中的bookkeeper

                                        只需要执行一次,以后再使用也不用初始化

                                        (1)进入目录

                                          cd opt/module/apache-pulsar-2.10.0/bin
                                          (2)执行初始化
                                            ./bookkeeper shell metaformat
                                            (3)输入Y
                                              er.ZooKeeperWatcherBase - ZooKeeper client is connected now.
                                              Ledger root already exists. Are you sure to format bookkeeper metadata? This may cause data loss. (Y or N) y
                                              (4)结果信息如下

                                              如果有错误信息可以再初始化一次

                                                Ledger root already exists. Are you sure to format bookkeeper metadata? This may cause data loss. (Y or N) y
                                                2022-05-01T07:15:33,874+0800 [main] INFO org.apache.bookkeeper.discover.ZKRegistrationManager - Successfully formatted BookKeeper metadata
                                                2022-05-01T07:15:33,979+0800 [main-EventThread] INFO org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x100000c57f30002
                                                2022-05-01T07:15:33,979+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Session: 0x100000c57f30002 closed

                                                13.启动过程bookie

                                                3个节点都需要依次启动
                                                (1)进入目录

                                                  cd /opt/module/apache-pulsar-2.10.0/bin

                                                  (2)执行启动
                                                  每台机器都执行

                                                    ./pulsar-daemon start bookie
                                                    (3)执行结果
                                                      doing start bookie ...
                                                      starting bookie, logging to opt/module/apache-pulsar-2.10.0/logs/pulsar-bookie-hadoop191.log
                                                      Note: Set immediateFlush to true in conf/log4j2.yaml will guarantee the logging event is flushing to disk immediately. The default behavior is switched off due to performance considerations.
                                                      [root@hadoop191 bin]#
                                                      (4)验证是否启动成功

                                                      三台都进行验证

                                                        ./bookkeeper shell bookiesanity

                                                        5)输出信息中有下面信息说明启动成功

                                                          2022-05-01T07:26:21,319+0800 [main] INFO  org.apache.bookkeeper.tools.cli.commands.bookie.SanityTestCommand - Bookie sanity test succeeded

                                                          可以通过jps进行验证


                                                          14.启动过程-broker

                                                          每台机器都执行
                                                          (1)进入目录

                                                            cd /opt/module/apache-pulsar-2.10.0/bin
                                                            (2)执行启动broker
                                                              ./pulsar-daemon start broker
                                                              (3)启动结果

                                                              (4)查看集群 brokers 节点情况

                                                                ./pulsar-admin brokers list pulsar-cluster
                                                                (5)检查问题

                                                                查看日志,发现端口被占用8080

                                                                  led to bind to 0.0.0.0:8080
                                                                  at org.apache.pulsar.broker.web.WebService.start(WebService.java:253) ~[org.apache.pulsar-pulsar-broker-2.9.2.jar:2.9.2]
                                                                  at org.apache.pulsar.broker.PulsarService.start(PulsarService.java:686) ~[org.apache.pulsar-pulsar-broker-2.9.2.jar:2.9.2]
                                                                  ... 2 more
                                                                  Caused by: java.io.IOException: Failed to bind to 0.0.0.0:8080


                                                                  (6)检查端口号
                                                                    netstat -anp |grep 8080
                                                                    ps -ef |grep 2333

                                                                    (7)解决端口被占用的方法:修改zookeeper配置有2种方法
                                                                    (7.1)修改zookeeper端口

                                                                      cd opt/module/apache-zookeeper-3.6.3-bin/conf


                                                                      vim zoo.cfg


                                                                      #修改或增加端口
                                                                      # admin port
                                                                      admin.serverPort=8887

                                                                      (7.2)在zookeeper中, 如果不需要 AdminServer ,可以直接禁用:打开 zoo.cfg 配置文件,直接添加以下语句即可。

                                                                        # 禁用 AdminServer 服务 
                                                                        admin.enableServer=false
                                                                        (8)重新启动zookeeper

                                                                        所有已经启动的服务关闭重新启动
                                                                        再次启动zookeeper
                                                                        启动bookie
                                                                        启动broker



                                                                        终于启动成功

                                                                        (9)解决端口冲突8080方法2:修改pulsar的端

                                                                        (9.1)每台机器都修改

                                                                          cd opt/module/apache-pulsar-2.10.0/conf


                                                                          vim broker.conf


                                                                          # Port to use to server HTTP request
                                                                          webServicePort=8008
                                                                          (9.2)每台机器修改
                                                                            cd opt/module/apache-pulsar-2.10.0/conf


                                                                            vim client.conf


                                                                            client.conf里的webServiceUrl=http://10.50.30.178:8008


                                                                            15.验证集群是否正常使用

                                                                            (1)查看集群 brokers 节点情况

                                                                              cd opt/module/apache-pulsar-2.10.0/bin


                                                                              [root@hadoop191 bin]# ./pulsar-admin brokers list pulsar-cluster
                                                                              hadoop193:8080
                                                                              hadoop192:8080
                                                                              hadoop191:8080
                                                                              [root@hadoop191 bin]#
                                                                              (2)消费者
                                                                                ./pulsar-client consume \
                                                                                persistent://public/default/pulsar-cluster \
                                                                                -n 100 \
                                                                                -s "consumer-cluster" \
                                                                                -t "Exclusive"

                                                                                (3)生产者

                                                                                  ./pulsar-client produce \
                                                                                  persistent://public/default/pulsar-cluster \
                                                                                  -n 1 \
                                                                                  -m "Hello Pulsar"


                                                                                  消费掉消息

                                                                                  到此结束安装


                                                                                  16.安装Pulsar监控工具Pulsar Manager

                                                                                  Pulsar Manager官网地址

                                                                                  (1)下载

                                                                                    cd opt/module
                                                                                    wget https://dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz
                                                                                    (2)解压
                                                                                      #解压
                                                                                      tar -zxvf apache-pulsar-manager-0.2.0-bin.tar.gz
                                                                                      (3)进入目录
                                                                                        #进入目录
                                                                                        cd pulsar-manager
                                                                                        (4)再次解压 pulsar-manager.tar
                                                                                          #再次解压,注意是在里面的目录
                                                                                          tar -xvf pulsar-manager.tar
                                                                                          (5)再次进入新的目录
                                                                                            进入目录pulsar-manager,注意是在下一级目录
                                                                                            cd pulsar-manager
                                                                                            (6)拷贝文件
                                                                                              cp -r ../dist ui
                                                                                              (7)启动
                                                                                              # 这里可以用后台启动的方式

                                                                                                ./bin/pulsar-manager

                                                                                                (8)开启一个新的xshell连接,创建token和账号

                                                                                                  CSRF_TOKEN=$(curl <u>http://</u><u>localhost</u><u>:7750/pulsar-manager/csrf-token)</u>
                                                                                                  curl \
                                                                                                  -H "X-XSRF-TOKEN: $CSRF_TOKEN" \
                                                                                                  -H "Cookie: XSRF-TOKEN=$CSRF_TOKEN;" \
                                                                                                  -H 'Content-Type: application/json' \
                                                                                                  -X PUT http://localhost:7750/pulsar-manager/users/superuser \
                                                                                                  -d '{"name": "admin", "password": "apachepulsar", "description": "test", "email":
                                                                                                  <u>"username@test.org"}'</u>


                                                                                                  (9)页面访问地址
                                                                                                  http://192.168.10.191:7750/ui/index.html

                                                                                                  输入用户名:admin和密码:apachepulsar





                                                                                                  17.总结

                                                                                                  终于安装Pulsar和Pulsar manager成功
                                                                                                  在安装过程中出现各种问题都在上面有记录,一一解决,看日志还是解决问题必须学习的。


                                                                                                  感谢阅读。

                                                                                                  期待点赞、分享、关注!

                                                                                                  奇迹的出现往往就在再坚持一下的时候!


                                                                                                  文章转载自beenrun,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                                                                  评论