Zookeeper的元数据存储
Pulsar使用Apache Zookeeper进行元数据存储、集群配置和协调
- 配置存储: 存储租户,命名域和其他需要全局一致的配置项
- 每个集群有自己独立的ZooKeeper保存集群内部配置和协调信息,例如归属信息,broker负载报告,BookKeeper ledger信息(这个是BookKeeper本身所依赖的)等等。
基于bookKeeper持久化存储
Apache Pulsar 为应用程序提供有保证的信息传递, 如果消息成功到达broker, 就认为其预期到达了目的地。
为了提供这种保证,未确认送达的消息需要持久化存储直到它们被确认送达。这种消息传递模式通常称为持久消息传递. 在Pulsar内部,所有消息都被保存并同步N份,例如,2个服务器保存四份,每个服务器上面都有镜像的RAID存储。
Pulsar用 Apache bookKeeper作为持久化存储。 bookKeeper是一个分布式的预写日志(WAL)系统,有如下几个特性特别适合Pulsar的应用场景:
- 使pulsar能够利用独立的日志,称为ledgers. 可以随着时间的推移为topic创建多个Ledgers
- 它为处理顺序消息提供了非常有效的存储
- 保证了多系统挂掉时Ledgers的读取一致性
- 提供不同的Bookies之间均匀的IO分布的特性
5.它在容量和吞吐量方面都具有水平伸缩性。能够通过增加bookies立即增加容量到集群中,并提升吞吐量
Bookies被设计成可以承载数千的并发读写的ledgers。 使用多个磁盘设备 (一个用于日志,另一个用于一6.般存储) ,这样Bookies可以将读操作的影响和对于写操作的延迟分隔开。
Ledger是一个只追加的数据结构,并且只有一个写入器,这个写入器负责多个bookKeeper存储节点(就是Bookies)的写入。 Ledger的条目会被复制到多个bookies。 Ledgers本身有着非常简单的语义:
1.Pulsar Broker可以创建ledeger,添加内容到ledger和关闭ledger。
2.当一个ledger被关闭后,除非明确的要写数据或者是因为写入器挂掉导致ledger关闭,ledger只会以只读模式打开。
3.最后,当ledger中的条目不再有用的时候,整个ledger可以被删除(ledger分布是跨Bookies的)。
Pulsar 代理
Pulsar客户端和Pulsar集群交互的一种方式就是直连Pulsar brokers。然而,在某些情况下,这种直连既不可行也不可取,因为客户端并不知道broker的地址。
例如在云环境或者Kubernetes以及其他类似的系统上面运行Pulsar,直连brokers就基本上不可能了。
Pulsar proxy 为这个问题提供了一个解决方案, 为所有的broker提供了一个网关, 如果选择运行了Pulsar Proxy. 所有的客户都会通过这个代理而不是直接与brokers通信
Pulsar分布式集群安装
- 搭建 Pulsar 集群至少需要 3 个组件:ZooKeeper 集群、BookKeeper 集群和 broker 集群(Broker 是 Pulsar 的自身实例)。这三个集群组件如下:
ZooKeeper 集群(3 个 ZooKeeper 节点组成)
bookie 集群(也称为 BookKeeper 集群,3 个 BookKeeper 节点组成)
broker 集群(3 个 Pulsar 节点组成)
- Pulsar 的安装包已包含了搭建集群所需的各个组件库。无需单独下载 ZooKeeper 安装包和 BookKeeper 安装包。(此处zookeeper使用外置的)
节点 | ip |
master | 172.31.1.100 |
slave1 | 172.31.1.101 |
slave2 | 172.31.1.102 |
jdk安装部署
下载网址:https://www.oracle.com/java/technologies/downloads/#java8
上传至主节点之后进行解压,然后配置环境变量
vim /root/.bash_profile
添加(注意改为自己解压出的地址)
export JAVA_HOME=/opt/module/jdk1.8.0_212 export PATH=$PATH:$JAVA_HOME/bin
zookeeper部署
下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
- 解压到指定目录,修改文件夹名称
tar -zxvf zookeeper-3.5.7.tar.gz -C /opt/module/ cd /opt/module mv apache-zookeeper-3.5.7-bin/ zookeeper
- 增加myid文件
cd /opt/module/zookeeper/ mkdir zkData cd zkData vim myid
写入0,保存退出
- 修改配置文件
cd /opt/module/zookeeper/conf mv zoo_sample.cfg zoo.cfg vim zoo.cfg
增加以下配置(如果已经有的就进行修改、这里要配置8887端口,默认8080和pulsar有冲突)
dataDir=/opt/module/zookeeper/zkData admin.serverPort=8887 server.1=master:2888:3888 server.2=slave1:2888:3888 server.3=slave2:2888:3888
- 分发至slave1、slave2节点
scp -r /opt/module/zookeeper root@slave1:/opt/module/ scp -r /opt/module/zookeeper root@slave2:/opt/module/
复制完成后到slave1和slave2上修改myid 分别为 2 3
- 到三台机器上进行启动
cd /opt/module/zookeeper bin/zkServer.sh start
6.查看状态、确保zk没有问题在往下
bin/zkServer.sh status
Pulsar部署
下载地址:https://pulsar.apache.org/zh-CN/download/
选择对应版本下载就可以了,这里我选用的2.8.1
- 在 Linux 服务器上创建二个文件夹: brokers、bookies
cd /export/server/ mkdir -p brokers mkdir -p bookies
- 将下载的pulsar安装包上传到linux服务器, 并解压,没有的目录自己创建一下
cd /export/software/ tar -zxf apache-pulsar-2.8.1-bin.tar.gz cd apache-pulsar-2.8.1 cp -r * /export/server/brokers/ cp -r * /export/server/bookies/
- 修改bookkeeper集群的配置文件
cd /export/server/brokers/conf/ vim broker.conf 修改第98行: 修改集群的名称 clusterName=pulsar-cluster 修改第23行: 配置zookeeper地址 zookeeperServers=172.31.1.100:2181,172.31.1.101:2181,172.31.1.102:2181 修改第26行: 配置zookeeper地址 configurationStoreServers=172.31.1.100:2181,172.31.1.101:2181,172.31.1.102:2181 修改第44行: 更改为本地ip地址 advertisedAddress=172.31.1.100
5.将配置好bookies目录和brokers目录发送到第二台和第三台
cd /export/server scp -r bookies/ brokers/ root@slave1:/export/server scp -r bookies/ brokers/ root@slave2:/export/server
6.修改第二台和第三台的broker的地址和bookies地址
第二台节点: cd /export/server/bookies/conf vim bookkeeper.conf 修改其第56行:修改本地ip地址 advertisedAddress=172.31.1.101 cd /export/server/brokers/conf/ vim broker.conf 修改第44行: 更改为本地ip地址 advertisedAddress=172.31.1.101 第三台节点: 都更改为对应IP地址即可
7.初始化元数据、主节点执行
cd /export/server/brokers/ bin/pulsar initialize-cluster-metadata \ --cluster pulsar-cluster \ --zookeeper 172.31.1.100:2181,172.31.1.101:2181,172.31.1.102:2181 \ --configuration-store 172.31.1.100:2181,172.31.1.101:2181,172.31.1.102:2181 \ --web-service-url http://172.31.1.100:8080,172.31.1.101:8080,172.31.1.102:8080 \ --web-service-url-tls https://172.31.1.100:8443,172.31.1.101:8443,172.31.1.102:8443 \ --broker-service-url pulsar://172.31.1.100:6650,172.31.1.101:6650,172.31.1.102:6650 \ --broker-service-url-tls pulsar+ssl://172.31.1.100:6651,172.31.1.101:6651,172.31.1.102:6651
8.启动bookie集群
先执行初始化(只需要在一台节点执行即可): 若出现提示,输入 Y,继续 cd /export/server/bookies bin/bookkeeper shell metaformat 依次在三台节点执行启动: cd /export/server/bookies bin/pulsar-daemon start bookie 验证是否启动: 可三台都检测 bin/bookkeeper shell bookiesanity 提示: Bookie sanity test succeeded 认为启动成功
9.启动broker
三台节点都需要执行: cd /export/server/brokers bin/pulsar-daemon start broker 检测是否启动: bin/pulsar-admin brokers list pulsar-cluster
10.测试集群
# 进入 brokers 目录,选取任一个 broker 节点执行命令即可 cd /export/server/brokers # 创建租户(租户名:my-tenant) ./bin/pulsar-admin tenants create my-tenant # 创建命名空间(命名空间名:my-tenant/my-namespace,它指定了租户 my-tenant) ./bin/pulsar-admin namespaces create my-tenant/my-namespace # 创建持久性分区topic(topic全名:persistent://my-tenant/my-namespace/my-topic;分区数为 3) ./bin/pulsar-admin topics create-partitioned-topic persistent://my-tenant/my-namespace/my-topic -p 3 # 更新命名空间为其指定集群名 ./bin/pulsar-admin namespaces set-clusters my-tenant/my-namespace --clusters pulsar-cluster # 构建消费者: ./bin/pulsar-client consume persistent://public/default/test -s "consumer-test" # 构建生产者 ./bin/pulsar-client produce persistent://public/default/test --messages "hello-pulsar"
如果消费者可以正常接收到消息就代表安装成功
Pulsar admin manger图形界面安装
Pulsar admin manger是基于Plusar的可视化界面,接下来进行安装
- 下载 pulsar-admin
cd /export/software wget https://dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz
- 解压压缩包
tar -zxf apache-pulsar-manager-0.2.0-bin.tar.gz -C /export/server/ cd /export/server/pulsar-manager 接着再次解压目录下的tar包 tar -xvf pulsar-manager.tar
- 拷贝dist包到 pulsar-manager目录下并更名为ui
cd /export/server/pulsar-manager/pulsar-manager cp -r ../dist ui
- 启动pulsar(这里默认启动是java -jar的方式,所以不要退出进程)
./bin/pulsar-manager
- 初始化超级用户密码 :
CSRF_TOKEN=$(curl http://localhost: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://localhost:7750/pulsar-manager/users/superuser -d '{"name": "pulsar", "password": "pulsar", "description": "test", "email": "username@test.org"}'
用户名为pulsar 密码为pulsar
- 访问Puslar UI
http://172.31.1.100:7750/ui/index.html
点击 new Environment, 设置集群环境即可
点击pulsar_cluster进入管理界面
如果想后台执行的话修改 vim /export/server/pulsar-manager/pulsar-manager/bin/pulsar-manager
加上nohup
启动命令为./bin/pulsar-manager &
声明
大部分来源于黑马:https://space.bilibili.com/415938397/search/video?keyword=pulsar