当前位置: 首页 > 工具软件 > Pulsar > 使用案例 >

Pulsar-学习-安装部署

充子航
2023-12-01

安装准备

官方的安装文档:https://pulsar.apache.org/docs/2.11.x/deploy-bare-metal/

服务器准备

建议方案

  • 服务器配置
    pular在bkenv.sh和pulsar_env.sh中指定了jvm的内存参数
    PULSAR_MEM=${PULSAR_MEM:-"-Xms2g -Xmx2g -XX:MaxDirectMemorySize=4g"}
    BOOKIE_MEM=${BOOKIE_MEM:-${PULSAR_MEM:-"-Xms2g -Xmx2g -XX:MaxDirectMemorySize=2g"}}
    建议安装bookie和broker的节点,服务器建议配置至少为Bookie:4v8GB Broker:8v8GB
  • 服务器数量
    建议准备7台服务器:3台运行zk,3台运行bookie和broker,1台dns服务。
    pulsar相对与kafka架构上的优势是存算分离,如果服务器足够,且对存算分离有需求,建议将bookie和broker分开部署。

实验环境

因为内存有限,我只在笔记本上安装了4个2v4GB的虚拟机,并适当调低了jvm内存参数,否则可能导致服务无法启动。

节点名称节点IP操作系统资源配置安装组件
v1172.16.206.251CentOS72v 4GBzk、bookie、broker
v2172.16.206.252CentOS72v 4GBzk、bookie、broker
v3172.16.206.253CentOS72v 4GBzk、bookie、broker
v4172.16.206.234CentOS72v 4GBpulsar-manager

组件下载

  • zookpeer
    本文是在学习环境下安装pulsar,因此直接使用pulsar自带的zk。
    如果是在生产环境中安装pulsar,单独部署ZK集群时,需要注意ZK的版本,尽量与pulsar使用的zk版本保持一致,避免版本兼容问题导致的未知错误。
  • jdk
    下载地址:https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
    pulsar2.11使用了jdk17进行编译,运行环境必须使用jdk17,否则会发生jdk版本不一致的错误:
java.lang.UnsupportedClassVersionError: 
org/apache/pulsar/PulsarStandaloneStarter has been compiled by a more recent version of the Java Runtime (class file version 61.0), 
this version of the Java Runtime only recognizes class file versions up to 55.0

部署pulsar-mananger时,只能使用jdk11,因此我单独部署到一台服务器,造成了些许麻烦。
如果想pulsar-manager和pulsar部署到同一台服务器,那么需要修改bkenv.sh和pulsar_env.sh,设置里面的JAVA_HOME。
题外话

pular在启动脚本中指定GC使用了ZGC。
bkenv.sh:
BOOKIE_GC=${BOOKIE_GC:-${PULSAR_GC:-"-XX:+UseZGC -XX:+PerfDisableSharedMem -XX:+AlwaysPreTouch"}}
pulsar_env.sh
PULSAR_GC=${PULSAR_GC:-"-XX:+UseZGC -XX:+PerfDisableSharedMem -XX:+AlwaysPreTouch"}
因此,如果使用jdk11,需要增加-XX:+UnlockExperimentalVMOptions参数,开启ZGC实验室特征。

单机启动

单机启动无需修改任何配置

# 前端单机启动
bin/pulsar standalone
# 后台单机启动
bin/pulsar-daemon start standalone

集群部署

安装jdk

# 解压jdk
tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/
# 增加JAVA_HOME配置
vi /etc/profile
# 在profile文件末尾增加
export JAVA_HOME=/usr/local/jdk-17.0.6
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
# 使profile文件生效
source /etc/profile

关闭防火墙

在所有节点上,关闭防火墙。

# 停止防火墙
systemctl stop firewalld
# 关闭防火墙
systemctl disable firewalld

部署pulsar

上传pulsar组件到v1、v2、v3节点

# 解压pulsar组件
tar -zxvf apache-pulsar-2.11.0-bin.tar.gz
# 进入pulsar下的/bin目录
chmod +x *

配置zk

创建zk所需的目录,分配zk节点编号

# 创建zk的数据存放目录
mkdir -pv /data/zookeeper/data
# 创建zk的日志存放目录
mkdir -pv /data/zookeeper/log
# 在v1节点上执行命令,指定zk的编号为1
echo 1 > /data/zookeeper/data/myid
# 在v1节点上执行命令,指定zk的编号为2
echo 2 > /data/zookeeper/data/myid
# 在v1节点上执行命令,指定zk的编号为3
echo 3 > /data/zookeeper/data/myid

修改conf/zookeeper.conf配置文件参数

# 当前zk节点的数据存放目录
dataDir=/data/zookeeper/data
# 当前zk节点的日志存放目录
dataLogDir=/data/zookeeper/log
# zk节点的服务器编号、服务器地址、LF通信端口、选举端口
server.1=172.16.206.251:2888:3888
server.2=172.16.206.252:2888:3888
server.3=172.16.206.253:2888:3888

在v1、v2、v3节点上,以后台服务的方式,启动zk服务

# 建议先前端启动zk,正常启动后,再后台启动
bin/pulsar zookeeper
# 启动zk服务
bin/pulsar-daemon start zookeeper
# ----------------------------------------------------------------------------------
# 检查zk是否正常启动,是否可以正常登录到zk控制台
bin/pulsar zookeeper-shell
# 关闭zk服务
bin/pulsar-daemon stop zookeeper

