搭建 Pulsar 集群至少需要 3 個組件:ZooKeeper 集群、Bookkeeper 集群和 Broker 集群(Broker 是 Pulsar 的自身實例)。這三個集群組件如下:
Pulsar 的安裝包已包含了搭建集群所需的各個組件庫。無需單獨下載 ZooKeeper 安裝包和 BookKeeper 安裝包。(在實際生產環境中,ZooKeeper 我們并不僅僅應用在 Pulsar 上,包括 HBase 等其他的組件也需要依賴,所以生產環境 ZooKeeper 最好使用外置 ZooKeeper 集群環境)
注:如果是在內網測試環境搭建集群,為了避免防火墻造成端口開啟繁瑣,可以關閉服務器防火墻。
但是也可以在一臺機器上同時部署 ZooKeeper,Bookkeeper ,Broker ,也就是最少需要三臺機器就可以部署一個 Pulsar 集群。
pulsar消息隊列?其實也還可以在 3 臺機器上部署 ZooKeeper 集群,另外 3 臺機器部署 Bookkeeper 集群,另 3 臺機器部署 Broker 集群,也就是共需要消耗 9 臺機器。
當前,Pulsar 可運行在 64 位 macOS、Linux 和 Windows 上。要想運行 Pulsar,你需要安裝 64 位 JRE/JDK 8 或更新版本。
老周這里采用的是 Pulsar 2.9.1 版本。
安裝包下載:apache-pulsar-2.9.1-bin.tar.gz
老周這里本來是采用方式 1 來搭建的,踩了坑,Pulsar 2.9.1 版本中 PulsarZooKeeperClient 依賴的 ZooKeeper 是 3.6.3 版本,和我的 zookeeper 版本不兼容,我又不想換掉。所以還是用 Pulsar 內置的 ZooKeeper 吧,故采用方式 2 來搭建。
分布式部署和集群部署、這里老周是 Mac 系統,所以采用 Parallels Desktop 虛擬機來模擬 3 臺機器出來,如果你是 Windows 系統,可以采用 VMware 虛擬機。
虛擬機節點分配如下:
ip地址 | 節點名稱 | ZooKeeper | Bookkeeper | Broker |
---|---|---|---|---|
10.211.55.7 | pulsarCluster7 | QuorumPeerMain | Main | PulsarBrokerStarter |
10.211.55.8 | pulsarCluster8 | QuorumPeerMain | Main | PulsarBrokerStarter |
10.211.55.9 | pulsarCluster9 | QuorumPeerMain | Main | PulsarBrokerStarter |
配置三臺主機的/etc/hostname
文件,配置主機名稱。
各個主機分別修改主機名稱,比如 10.211.55.7 這臺主機的主機名稱修改成 pulsarCluster7。
配置/etc/hosts
,配置主機名和 ip 地址的映射關系。
10.211.55.7 pulsarCluster7
10.211.55.8 pulsarCluster8
10.211.55.9 pulsarCluster9
mysql分布式集群、如果主機名顯示還未生效
執行如下命令,讓修改的主機名和 ip 地址的映射關系立即生效。
hostname $(cat /etc/hostname)
上傳安裝包
把 Pulsar 的安裝包分別上傳到 pulsarCluster7、pulsarCluster8、pulsarCluster9 主機上去
解壓至 /opt 目錄
tar -zxf apache-pulsar-2.9.1-bin.tar.gz -C /opt
cd /opt/apache-pulsar-2.9.1/conf
vim zookeeper.conf
mongo集群搭建、tickTime、dataDir 是修改,其他都是新增。
tickTime=10000
dataDir=/var/riemann/zookeeper/data
dataLogDir=/var/riemann/zookeeper/logserver.1=pulsarCluster7:2888:3888
server.2=pulsarCluster8:2888:3888
server.3=pulsarCluster9:2888:3888
參數說明:
tickTime:服務器之間或客戶端與服務器之間維持心跳的時間間隔
dataDir:當前zookeeper節點的數據存放目錄
dataLogDir:當前zookeeper節點的日志存放目錄
server.1~3:為zookeeper集群的各節點指定編號
# pulsarCluster7、pulsarCluster8、pulsarCluster9都要操作
mkdir -p /var/riemann/zookeeper/data
mkdir -p /var/riemann/zookeeper/log# pulsarCluster7節點操作
echo 1 > /var/riemann/zookeeper/data/myid
# pulsarCluster8節點操作
echo 2 > /var/riemann/zookeeper/data/myid
# pulsarCluster9節點操作
echo 3 > /var/riemann/zookeeper/data/myid
執行后臺運行命令,這個命令是啟動 zookeeper:
cd /opt/apache-pulsar-2.9.1/bin
./pulsar-daemon start zookeeper
執行 zookeeper 客戶端連接命令:
cd /opt/apache-pulsar-2.9.1/bin
./pulsar zookeeper-shell
客戶端正常連接,就算 zookeeper 啟動好了。
spark分布式環境搭建?在另外兩臺服務器上也執行 ./pulsar-daemon start zookeeper
,啟動 zookeeper 之后,在其中一個 zookeeper 節點的機器上,初始化集群元數據(總共只需執行一次):
例如在 pulsarCluster7 上:
./pulsar initialize-cluster-metadata \
--cluster pulsar-cluster \
--zookeeper pulsarCluster7:2181 \
--configuration-store pulsarCluster7:2181 \
--web-service-url http://pulsarCluster7:8080,pulsarCluster8:8080,pulsarCluster9:8080 \
--web-service-url-tls https://pulsarCluster7:8443,pulsarCluster8:8443,pulsarCluster9:8443 \
--broker-service-url pulsar://pulsarCluster7:6650,pulsarCluster8:6650,pulsarCluster9:6650 \
--broker-service-url-tls pulsar+ssl://pulsarCluster7:6651,pulsarCluster8:6651,pulsarCluster9:6651
集群元數據說明:
標記 | 說明 |
---|---|
–cluster | 集群名稱 |
–zookeeper | ZooKeeper集群的“本地”連接字符串。 該連接字符串只需包含ZooKeeper集群任一臺機器。 |
–configuration-store | 整個集群實例的配置存儲連接字符串。 和–zookeeper標記一樣,該連接字符串只需包含ZooKeeper集群中的任一臺機器即可。 |
–web-service-url | 集群 web 服務的URL以及端口,這個URL應該是標準的DNS名稱,默認的端口是8080(我們不建議使用其他端口) |
–web-service-url-tls | 如果使用TLS,你必須為集群指定一個 TLS web 服務URL。默認端口是8443(我們不建議使用其他端口) |
–broker-service-url | Broker服務的URL,用于與集群中的brokers進行交互。 這個 URL 不應該使用和 web 服務 URL 同樣的 DNS名稱,而應該是用pulsar方案。 默認端口是6650(我們不建議使用其他端口)。 |
–broker-service-url-tls | 如果使用TLS,你必須為集群指定一個 TLS web 服務URL,以及用于集群中 broker TLS 服務的URL。 默認端口是6651(不建議使用其他端口)。 |
注:如果沒有DNS服務器,也可以使用多主機(multi-host)格式的service-url設置web-service-url,web-service-url-tls,broker-service-url,broker-service-url-tls。
看到這個日志的話,說明初始化 Broker 集群元數據成功了。
也可以通過./pulsar zookeeper-shell
進入 zk 控制臺,通過 ls /
查看所有 zk 節點。如果能看到 bookies,ledgers 等節點,則說明初始化成功了。
微服務分布式?如果需要關閉 zookeeper,可使用命令:
cd /opt/apache-pulsar-2.9.1/bin
./pulsar-daemon stop zookeeper
在每個部署 bookkeeper 的機器上,修改如下關鍵配置項:
mkdir -p /var/riemann/pulsar/data/journal
mkdir -p /var/riemann/pulsar/data/ledgerscd /opt/apache-pulsar-2.9.1/conf
vim bookkeeper.conf# 修改其第56行,修改本地ip地址。
advertisedAddress=pulsarCluster7
# 修改其第39行
journalDirectory=/var/riemann/pulsar/data/journal
# 修改其第400行
ledgerDirectories=/var/riemann/pulsar/data/ledgers
# 修改其第628行
zkServers=pulsarCluster7:2181,pulsarCluster8:2181,pulsarCluster9:2181
# 修改其第570行
prometheusStatsHttpPort=8100
注:
- prometheusStatsHttpPort默認是8000,但實際上在bookkeeper.conf中,httpServerPort默認也是8000,會導致端口被占用。
- 上面的advertisedAddress需要設置為對應機器的ip,而不是全設置為同一個,其它兩個機器同理設置成pulsarCluster8、pulsarCluster9。
- 參數說明:
advertisedAddress:指定當前節點的主機名或IP地址
zkServers:指定zookeeper集群,用來將bookkeeper節點的元數據存放在zookeeper集群
journalDirectories:當前bookkeeper節點的journal數據存放目錄。 如果需要提高磁盤寫入性能,可以指定多個目錄用來存放journal數據,關鍵是每一個目錄必須在不同的磁盤,不然反而會影響寫入性能。
ledgerDirectories:當前bookkeeper節點的ledger存放目錄
執行初始化元數據命令,若出現提示,輸入Y繼續(該步驟只需在一個bookie節點執行一次,總共只需執行一次):
./bookkeeper shell metaformat
在三臺機器上,分別輸入以下命令來以后臺進程啟動 bookie:
./pulsar-daemon start bookie
分布式融合。驗證是否啟動成功:
./bookkeeper shell bookiesanity
出現Bookie sanity test succeeded
則代表啟動成功。
如果需要關閉 bookkeeper,可使用命令:
./pulsar-daemon stop bookie
在每個部署 Broker 的機器上,通過編輯 Broker 配置文件,修改如下關鍵配置項:
cd /opt/apache-pulsar-2.9.1/conf
vim broker.conf# 修改其第101行,修改集群的名稱。
# clusterName與前面zookeeper初始化的cluster一致
clusterName=pulsar-cluster
# 修改其第23行,配置zk集群的地址。
zookeeperServers=pulsarCluster7:2181,pulsarCluster8:2181,pulsarCluster9:2181
# 修改其第26行,配置zk集群的地址。
configurationStoreServers=pulsarCluster7:2181,pulsarCluster8:2181,pulsarCluster9:2181
# 修改其第47行,更改為本地主機名。
advertisedAddress=pulsarCluster7
注:
- 上面的advertisedAddress需要設置為對應機器的ip,而不是全設置為同一個,其它兩個機器同理設置成pulsarCluster8、pulsarCluster9。
- 參數說明:
zookeeperServers:指定zookeeper集群,用來將broker節點的元數據存放在zookeeper集群
configurationStoreServers:多集群部署時管理多個pulsar集群元數據的zookeeper集群地址,單集群部署時可以和zookeeperServers設置一樣。
advertisedAddress:指定當前節點的主機名或IP地址
clusterName:指定pulsar集群名稱
在每個部署 Broker 的機器上,以后臺進程啟動 Broker。
cd /opt/apache-pulsar-2.9.1/bin
./pulsar-daemon start broker
# 注:pulsarCluster7、pulsarCluster8、pulsarCluster9 三個節點依次啟動
? 如果需要關閉 broker,可使用命令:
?./pulsar-daemon stop broker
查看集群 brokers 節點是否啟動成功
./pulsar-admin brokers list pulsar-cluster
我們部署正常的話,這一步會顯示如下結果;
“pulsarCluster7:8080”
“pulsarCluster9:8080”
“pulsarCluster8:8080”
代表此時集群內有存活的節點: pulsarCluster7、pulsarCluster8、pulsarCluster9,端口號都是8080。
到此,Pulsar 的分布式集群搭建成功!
pulsarCluster8 節點模擬消費者
pulsarCluster9 節點模擬生產者
安裝內置的 zookeeper 的過程中,遇到了錯誤。
Unable to read additional data from server sessionid 0x0, likely server has closed socket
把 tickTime 參數調成 10000 就好了。
也有可能是其它原因導致的:
systemctl status firewalld
systemctl stop firewalld
官網要求,jvm 內存需要在 2g,而我的虛擬機只有 1g 的內存,導致 broke r創建失敗。
這里需要關掉虛擬機增加內存。或者更改參數來調整分配的大小。
默認情況下,Pulsar 為啟動分配 2G JVM 堆內存。可以在 PULSAR_MEM 下的 conf/pulsar_env.sh 文件中修改。這是傳遞給 JVM 的額外選項。
但是修改這個之后發現還是報這個錯誤,所以可能這個必須要給 2G 以上的內存才可以。
重新分配內存之后,重新按照步驟依次啟動 zookeeper、bookeeper、broker,然后查看集群,三個節點的信息全部都正常。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态