官方的安装文档:https://pulsar.apache.org/docs/2.11.x/deploy-bare-metal/
PULSAR_MEM=${PULSAR_MEM:-"-Xms2g -Xmx2g -XX:MaxDirectMemorySize=4g"}
BOOKIE_MEM=${BOOKIE_MEM:-${PULSAR_MEM:-"-Xms2g -Xmx2g -XX:MaxDirectMemorySize=2g"}}
因为内存有限,我只在笔记本上安装了4个2v4GB的虚拟机,并适当调低了jvm内存参数,否则可能导致服务无法启动。
节点名称 | 节点IP | 操作系统 | 资源配置 | 安装组件 |
---|---|---|---|---|
v1 | 172.16.206.251 | CentOS7 | 2v 4GB | zk、bookie、broker |
v2 | 172.16.206.252 | CentOS7 | 2v 4GB | zk、bookie、broker |
v3 | 172.16.206.253 | CentOS7 | 2v 4GB | zk、bookie、broker |
v4 | 172.16.206.234 | CentOS7 | 2v 4GB | pulsar-manager |
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
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组件到v1、v2、v3节点
# 解压pulsar组件
tar -zxvf apache-pulsar-2.11.0-bin.tar.gz
# 进入pulsar下的/bin目录
chmod +x *
创建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
集群元数据参数说明
参数 | 说明 |
---|---|
cluster | pulsar集群名称 |
zookeeper | zk集群连接参数,仅需要包含zk集群中的一个节点即可 |
configuration-store | pulsar多集群部署时,实例配置可以存储到另外部署的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所需的目录
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
修改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我在每个节点上都使用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