在所有节点的zk都启动后,在其中一个节点上初始化集群元数据

bin/pulsar initialize-cluster-metadata \
    --cluster pulsar-cluster \
    --metadata-store zk:172.16.206.251:2181,172.16.206.252:2181,172.16.206.253:2181 \
    --configuration-metadata-store zk:172.16.206.251:2181,172.16.206.252:2181,172.16.206.253:2181 \
    --web-service-url http://172.16.206.251:8080,172.16.206.252:8080,172.16.206.253:8080 \
    --web-service-url-tls https://172.16.206.251:8443,172.16.206.252:8443,172.16.206.253:8443 \
    --broker-service-url pulsar://172.16.206.251:6650,172.16.206.252:6650,172.16.206.253:6650 \
    --broker-service-url-tls pulsar+ssl://172.16.206.251:6651,172.16.206.252:6651,172.16.206.253:6651

集群元数据参数说明

参数说明
clusterpulsar集群名称
zookeeperzk集群连接参数,仅需要包含zk集群中的一个节点即可
configuration-storepulsar多集群部署时,实例配置可以存储到另外部署的zk集群,单集群部署时和-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,端口默认6650,不建议修改
broker-service-url-tls集群brokers提供TLS服务的URL,默认端口6551,不建议修改

配置bookie

创建bookie所需的目录

mkdir -pv /data/bookkeeper/journal
mkdir -pv /data/bookkeeper/ledgers

修改conf/bookkeeper.conf配置文件参数

# 分别在v1、v2、v3上设置对外发布地址,本机IP或者hostname
advertisedAddress=172.16.206.251
# zk服务器地址
zkServers=172.16.206.251:2181,172.16.206.252:2181,172.16.206.253:2181
# bookie目录地址,建议不要放在bookie的安装目录下,因为可以根据服务器磁盘数量(磁盘单独挂载)配置多个目录,提升读写效率
journalDirectory=/data/bookkeeper/journal
ledgerDirectories=/data/bookkeeper/ledgers

在v1、v2、v3节点上,以后台服务的方式,启动bookie服务

# 建议先前端启动bookie,能正常启动后,再后台启动,避免繁琐的去查看日志
bin/pulsar bookie
# 后台启动bookie服务
bin/pulsar-daemon start bookie
# ----------------------------------------------------------------------------------
# 验证bookie是否启动成功,出现Bookie sanity test succeeded则代表启动成功。
bin/bookkeeper shell bookiesanity
# 使用simpletest,测试bookie是否正常工作,3 bookie,100 entries
bin/bookkeeper shell simpletest --ensemble 3 --writeQuorum 3 --ackQuorum 3 --numEntries 100
# 关闭bookie服务
bin/pulsar-daemon stop bookie

配置broker

修改conf/broker.conf配置文件参数

# 集群名称,与zk初始化的cluster一致
clusterName=pulsar-cluster
# zk服务器地址,zookeeperServers参数不在使用
metadataStoreUrl=172.16.206.251:2181,172.16.206.252:2181,172.16.206.253:2181
# 存放集群元数据的zk地址,在多集群部署时,可以单独指定zk集群存放元数据,configurationStoreServers参数不在使用
configurationMetadataStoreUrl=172.16.206.251:2181,172.16.206.252:2181,172.16.206.253:2181
# 分别在v1、v2、v3上设置对外发布地址,本机IP或者hostname
advertisedAddress=172.16.206.251

在v1、v2、v3节点上,以后台服务的方式,启动broker服务

# 建议先前端启动broker,能正常启动后,再后台启动,避免繁琐的去查看日志
bin/pulsar broker
# 后台启动broker服务
bin/pulsar-daemon start broker
# ----------------------------------------------------------------------------------
# 关闭broker服务
bin/pulsar-daemon stop broker

部署pulsar-manager

注意:之前为安装pulsar我在每个节点上都使用jdk17,但是pulsar-manager不能选择jdk17,会导致服务无法启动。

上传pulsar-manager组件到v4节点,解压pulsar-manager组件

tar -zxvf apache-pulsar-manager-0.3.0-bin.tar.gz

将dist包拷贝到pulsar-manager目录下并更名为ui
启动pulsar-manager,注意:启动命令一定要在pulsar-manager的安装目录下执行,否则访问时,会发生ui目录找不到的问题

# 前端启动pulsar-manager
bin/pulsar-manager
# 后台启动pulsar-manager
nohup bin/pulsar-manager > pulsar-manager.log 2>&1 &
# 增加管理员账号
CSRF_TOKEN=$(curl http://172.16.206.234:7750/pulsar-manager/csrf-token) 
curl \
  -H "X-XSRF-TOKEN:$CSRF_TOKEN" \
  -H "Cookie: XSRF-TOKEN=$CSRF_TOKEN;" \
  -H 'Content-Type: application/json' \
  -X PUT http://172.16.206.234:7750/pulsar-manager/users/superuser \
-d '{"name":"pulsar","password":"pulsar","description":"dev","email":"lgdeng@yeah.net"}'  

启动后,页面访问地址:http://172.16.206.234:7750/ui/index.html

  • 新建Environment的配置说明
    环境名称,不用和集群名称相同
    Environment Name: pulsar-cluster
    Broker的webServicePort地址,默认为8080,只填写一个节点
    Service URL: http://172.16.206.251:8080
    bookie的httpServerPort地址,默认为8000,只填写一个节点
    Bookie URL: http://172.16.206.251:8000
 类似资料: