前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在裸机上部署Pulsar集群 顶

在裸机上部署Pulsar集群 顶

作者头像
白石
发布2020-07-23 16:45:35
1.6K0
发布2020-07-23 16:45:35
举报
文章被收录于专栏:白石白石

在裸机上部署Pulsar集群

提示

  1. 除最雄心勃勃的用例外,所有其他应用程序都应具有单集群的Pulsar安装。 如果您有兴趣尝试使用Pulsar或在初创公司或单个团队中使用Pulsar,则选择单个群集是最简单的。 如果您确实需要运行多集群Pulsar实例,请参见指南here.
  2. 如果要在Pulsar部署中使用所有内置的Pulsar IO连接器,则需要下载apache-pulsar-io-connectors包并在每个broker节点或每个function-worker节点上的pulsar目录中的connectors目录下的安装apache-pulsar-io-connectors,如果您为Pulsar Functions运行了一个单独的函数工作者集群 。
  3. 如果您想在您的Pulsar部署中使用分级存储特性, 您需要下载apache-pulsar-offloaders包,并在每个broker节点的pulsar目录的offloaders目录下安装apache-pulsar-offloaders。 有关如何配置此功能的详细信息,请参考[分层存储指南书]。(http://pulsar.apache.org/docs/en/2.6.0/cookbooks-tiered-storage).

部署Pulsar集群需要做以下工作(按顺序):

准备

需求

如果您已经有一个现有的zookeeper集群,并且希望重用它,则不需要准备运行zookeeper的机器。

要在裸机上运行Pulsar,建议使用以下配置:

  • 至少6台Linux机器或VMs
  • 覆盖所有Pulsa broker主机的单个DNS名称

如果您没有足够的机器,或者在集群模式下尝试使用Pulsar(稍后扩展集群),您可以在一个节点上部署完整的Pulsar配置,其中Zookeeper、bookie和broker运行在同一台机器上。

如果没有DNS服务器,可以在服务URL中使用多主机格式。

集群中的每台机器都需要安装Java 8或最新版本的Java。

下面是基本设置的示意图:

在这个图中,连接客户端需要能够使用单个URL与Pulsar集群通信。在本例中,pulsar-cluster.acme.com对所有消息处理brokers进行了抽象。Pulsar消息brokers在BookKeeper的bookies的机器上运行;brokers和bookies也要依赖ZooKeeper。

硬件方面的考虑

部署Pulsar群集时,在进行容量规划时请记住以下基本的更好选择。

ZooKeeper

对于运行ZooKeeper的计算机,建议使用功能较弱的计算机或VM。 Pulsar仅将ZooKeeper用于与协调有关的定期任务和与配置有关的任务,而对于基本操作则不使用ZooKeeper。例如,如果您在 Amazon Web Services (AWS)上运行Pulsar,则t2.small实例可能就足够了。

Bookies 和 Brokers

对于运行bookie和Pulsar broker的机器,需要功能更强大的机器。 以AWS部署为例, i3.4xlarge实例可能是合适的。 在这些机器上,您可以使用以下命令:

  • 快速CPU和10GbpsNIC(适用于Pulsar brokers)
  • 小型和快速的固态驱动器 (SSDs)或硬盘驱动器 (HDDs) ,带有RAID控制器和电池供电的写缓存(适用于BookKeeper bookies)

安装Pulsar二进制软件包

您需要在集群中的每台机器上安装Pulsar二进制软件包,包括运行ZooKeeperBookKeeper.

要开始在裸机上部署Pulsar集群,您需要通过以下方式之一下载二进制tarball版本:

代码语言:javascript
复制
$ wget https://archive.apache.org/dist/pulsar/pulsar-2.6.0/apache-pulsar-2.6.0-bin.tar.gz

下载完压缩包后,将其解压缩并用cd进入结果目录:

代码语言:javascript
复制
$ tar xvzf apache-pulsar-2.6.0-bin.tar.gz
$ cd apache-pulsar-2.6.0

提取的目录包含以下子目录:

目录

包含

bin

command-line tools of Pulsar, such as pulsar and pulsar-admin

conf

Configuration files for Pulsar, including for broker configuration, ZooKeeper configuration, and more

data

The data storage directory that ZooKeeper and BookKeeper use

lib

The JAR files that Pulsar uses

logs

Logs that the installation creates

安装内置连接器(可选)

URL: https://pulsar.apache.org/docs/en/next/standalone/#install-builtin-connectors-optional

自从Pulsar发布2.1.0-incubating以来,Pulsar提供了一个单独的二进制发行版,其中包含所有builtin连接器。 如果要启用那些builtin连接器,可以按照以下说明进行操作; 否则,您可以暂时跳过此部分。

要开始使用内置连接器,您需要通过以下一种方式在每个broker节点上下载tarball版本的连接器:

下载.nar文件后,将文件复制到pulsar目录中的connectors目录。 例如,如果您下载连接器文件pulsar-io-aerospike-2.6.0.nar:

代码语言:javascript
复制
$ mkdir connectors
$ mv pulsar-io-aerospike-2.6.0.nar connectors

$ ls connectors
pulsar-io-aerospike-2.6.0.nar
...

安装分层存储卸载器(可选)

URL: https://pulsar.apache.org/docs/en/next/standalone/#install-tiered-storage-offloaders-optional

从Pulsar发布2.2.0以来,Pulsar发布了一个单独的二进制发行版,其中包含分层的存储卸载程序。 如果要启用分层存储功能,可以按照以下说明进行操作; 否则,您可以暂时跳过此部分。

要开始使用分层存储卸载器,您需要在每个代理节点上以下列方式之一下载卸载器tarball版本:

下载压缩包后,在脉冲星目录下解压卸载程序包,并将卸载程序复制为offloaders:

代码语言:javascript
复制
$ tar xvfz apache-pulsar-offloaders-2.6.0-bin.tar.gz

// 您可以在pulsar目录中找到一个名为`apache-pulsar-offloaders-2.6.0`的目录
// 然后复制卸载器

$ mv apache-pulsar-offloaders-2.6.0/offloaders offloaders

$ ls offloaders
tiered-storage-jcloud-2.6.0.nar

有关如何配置分层存储功能的更多细节,可以参考分层存储参考书

部署一个ZooKeeper集群

如果您已经有一个现存的zookeeper集群,并且想要使用它,您可以跳过此部分。

ZooKeeper为Pulsar管理各种基本的协调和配置相关任务。要部署Pulsar集群,您需要首先部署ZooKeeper(在所有其他组件之前)。推荐配置3节点的ZooKeeper集群。Pulsar不大量使用ZooKeeper,所以更多的轻量级机器或vm应该足以运行ZooKeeper。

首先,将所有ZooKeeper服务器添加到conf/zookeeper.conf 中指定的配置中(在Pulsar中 您在上面创建的目录)。 以下是一个例子:

代码语言:javascript
复制
server.1=zk1.us-west.example.com:2888:3888
server.2=zk2.us-west.example.com:2888:3888
server.3=zk3.us-west.example.com:2888:3888

如果只有一台机器要部署Pulsar,那么只需要在配置文件中添加一个服务器条目。

在每台主机上,您需要在myid文件中指定节点的ID,该文件默认位于每台服务器的data/zookeeper文件夹中(您可以通过`dataDir参数更改文件位置).

请参阅ZooKeeper文档中的多服务器设置指南,以获取有关`myid'和更多信息的详细信息。.

例如,在诸如zk1.us-west.example.com之类的ZooKeeper服务器上,您可以如下设置myid值:

代码语言:javascript
复制
$ mkdir -p data/zookeeper
$ echo 1 > data/zookeeper/myid

zk2.us-west.example.com上,命令是echo 2 > data/zookeeper/myid,依此类推。.

将每台服务器添加到zookeeper.conf配置并具有相应的myid条目后,您可以在所有主机上(在后台,使用nohup)使用 pulsar-daemonCLI工具启动ZooKeeper:

代码语言:javascript
复制
$ bin/pulsar-daemon start zookeeper

如果您计划在同一个节点上部署Zookeeper,则需要使用不同的统计端口来启动Zookeeper。

使用pulsar-daemon CLI工具启动zookeeper,如下所示:

代码语言:javascript
复制
$ PULSAR_EXTRA_OPTS="-Dstats_server_port=8001" bin/pulsar-daemon start zookeeper

初始化集群元数据

为集群部署ZooKeeper之后,您需要为实例中的每个集群向ZooKeeper写入一些元数据。您只需要写入该数据一次

您可以使用pulsar CLI工具的initialize-cluster-metadata命令初始化该元数据。此命令可以在ZooKeeper集群中的任何机器上运行。下面是一个例子:

代码语言:javascript
复制
$ bin/pulsar initialize-cluster-metadata \
  --cluster pulsar-cluster-1 \
  --zookeeper zk1.us-west.example.com:2181 \
  --configuration-store zk1.us-west.example.com:2181 \
  --web-service-url http://pulsar.us-west.example.com:8080 \
  --web-service-url-tls https://pulsar.us-west.example.com:8443 \
  --broker-service-url pulsar://pulsar.us-west.example.com:6650 \
  --broker-service-url-tls pulsar+ssl://pulsar.us-west.example.com:6651

正如你从上面的例子中看到的,你需要指定以下内容:

标志

描述

--cluster

集群的名称

--zookeeper

集群的"本地"ZooKeeper连接字符串。这个连接字符串只需要包含ZooKeeper集群中的一台机器。

--configuration-store

整个实例的配置存储连接字符串。与--zookeeper标志一样,这个连接字符串只需要在zookeeper集群中包含一台机器。

--web-service-url

集群的Web服务URL,以及一个端口。 该URL应该是标准的DNS名称。 默认端口为8080(最好不要使用其他端口)。

--web-service-url-tls

如果使用TLS,则还需要为群集指定TLS Web服务URL。 默认端口为8443(最好不要使用其他端口)。

--broker-service-url

broker 服务URL,可与集群中的broker 进行交互。 该URL不应使用与Web服务URL相同的DNS名称,而应使用pulsar模式。 默认端口为6650(最好不要使用其他端口)。

--broker-service-url-tls

如果使用TLS,则还需要为集群指定TLS Web服务URL以及TLS 集群中brokers的服务URL。 默认端口为6651(最好不要使用其他端口)。

如果没有DNS服务器,则可以通过以下设置在服务URL中使用多主机格式:

代码语言:javascript
复制
--web-service-url http://host1:8080,host2:8080,host3:8080 \
--web-service-url-tls https://host1:8443,host2:8443,host3:8443 \
--broker-service-url pulsar://host1:6650,host2:6650,host3:6650 \
--broker-service-url-tls pulsar+ssl://host1:6651,host2:6651,host3:6651

部署BookKeeper集群

BookKeeper处理Pulsar中的所有持久数据存储。 您需要部署BookKeeper Bookies集群才能使用Pulsar。 您可以选择运行** 3台机器组成的BookKeeper集群**。

您可以使用conf/bookkeeper.conf配置文件来配置BookKeeper bookies 。为此目的配置bookies的最重要步骤是确保将zkServers设置为 ZooKeeper集群的连接字符串。 以下是一个示例:

代码语言:javascript
复制
zkServers=zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181

一旦您适当地修改了zkServers参数,您就可以根据需要进行任何其他配置更改。您可以在这里找到可用的BookKeeper配置参数的完整清单. 但是,查询BookKeeper文档以获得更深入的指导可能是更好的选择。

说明

自Pulsar 2.1.0发布以来,Pulsar引入了有状态函数。如果要启用该特性,需要在conf/bookkeeper.conf文件中执行以下设置来在BookKeeper上启用表服务。。

代码语言:javascript
复制
extraServerComponents=org.apache.bookkeeper.stream.server.StreamStorageLifecycleComponent

conf/bookkeeper.conf中应用所需的配置后,就可以在每个BookKeeper主机上启动一个bookie。 您可以在后台使用nohup或在前台启动每个Bookie。

要在后台启动Bookie,请使用pulsar-daemonCLI工具:

代码语言:javascript
复制
$ bin/pulsar-daemon start bookie

要在前台启动bookie:

代码语言:javascript
复制
$ bin/bookkeeper bookie

您可以通过在BookKeeper shell上运行bookiesanity命令来验证Bookie是否正常工作:

代码语言:javascript
复制
$ bin/bookkeeper shell bookiesanity

此命令在本地bookie上创建一个临时BookKeeper分类帐,写入一些条目,将其读回,最后删除该分类帐。

启动所有Bookies之后,您可以在任何Bookie节点上对BookKeeper shell使用simpletest命令,以验证集群中的所有bookies是否正在运行。

代码语言:javascript
复制
$ bin/bookkeeper shell simpletest --ensemble <num-bookies> --writeQuorum <num-bookies> --ackQuorum <num-bookies> --numEntries <num-entries>

该命令在集群上创建一个num-bookies大小的分类帐,写入一些条目,最后删除分类帐。

部署Pulsar brokers

Pulsar brokers 是您需要在Pulsar集群中部署的最后一件事。 brokers处理Pulsar消息并提供Pulsar的管理界面。 一个不错的选择是运行3个代理,每台已经运行BookKeeper Bookie的计算机上运行一个。

配置Brokers

broker配置中最重要的元素是确保每个broker都知道已部署的ZooKeeper集群。确保zookeeperServersconfigurationStoreServers参数正确。 在这种情况下,由于您只有1个集群并且没有配置存储设置,因此configurationStoreServers指向相同的zookeeperServers

代码语言:javascript
复制
zookeeperServers=zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181
configurationStoreServers=zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181

您还需要指定集群名称(匹配您在初始化集群的元数据时提供的名称):

代码语言:javascript
复制
clusterName=pulsar-cluster-1

此外,当您初始化集群的元数据时,您需要匹配broker和web服务端口(特别是当您使用与默认端口不同的端口时):

代码语言:javascript
复制
brokerServicePort=6650
brokerServicePortTls=6651
webServicePort=8080
webServicePortTls=8443

如果在单节点集群中部署Pulsar,则应将conf/broker.conf中的复制设置更新为1。.

代码语言:javascript
复制
# 创建分类帐时要使用的bookies数量
managedLedgerDefaultEnsembleSize=1

# 每个消息要存储的副本数
managedLedgerDefaultWriteQuorum=1

# 保证副本数(写完成之前等待的确认)
managedLedgerDefaultAckQuorum=1

启用Pulsar函数(可选)

如果您想启用Pulsar Functions,您可以按照如下说明操作:

  1. 编辑conf/broker.conf以启用functions worker,方法是将functionsWorkerEnabled设置为true。 functionsWorkerEnabled=true
  2. 编辑conf/functions_worker.yml并将pulsarFunctionsCluster设置为您在初始化集群的元数据时提供的集群名称。. pulsarFunctionsCluster: pulsar-cluster-1

如果您想了解更多关于部署functions worker的选项,请查看部署和管理functions worker.

启动Brokers

然后,您可以在conf/broker.conf文件中提供您想要的任何其他配置更改。一旦确定了配置,就可以启动Pulsar集群的brokers。与ZooKeeper和BookKeeper一样,您可以使用nohup在前台或后台启动brokers。

您可以使用pulsar broker命令在前台启动一个broker:

代码语言:javascript
复制
$ bin/pulsar broker

您可以使用pulsar-daemonCLI工具在后台启动一个broker:

代码语言:javascript
复制
$ bin/pulsar-daemon start broker

一旦你成功地启动了你打算使用的所有brokers,你的Pulsar集群就应该准备好了!

连接到正在运行的集群

一旦Pulsar群集启动并运行,您应该能够使用Pulsar客户端与其进行连接。 这样的客户端就是pulsar-client工具,它包含在Pulsar二进制包中。 pulsar-client工具可以将消息发布到Pulsar主题并从中使用,从而提供一种简单的方法来确保您的集群正常运行。

要使用pulsa-client工具,首先修改二进制包中conf/client.conf的客户端配置文件。您需要更改webServiceUrlbrokerServiceUrl的值,将localhost(这是默认值)替换为分配给您的broker/bookie主机的DNS名称。下面是一个例子:

代码语言:javascript
复制
webServiceUrl=http://us-west.example.com:8080
brokerServiceurl=pulsar://us-west.example.com:6650

如果没有DNS服务器,则可以在服务URL中指定多主机,如下所示:

代码语言:javascript
复制
webServiceUrl=http://host1:8080,host2:8080,host3:8080
brokerServiceurl=pulsar://host1:6650,host2:6650,host3:6650

一旦完成,您可以发布消息到Pulsar主题:

代码语言:javascript
复制
$ bin/pulsar-client produce \
  persistent://public/default/test \
  -n 1 \
  -m "Hello Pulsar"

如果指定的集群名称不是pulsar-cluster-1,则可能需要在主题中使用不同的集群名称。

该命令向Pulsar主题发布一条消息。此外,您可以在不同的终端订阅Pulsar主题,然后发布消息,如下:

代码语言:javascript
复制
$ bin/pulsar-client consume \
  persistent://public/default/test \
  -n 100 \
  -s "consumer-test" \
  -t "Exclusive"

一旦您成功地将上述消息发布到主题,您应该会在标准输出中看到:

代码语言:javascript
复制
----- got message -----
Hello Pulsar

运行Functions

如果您已经启用Pulsar 函数,那么现在可以尝试一下。

创建一个ExclamationFunction exclamation

代码语言:javascript
复制
bin/pulsar-admin functions create \
  --jar examples/api-examples.jar \
  --classname org.apache.pulsar.functions.api.examples.ExclamationFunction \
  --inputs persistent://public/default/exclamation-input \
  --output persistent://public/default/exclamation-output \
  --tenant public \
  --namespace default \
  --name exclamation

通过triggering检查该函数是否按预期运行。

代码语言:javascript
复制
bin/pulsar-admin functions trigger --name exclamation --trigger-value "hello world"

您应该看到以下输出:

代码语言:javascript
复制
hello world!
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在裸机上部署Pulsar集群
    • 准备
      • 需求
      • 硬件方面的考虑
    • 安装Pulsar二进制软件包
      • 安装内置连接器(可选)
        • 安装分层存储卸载器(可选)
          • 部署一个ZooKeeper集群
            • 初始化集群元数据
              • 部署BookKeeper集群
                • 部署Pulsar brokers
                  • 配置Brokers
                  • 启用Pulsar函数(可选)
                  • 启动Brokers
                • 连接到正在运行的集群
                  • 运行Functions
                  相关产品与服务
                  数据保险箱
                  数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档