聊聊 Pulsar: Pulsar 分布式集群搭建
一、集群搭建要求
1.1 搭建设计
搭建 Pulsar 集群至少需要 3 个组件:ZooKeeper 集群、Bookkeeper 集群和 Broker 集群(Broker 是 Pulsar 的自身实例)。这三个集群组件如下:
ZooKeeper 集群(3 个 ZooKeeper 节点组成)
Broker 集群(3 个 Pulsar 节点组成)
Bookkeeper 集群(也称为 Bookie 集群,3 个 BookKeeper 节点组成)
Pulsar 的安装包已包含了搭建集群所需的各个组件库。无需单独下载 ZooKeeper 安装包和 BookKeeper 安装包。(在实际生产环境中,ZooKeeper 我们并不仅仅应用在 Pulsar 上,包括 HBase 等其他的组件也需要依赖,所以生产环境 ZooKeeper 最好使用外置 ZooKeeper 集群环境)
注:如果是在内网测试环境搭建集群,为了避免防火墙造成端口开启繁琐,可以关闭服务器防火墙。
1.2 几种搭建方式
1.2.1 方式 1
官方建议需要 6 台机器
3 台用于运行 ZooKeeper 集群,建议使用性能较弱的机器,Pulsar 仅将 ZooKeeper 用于与协调有关的定期任务和与配置有关的任务,而不用于基本操作。
3 台用于运行 Bookkeeper 集群和 Broker 集群,建议使用性能强劲的机器。
1.2.2 方式 2
但是也可以在一台机器上同时部署 ZooKeeper,Bookkeeper ,Broker ,也就是最少需要三台机器就可以部署一个 Pulsar 集群。
1.2.3 方式 3
其实也还可以在 3 台机器上部署 ZooKeeper 集群,另外 3 台机器部署 Bookkeeper 集群,另 3 台机器部署 Broker 集群,也就是共需要消耗 9 台机器。
1.3 系统要求
当前,Pulsar 可运行在 64 位 macOS、Linux 和 Windows 上。要想运行 Pulsar,你需要安装 64 位 JRE/JDK 8 或更新版本。
老周这里采用的是 Pulsar 2.9.1 版本。
安装包下载:apache-pulsar-2.9.1-bin.tar.gz
1.4 架构介绍
老周这里本来是采用方式 1 来搭建的,踩了坑,Pulsar 2.9.1 版本中 PulsarZooKeeperClient 依赖的 ZooKeeper 是 3.6.3 版本,和我的 zookeeper 版本不兼容,我又不想换掉。所以还是用 Pulsar 内置的 ZooKeeper 吧,故采用方式 2 来搭建。
这里老周是 Mac 系统,所以采用 Parallels Desktop 虚拟机来模拟 3 台机器出来,如果你是 Windows 系统,可以采用 VMware 虚拟机。
虚拟机节点分配如下:
二、准备工作
配置三台主机的
/etc/hostname
文件,配置主机名称。
各个主机分别修改主机名称,比如 10.211.55.7 这台主机的主机名称修改成 pulsarCluster7。
配置
/etc/hosts
,配置主机名和 ip 地址的映射关系。
如果主机名显示还未生效
执行如下命令,让修改的主机名和 ip 地址的映射关系立即生效。
hostname $(cat /etc/hostname)
上传安装包
把 Pulsar 的安装包分别上传到 pulsarCluster7、pulsarCluster8、pulsarCluster9 主机上去
解压至 /opt 目录
tar -zxf apache-pulsar-2.9.1-bin.tar.gz -C /opt
三、Pulsar 集群搭建
3.1 ZooKeeper 集群搭建
tickTime、dataDir 是修改,其他都是新增。
参数说明:tickTime:服务器之间或客户端与服务器之间维持心跳的时间间隔 dataDir:当前 zookeeper 节点的数据存放目录 dataLogDir:当前 zookeeper 节点的日志存放目录 server.1~3:为 zookeeper 集群的各节点指定编号
执行后台运行命令,这个命令是启动 zookeeper:
执行 zookeeper 客户端连接命令:
客户端正常连接,就算 zookeeper 启动好了。
在另外两台服务器上也执行 ./pulsar-daemon start zookeeper
,启动 zookeeper 之后,在其中一个 zookeeper 节点的机器上,初始化集群元数据(总共只需执行一次):
例如在 pulsarCluster7 上:
集群元数据说明:
注:如果没有 DNS 服务器,也可以使用多主机(multi-host)格式的 service-url 设置 web-service-url,web-service-url-tls,broker-service-url,broker-service-url-tls。
看到这个日志的话,说明初始化 Broker 集群元数据成功了。
也可以通过./pulsar zookeeper-shell
进入 zk 控制台,通过 ls /
查看所有 zk 节点。如果能看到 bookies,ledgers 等节点,则说明初始化成功了。
如果需要关闭 zookeeper,可使用命令:
3.2 BookKeeper 集群搭建
在每个部署 bookkeeper 的机器上,修改如下关键配置项:
注:
prometheusStatsHttpPort 默认是 8000,但实际上在 bookkeeper.conf 中,httpServerPort 默认也是 8000,会导致端口被占用。
上面的 advertisedAddress 需要设置为对应机器的 ip,而不是全设置为同一个,其它两个机器同理设置成 pulsarCluster8、pulsarCluster9。
参数说明:
advertisedAddress:指定当前节点的主机名或 IP 地址
zkServers:指定 zookeeper 集群,用来将 bookkeeper 节点的元数据存放在 zookeeper 集群
journalDirectories:当前 bookkeeper 节点的 journal 数据存放目录。 如果需要提高磁盘写入性能,可以指定多个目录用来存放 journal 数据,关键是每一个目录必须在不同的磁盘,不然反而会影响写入性能。
ledgerDirectories:当前 bookkeeper 节点的 ledger 存放目录
执行初始化元数据命令,若出现提示,输入 Y 继续(该步骤只需在一个 bookie 节点执行一次,总共只需执行一次):
在三台机器上,分别输入以下命令来以后台进程启动 bookie:
验证是否启动成功:
出现Bookie sanity test succeeded
则代表启动成功。
如果需要关闭 bookkeeper,可使用命令:
3.3 Broker 集群搭建
在每个部署 Broker 的机器上,通过编辑 Broker 配置文件,修改如下关键配置项:
注:
上面的 advertisedAddress 需要设置为对应机器的 ip,而不是全设置为同一个,其它两个机器同理设置成 pulsarCluster8、pulsarCluster9。
参数说明:
zookeeperServers:指定 zookeeper 集群,用来将 broker 节点的元数据存放在 zookeeper 集群
configurationStoreServers:多集群部署时管理多个 pulsar 集群元数据的 zookeeper 集群地址,单集群部署时可以和 zookeeperServers 设置一样。
advertisedAddress:指定当前节点的主机名或 IP 地址
clusterName:指定 pulsar 集群名称
在每个部署 Broker 的机器上,以后台进程启动 Broker。
如果需要关闭 broker,可使用命令:
查看集群 brokers 节点是否启动成功
我们部署正常的话,这一步会显示如下结果;
"pulsarCluster7:8080""pulsarCluster9:8080""pulsarCluster8:8080"
在这里插入图片描述
代表此时集群内有存活的节点: pulsarCluster7、pulsarCluster8、pulsarCluster9,端口号都是 8080。
到此,Pulsar 的分布式集群搭建成功!
四、测试
4.1 模拟开启消费者监听数据
pulsarCluster8 节点模拟消费者
4.2 模拟开启生产者生产数据
pulsarCluster9 节点模拟生产者
4.3 消费者成功接收消息
五、遇到的问题
5.1 zookeeper 配置 tickTime 参数小了
安装内置的 zookeeper 的过程中,遇到了错误。
把 tickTime 参数调成 10000 就好了。
也有可能是其它原因导致的:
zookeeper 集群未成功启动
zookeeper 你配置的是集群,但你只启动了一个节点,,zookeeper 就会认为服务处于不可用状态。zookeeper 有个选举算法,当整个集群超过半数机器宕机,zookeeper 会认为集群处于不可用状态。所以,3 台机器只启动一台无法连接,如果启动 2 台及以上就可以连接了。
防火墙未关闭
显示防火墙状态
systemctl status firewalld
关闭防火墙
systemctl stop firewalld
5.2 内存不足
官网要求,jvm 内存需要在 2g,而我的虚拟机只有 1g 的内存,导致 broke r 创建失败。
这里需要关掉虚拟机增加内存。或者更改参数来调整分配的大小。
默认情况下,Pulsar 为启动分配 2G JVM 堆内存。可以在 PULSAR_MEM 下的 conf/pulsar_env.sh 文件中修改。这是传递给 JVM 的额外选项。但是修改这个之后发现还是报这个错误,所以可能这个必须要给 2G 以上的内存才可以。
重新分配内存之后,重新按照步骤依次启动 zookeeper、bookeeper、broker,然后查看集群,三个节点的信息全部都正常。
版权声明: 本文为 InfoQ 作者【老周聊架构】的原创文章。
原文链接:【http://xie.infoq.cn/article/4e1b2514b46115f87766b39ec】。文章转载请联系作者。
评论