集群概述:
5台,8c16g,400G SSD/台,选择高性能机型c5.2xlarge。每天各自部署一个zk, broker, bookie。
使用openjdk11
目录:
(1).aws上制作pulsar节点镜像
1.制作模版机
1.1.创建EC2实例
1.2.配置pulsar模版机
1.2.1.新建用户pulsar
1.2.2.安装基本软件
1.2.3.配置pulsar
1.2.3.1.前置准备
1.2.3.2.zookeeper配置文件
1.2.3.3.bookeeper配置文件
1.2.3.4.broker配置文件
2.制作镜像
(2).通过镜像开启5台aws实例
(3).永久修改每台机器的hostname
(4).配置ssh免密方便配置文件同步
(5).修改配置文件写入实际IP
1.zookeeper配置修改
2.修改bookkeeper配置
3.修改broker配置
4.同步修改后的配置
4.1.sync-files.sh
4.2.pulsar-biz-cluster-node-ip.txt
4.3.执行同步
5.每个节点单独配置项
(6).启动pulsar集群
1.启动zookeeper集群
2.初始化集群元数据
3.启动bookie集群
4.启动broker集群
(1).aws上制作pulsar节点镜像
1.制作模版机
1.1.创建EC2实例
登陆后挂应用/数据盘:
mkfs -t xfs /dev/nvme1n1
建立挂载点目录:
mkdir /app
创建的目录挂载卷。
mount /dev/nvme1n1 /app
加到/etc/fstab中:(磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载)。
/dev/nvme1n1 /app xfs defaults 1 1
1.2.配置pulsar模版机
1.2.1.新建用户pulsar
禁止用root用户操作。
useradd app
将挂载点/app完整权限赋予给app。
chown -R app:app /app
1.2.2.安装基本软件
sudo hostnamectl set-hostname --static pulsar-biz-cluster-node-1
sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum update -y
yum install -y lsof telnet lrzsz nc
sudo amazon-linux-extras install java-openjdk11
yum install java-11-openjdk-11.0.12.0.7-0.amzn2.0.2.x86_64
yum install java-11-openjdk-devel-11.0.12.0.7-0.amzn2.0.2.x86_64
/etc/profile增加环境变量:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.amzn2.0.2.x86_64
source /etc/profile使其生效。
1.2.3.配置pulsar
全部在用户app下操作。
1.2.3.1.前置准备
mkdir -p /app/3rd
mkdir -p /app/logs
mkdir -p /app/data
mkdir -p /app/download
下载:
wget https://archive.apache.org/dist/pulsar/pulsar-2.8.0/apache-pulsar-2.8.0-bin.tar.gz
tar -xzvf apache-pulsar-2.8.0-bin.tar.gz
mv apache-pulsar-2.8.0 /app/3rd/
1.2.3.2.zookeeper配置文件
mkdir -p /app/data/pulsar-2.8.0-zookeeper
mkdir -p /app/logs/pulsar-2.8.0
cd apache-pulsar-2.8.0
vim conf/zookeeper.conf
增加配置:
server.1=zookeeper-1-ip:2888:3888
server.2=zookeeper-2-ip:2888:3888
server.3=zookeeper-3-ip:2888:3888
修改配置:
metricsProvider.httpPort=8000
dataDir=/app/data/pulsar-2.8.0-zookeeper
zk1-ip到zk3-ip是占位符。
echo n > /app/data/pulsar-2.8.0-zookeeper/myid
n是占位符。
修改日志存放路径:pulsar的所有组件都用的同一个日志目录
vim /app/3rd/apache-pulsar-2.8.0/bin/pulsar-daemon
PULSAR_LOG_DIR=/app/logs/pulsar-2.8.0
1.2.3.3.bookeeper配置文件
mkdir -p /app/data/pulsar-2.8.0-bookkeeper/journal
mkdir -p /app/data/pulsar-2.8.0-bookkeeper/ledgers
vim conf/bookkeeper.conf:
修改
zkServers=zookeeper-1-ip:2181,zookeeper-2-ip:2181,zookeeper-3-ip:2181
由于是集群,自动恢复功能必须开(HA):默认是true
autoRecoveryDaemonEnabled=true
# The http server port to listen on. Default value is 8080.
# Use `8000` as the port to keep it consistent with prometheus stats provider
#原值8000
httpServerPort=8001
# Default port for Prometheus metrics exporter,原值是8000
prometheusStatsHttpPort=8001
修改数据存储位置:
journalDirectory=/app/data/pulsar-2.8.0-bookkeeper/journal
ledgerDirectories=/app/data/pulsar-2.8.0-bookkeeper/ledgers
1.2.3.4.broker配置文件
Broker 配置中有一些非常重要的参数,这些参数可以确保每个Broker 连接到已部署的 ZooKeeper 集群。需要确认 zookeeperServers 和 configurationStoreServers 配置项的值是正确的。在当前情况下,由于只有一个集群,没有单独用来存储配置的 Zookeeper 集群,那么配置项configurationStoreServers和zookeeperServers 是一样的值。
vim conf/broker.conf
zookeeperServers=zookeeper-1-ip:2181,zookeeper-2-ip:2181,zookeeper-3-ip:2181
configurationStoreServers=zookeeper-1-ip:2181,zookeeper-2-ip:2181,zookeeper-3-ip:2181
你必须配置集群的名字( 初始化集群元数据 提供的集群名字必须和这个配置项匹配):
clusterName=pulsar-biz-cluster
开启prometheus的所有metrics:
# Enable topic level metrics
exposeTopicLevelMetricsInPrometheus=true
# Enable consumer level metrics. default is false
exposeConsumerLevelMetricsInPrometheus=true
# Enable producer level metrics. default is false
exposeProducerLevelMetricsInPrometheus=true
# Enable managed ledger metrics (aggregated by namespace). default is false
exposeManagedLedgerMetricsInPrometheus=true
# Enable cursor level metrics. default is false
exposeManagedCursorMetricsInPrometheus=true
# Enable expose the precise backlog stats.
# Set false to use published counter and consumed counter to calculate, this would be more efficient but may be inaccurate.
# Default is false.
exposePreciseBacklogInPrometheus=false
如果不设置为本机ip,会使用hostname:
advertisedAddress=要写broker所在机器的ip
#关闭自动创建topic的功能
allowAutoTopicCreation=false
2.制作镜像
(2).通过镜像开启5台aws实例
统一选择高性能机型c5.2xlarge:
(3).永久修改每台机器的hostname
sudo hostnamectl set-hostname --static pulsar-biz-cluster-node-n
n从1到5。
(4).配置ssh免密方便配置文件同步
每台机器都要执行:在app用户下执行
ssh-keygen
在~/.ssh目录下生成两个文件(id_rsa id_rsa.pub)文件,再把每台机器的id_rsa.pub文件内容放到pulsar-biz-cluster-node-1的对pulsar用户下的.ssh目录的authorized_keys里,格式形如:
ssh-rsa xxx hadoop@pulsar-biz-cluster-node-1
注意:authorized_keys的权限是600。
所有机器都要更改。
同时要把hosts也改了,否则ssh找不到主机名。
10.0.32.239 pulsar-biz-cluster-node-1
10.0.39.6 pulsar-biz-cluster-node-2
10.0.36.175 pulsar-biz-cluster-node-3
10.0.40.248 pulsar-biz-cluster-node-4
10.0.38.216 pulsar-biz-cluster-node-5
(5).修改配置文件写入实际IP
在pulsar-biz-cluster-node-1上进行配置,然后通过脚本文件scp同步到其余4台node。
1.zookeeper配置修改
/app/3rd/apache-pulsar-2.8.0/conf/zookeeper.conf
server.1=zookeeper-1-ip:2888:3888
server.2=zookeeper-2-ip:2888:3888
server.3=zookeeper-3-ip:2888:3888
2.修改bookkeeper配置
/app/3rd/apache-pulsar-2.8.0/conf/bookkeeper.conf
zkServers=zookeeper-1-ip:2181,zookeeper-2-ip:2181,zookeeper-3-ip:2181
3.修改broker配置
/app/3rd/apache-pulsar-2.8.0/conf/broker.conf
zookeeperServers=zookeeper-1-ip:2181,zookeeper-2-ip:2181,zookeeper-3-ip:2181
configurationStoreServers=zookeeper-1-ip:2181,zookeeper-2-ip:2181,zookeeper-3-ip:2181
4.同步修改后的配置
4.1.sync-files.sh
#!/bin/bash
list=`cat $1`
for ip in $list
do
echo $ip
scp /app/3rd/apache-pulsar-2.8.0/conf/zookeeper.conf pulsar@$ip:/app/3rd/apache-pulsar-2.8.0/conf/zookeeper.conf
scp /app/3rd/apache-pulsar-2.8.0/bin/pulsar-daemon pulsar@$ip:/app/3rd/apache-pulsar-2.8.0/bin/pulsar-daemon
scp /app/3rd/apache-pulsar-2.8.0/conf/bookkeeper.conf pulsar@$ip:/app/3rd/apache-pulsar-2.8.0/conf/bookkeeper.conf
scp /app/3rd/apache-pulsar-2.8.0/conf/broker.conf pulsar@$ip:/app/3rd/apache-pulsar-2.8.0/conf/broker.conf
done
4.2.pulsar-biz-cluster-node-ip.txt
10.0.32.239
10.0.39.6
10.0.36.175
10.0.40.248
10.0.38.216
4.3.执行同步
sh ./sync-files.sh pulsar-biz-cluster-node-ip.txt
5.每个节点单独配置项
每个节点的zk-id不同,依次配置:
echo 1 > /app/data/pulsar-2.8.0-zookeeper/myid
echo 2 > /app/data/pulsar-2.8.0-zookeeper/myid
echo 3 > /app/data/pulsar-2.8.0-zookeeper/myid
echo 4 > /app/data/pulsar-2.8.0-zookeeper/myid
echo 5 > /app/data/pulsar-2.8.0-zookeeper/myid
如果不设置为本机ip,会使用hostname:我们设置成本机ip
advertisedAddress=ip
(6).启动pulsar集群
1.启动zookeeper集群
5台节点依次启动zookeeper:
/app/3rd/apache-pulsar-2.8.0/bin/pulsar-daemon start zookeeper
2.初始化集群元数据
bin/pulsar initialize-cluster-metadata --cluster pulsar-biz-cluster --zookeeper 10.0.36.69:2181 --configuration-store 10.0.36.69:2181 --web-service-url http://10.0.36.69:8080 --web-service-url-tls https://10.0.36.69:8443 --broker-service-url pulsar://10.0.36.69:6650 --broker-service-url-tls pulsar ssl://10.0.36.69:6651
--cluster 集群名字
--zookeeper ZooKeeper集群的“本地”连接字符串。该连接字符串只需包含ZooKeeper集群任一台机器。
--configuration-store 整个集群实例的配置存储连接字符串。和--zookeeper标记一样,该连接字符串只需包含ZooKeeper集群中的任一台机器即可。
--web-service-url 集群 web 服务的URL以及端口,这个URL应该是标准的DNS名称,默认的端口是8080(官方不建议使用其他端口)。broker端口。
--web-service-url-tls 如果使用TLS,你必须为集群指定一个 TLS web 服务URL。默认端口是8443(官方不建议使用其他端口)。broker端口。
--broker-service-url Broker服务的URL,用于与集群中的brokers进行交互。这个 URL 不应该使用和 web 服务 URL 同样的 DNS名称,而应该是用pulsar方案。默认端口是6650(官方不建议使用其他端口)。broker端口。
--broker-service-url-tls 如果使用TLS,你必须为集群指定一个 TLS web 服务URL,以及用于集群中 broker TLS 服务的URL。默认端口是6651(官方不建议使用其他端口)。broker端口。
把ip换成一个节点的即可。
3.启动bookie集群
/app/3rd/apache-pulsar-2.8.0/bin/pulsar-daemon start bookie
你可以通过运行BookKeeper shell上的bookiesanity命令验证 bookie 是否正常工作:
$ bin/bookkeeper shell bookiesanity
这个命令会在本地的 bookie 创建一个临时的 BookKeeper ledger,往里面写一些条目,然后读取它,最后删除这个 ledger。
4.启动broker集群
/app/3rd/apache-pulsar-2.8.0/bin/pulsar-daemon start broker