云原生时代消息中间件Pulsar(介绍、集群安装部署、管理页面安装部署) 2

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 云原生时代消息中间件Pulsar(介绍、集群安装部署、管理页面安装部署)

Zookeeper的元数据存储

Pulsar使用Apache Zookeeper进行元数据存储、集群配置和协调

  1. 配置存储: 存储租户,命名域和其他需要全局一致的配置项
  1. 每个集群有自己独立的ZooKeeper保存集群内部配置和协调信息,例如归属信息,broker负载报告,BookKeeper ledger信息(这个是BookKeeper本身所依赖的)等等。

基于bookKeeper持久化存储

Apache Pulsar 为应用程序提供有保证的信息传递, 如果消息成功到达broker, 就认为其预期到达了目的地。


为了提供这种保证,未确认送达的消息需要持久化存储直到它们被确认送达。这种消息传递模式通常称为持久消息传递. 在Pulsar内部,所有消息都被保存并同步N份,例如,2个服务器保存四份,每个服务器上面都有镜像的RAID存储。


Pulsar用 Apache bookKeeper作为持久化存储。 bookKeeper是一个分布式的预写日志(WAL)系统,有如下几个特性特别适合Pulsar的应用场景:

  1. 使pulsar能够利用独立的日志,称为ledgers. 可以随着时间的推移为topic创建多个Ledgers
  2. 它为处理顺序消息提供了非常有效的存储
  3. 保证了多系统挂掉时Ledgers的读取一致性
  4. 提供不同的Bookies之间均匀的IO分布的特性

5.它在容量和吞吐量方面都具有水平伸缩性。能够通过增加bookies立即增加容量到集群中,并提升吞吐量

Bookies被设计成可以承载数千的并发读写的ledgers。 使用多个磁盘设备 (一个用于日志,另一个用于一6.般存储) ,这样Bookies可以将读操作的影响和对于写操作的延迟分隔开。

19d720274c84440bb00fc27eb20971bc.pngLedger是一个只追加的数据结构,并且只有一个写入器,这个写入器负责多个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分布式集群安装

  1. 搭建 Pulsar 集群至少需要 3 个组件:ZooKeeper 集群、BookKeeper 集群和 broker 集群(Broker 是 Pulsar 的自身实例)。这三个集群组件如下:

ZooKeeper 集群(3 个 ZooKeeper 节点组成)

bookie 集群(也称为 BookKeeper 集群,3 个 BookKeeper 节点组成)

broker 集群(3 个 Pulsar 节点组成)

  1. 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/

  1. 解压到指定目录,修改文件夹名称
tar -zxvf zookeeper-3.5.7.tar.gz -C /opt/module/
cd /opt/module
mv apache-zookeeper-3.5.7-bin/ zookeeper
  1. 增加myid文件
cd /opt/module/zookeeper/
mkdir zkData
cd zkData
vim myid

写入0,保存退出

  1. 修改配置文件
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
  1. 分发至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

  1. 到三台机器上进行启动
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

  1. 在 Linux 服务器上创建二个文件夹: brokers、bookies
cd /export/server/
mkdir -p brokers
mkdir -p bookies


  1. 将下载的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/
  1. 修改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的可视化界面,接下来进行安装

  1. 下载 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
  1. 解压压缩包
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
  1. 拷贝dist包到 pulsar-manager目录下并更名为ui
cd /export/server/pulsar-manager/pulsar-manager
cp -r ../dist ui
  1. 启动pulsar(这里默认启动是java -jar的方式,所以不要退出进程
./bin/pulsar-manager
  1. 初始化超级用户密码 :
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

  1. 访问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

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
3月前
|
Ubuntu Cloud Native 测试技术
百度搜索:蓝易云【云原生之使用Docker部署ubuntu测试环境】
请注意,以上步骤仅是简单的使用Docker部署Ubuntu测试环境的示例。在实际应用中,您可能需要根据测试需求和应用场景进行更多的配置和优化。同时,在退出容器时,容器并未删除,您可以使用 `docker rm <容器名称>`命令来删除容器。在进行测试时,请谨慎操作,并确保对Docker的使用有一定的了解,以避免不必要的问题。
41 2
|
3月前
|
存储 Cloud Native Docker
百度搜索:蓝易云【云原生之使用Docker部署Notepad个人任务管理工具】
这样,你就成功地使用Docker部署了Notepad个人任务管理工具。通过Docker部署Notepad可以使应用的安装和配置更加便捷,并且可以隔离应用环境,避免影响到宿主机的系统。希望以上教程对你有所帮助!如果你有其他问题,请随时继续提问。
56 0
|
1月前
|
Kubernetes Cloud Native Devops
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
54 1
|
2月前
|
IDE Cloud Native 开发工具
云原生之在Docker环境下部署Atheos云IDE平台
【2月更文挑战第3天】云原生之在Docker环境下部署Atheos云IDE平台
368 2
|
2月前
|
存储 消息中间件 Java
新一代消息中间件—Apache Pulsar
新一代消息中间件—Apache Pulsar
98 0
新一代消息中间件—Apache Pulsar
|
3月前
|
Cloud Native 关系型数据库 分布式数据库
《永恒岛》引入云原生数据库PolarDB实现游戏全球部署和更流畅的游戏体验
三九互娱通过采用阿里云PolarDB作为核心数据库,备份和恢复效率提高10倍以上
75 1
|
3月前
|
存储 Kubernetes Cloud Native
云原生离线工作流编排利器 -- 分布式工作流 Argo 集群
云原生离线工作流编排利器 -- 分布式工作流 Argo 集群
105125 2
|
3月前
|
关系型数据库 MySQL 数据库
百度搜索:蓝易云【云原生之使用Docker部署mysql数据库教程】
这样,你就成功地使用Docker部署了MySQL数据库。通过Docker部署MySQL可以使数据库的安装和配置更加便捷,并且可以隔离数据库环境,避免影响到宿主机的系统。希望以上教程对你有所帮助!如果你有其他问题,请随时继续提问。
282 0
|
3月前
|
弹性计算 运维 Cloud Native
阿里云云原生弹性方案,用弹性解决集群资源利用率难题
本文主要介绍了通过弹性,实现成本优化,解决集群资源利用率难题。
92522 8
|
3月前
|
Cloud Native 测试技术 Linux
云原生之使用Docker部署slash书签共享平台
云原生之使用Docker部署slash书签共享平台
85 3