Pulsar 是一个支持多租户的、高性能的消息中间件。
本文介绍一下pulsar的集群搭建(在3台linux服务器上)
1.1 搭建 Pulsar
集群至少需要 3 个组件:ZooKeeper
集群、BookKeeper
集群和 broker
集群(Broker
是 Pulsar
的自身实例)。这三个集群组件如下:
① ZooKeeper
集群(多 个 ZooKeeper
节点组成)
② bookie
集群(也称为 BookKeeper
集群,多个 BookKeeper
节点组成)
③ broker
集群(多 个 Pulsar
节点组成)
1.2 Pulsar 的安装包已包含了搭建集群所需的各个组件库。无需单独下载 ZooKeeper 安装包和 BookKeeper 安装包。
1.3 如果是在内网测试环境搭建集群,为了避免防火墙造成端口开启繁琐,可以关闭服务器防火墙。
一台主机
3 台 Linux 裸机服务器,配置 4G,2 核
JDK 8 运行环境
下载 Pulsar 最新版本安装包
在3台Linux裸机服务器上安装 JDK(要求版本不低于 JDK 8)
3.1 下载jdk,通过ssh工具传至linux服务器上,此处放在/usr/java/目录下,然后解压 tar -zxvf jdk-8u144-linux-x64.tar.gz
3.2 编辑配置文件,配置环境变量。vi /etc/profile 添加以下配置信息
JAVA_HOME=/usr/java/jdk1.8.0_144
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
保存,然后 source /etc/profile
使配置文件生效
3.3 使用命令java -version
,若显示jdk版本,则安装成功
[root@localhost java]# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
[root@localhost java]#
按以上步骤,在另外两台linux服务器上也安装jdk
在工作目录下创建三个文件夹:zookeepers、brokers、bookies
cd /home/admin
mkdir zookeepers
mkdir brokers
mkdir bookies
把下载的 Pulsar 安装包上传到 Linux 服务器,解压安装包
tar -zxvf apache-pulsar-2.8.0-bin.tar.gz
把解压后的文件分别复制到 3 个文件夹
cp -ir /home/admin/apache-pulsar-2.8.0/* /home/admin/zookeepers/
cp -ir /home/admin/apache-pulsar-2.8.0/* /home/admin/brokers/
cp -ir /home/admin/apache-pulsar-2.8.0/* /home/admin/bookies/
按照以上步骤,在另外两台 Linux 服务器上也创建集群环境
5.1 新建文件夹,并写入配置内容
在目录/home/admin下
服务器1:
mkdir -p data/zookeeper
echo 1 > data/zookeeper/myid
服务器2:
mkdir -p data/zookeeper
echo 2 > data/zookeeper/myid
服务器3:
mkdir -p data/zookeeper
echo 3 > data/zookeeper/myid
5.2 配置 zookeeper.conf 文件
[root@localhost /]# cd /home/admin/zookeepers/conf/
[root@localhost conf]# ls
bkenv.sh discovery.conf functions_worker.yml presto schema_example.conf
bookkeeper.conf filesystem_offload_core_site.xml global_zookeeper.conf proxy.conf standalone.conf
broker.conf functions_log4j2.xml log4j2-scripts pulsar_env.sh websocket.conf
client.conf functions-logging log4j2.yaml pulsar_tools_env.sh zookeeper.conf
[root@localhost conf]# vi zookeeper.conf
#dataDir是修改,其他都是新增
dataDir=/home/admin/data/zookeeper
dataLogDir=/home/admin/data/zookeeper/log
server.1=IP1:2888:3888
server.2=IP2:2888:3888
server.3=IP3:2888:3888
dataDir:当前zookeeper节点的数据存放目录
dataLogDir:当前zookeeper节点的日志存放目录
server.1~3:为zookeeper集群的各节点指定编号
在另外两台服务器上,对 zookeeper.conf 文件进行完全相同的配置
5.3 在 zookeepers 目录中,执行启动命令
# 进入zookeepers目录
cd /home/admin/zookeepers
# 执行后台运行命令
bin/pulsar-daemon start zookeeper
在另外两台服务器上,也启动
5.4 验证 ZooKeeper 节点是否启动成功
在/home/admin/zookeepers目录下执行 zookeeper 客户端连接命令
bin/pulsar zookeeper-shell
进入命令行界面后,可完全使用 ZooKeeper 的各种命令,如 ls、get 等命令。使用 quit 命令退出命令行界面。
5.5 在任一个 ZooKeeper 节点,初始化集群元数据
在目录/home/admin/zookeepers下,执行命令
bin/pulsar initialize-cluster-metadata \
--cluster pulsar-cluster-zk \
--zookeeper IP1:2181 \
--configuration-store IP1:2181 \
--web-service-url http://IP1:8080,IP2:8080,IP3:8080 \
--web-service-url-tls https://IP1:8443,IP2:8443,IP3:8443 \
--broker-service-url pulsar://IP1:6650,IP2:6650,IP3:6650 \
--broker-service-url-tls pulsar+ssl://IP1:6651,IP2:6651,IP3:6651
集群元数据说明
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,不建议修改。
5.6 在目录/home/admin/zookeepers下查看集群元数据是否初始化成功
执行 ZooKeeper 客户端连接命令
bin/pulsar zookeeper-shell
然后使用zookeeper命令查看
ls /
[admin, bookies, counters, ledgers, loadbalance, managed-ledgers, namespace, pulsar, stream, zookeeper]
看到如图所内容,表示初始化成功
6.1 修改配置文件 bookkeeper.conf
# 进入配置文件目录
cd /home/admin/brokers/conf
# 编辑 bookkeeper.conf 文件
vi bookkeeper.conf
advertisedAddress=IP1
zkServers=IP1:2181,IP2:2181,IP3:2181
journalDirectories=/home/admin/bookies/tmp/journal
ledgerDirectories=/home/admin/bookies/tmp/ledger
prometheusStatsHttpPort=8100
advertisedAddress:指定当前节点的主机名或IP地址
zkServers:指定zookeeper集群,用来将bookkeeper节点的元数据存放在zookeeper集群
journalDirectories:当前bookkeeper节点的journal数据存放目录。 如果需要提高磁盘写入性能,可以指定多个目录用来存放journal数据,关键是每一个目录必须在不同的磁盘,不然反而会影响写入性能
ledgerDirectories:当前bookkeeper节点的ledger存放目录
注意
prometheusStatsHttpPort默认是8000,但实际上在bookkeeper.conf中,httpServerPort默认也是8000,会导致端口被占用。
上面的
advertisedAddress
需要设置为对应机器的ip,而不是全设置为同一个
6.2 初始化元数据,并启动 bookie 集群
# 进入 bookies 目录
cd /home/admin/bookies
# 执行初始化元数据命令;若出现提示,输入 Y,继续(只需在一个bookie节点执行一次)
bin/bookkeeper shell metaformat
# 以后台进程启动bookie
bin/pulsar-daemon start bookie
注意:若多次初始化元数据会导致 instanceId not matching 的问题
同样操作启动另外两个 bookie 节点
验证 bookie 是否启动成功
# 进入 bookies 目录
cd /home/admin/bookies
# 验证是否启动成功
bin/bookkeeper shell bookiesanity
# 出现如下显示,表示启动成功Bookie
sanity test succeeded.
7.1 修改配置文件 broker.conf
# 进入配置文件目录
cd /home/admin/brokers/conf
# 编辑 broker.conf 文件
vi broker.conf
zookeeperServers=IP1:2181,IP2:2181,IP3:2181
configurationStoreServers=IP1:2181,IP2:2181,IP3:2181
advertisedAddress=IP1
#clusterName与前面zookeeper初始化的cluster一致
clusterName=pulsar-cluster-zk
注意:
上面的
advertisedAddress
需要设置为对应机器的ip,而不是全设置为同一个参数说明:
zookeeperServers:指定zookeeper集群,用来将broker节点的元数据存放在zookeeper集群
configurationStoreServers:多集群部署时管理多个pulsar集群元数据的zookeeper集群地址,单集群部署时可以和zookeeperServers设置一样
advertisedAddress:指定当前节点的主机名或IP地址
clusterName:指定pulsar集群名称
7.2 启动 broker 节点
# 进入 brokers 目录
cd /home/admin/brokers
# 以后台进程启动 broker
bin/pulsar-daemon start broker
7.3 按照以上步骤,对另外两个 broker 节点做对应配置,并启动 broker 节点
查看集群中 brokers 节点信息,验证 broker 是否都启动成功
# 进入任一个 broker 目录
cd /home/admin/brokers
# 查看集群 brokers 节点情况
bin/pulsar-admin brokers list pulsar-cluster
IP1:8080
IP2:8080
IP3:8080
显示如上,代表成功。至此,Pulsar集群部署就完成了。