在BM站點啟動多個LB Broker並搭配域名

只在BM用這種方式, 公有雲sa, hz不適用本文

目標

  • 希望讓kafka cluster外的client能用一組固定的host去訪問kafka cluster, 相同host不同port

    • ex.

  • 且不要像NodePort那樣, 還要在每個client主機上的hosts手動加上resolve record

前置作業 - 請BM站點維運同仁幫忙映射LB和域名

  • 目前是要找陳磊

  • 要跟他說, 請把這3個要暴露的url

    • kafka.bm.wise-paas.com.cn:19092

    • kafka.bm.wise-paas.com.cn:19093

    • kafka.bm.wise-paas.com.cn:19094

  • 映射到下面這3個LoadBalancer service

    • roykfk-0-external

    • roykfk-1-external

    • roykfk-2-external

  • 要跟他確認LB EXTERNAL-IP/Port的組合為何, 這樣才能在我們的deploy.sh陣列裡配置正確

    • ex. 是將172.21.92.212:19092映射到kafka.bm.wise-paas.com.cn:19092, 以此類推

    • 注意, 是映射LB svc的EXTERNAL-IP和Port, 不是LB svc的nodePort喔

設定方式 (deploy.sh)

  • export SERVICE_TYPE="LoadBalancer"

    • bm站點是私有雲的關係, 要映射域名只能用LB, 其他站點不一定

  • export FIRST_LISTENER_PORT=19092

    • 起始的port要跟暴露的第一個port相同, chart裡有邏輯會跑迴圈對每個broker設定

  • export LB_EXTERNAL_ADVERTISED_LISTENERS={"kafka.bm.wise-paas.com.cn:19092"\,"kafka.bm.wise-paas.com.cn:19093"\,"kafka.bm.wise-paas.com.cn:19094"}

    • 這個值會在內部chart做陣列處理, 將每個url分別帶進broker裡

  • export EXTERNAL_LOAD_BALANCER_IP={"172.21.92.212"\,"172.21.92.213"\,"172.21.92.214"}

    • 這個是LoadBalancer EXTERNAL-IP, 此順序必須跟平台那邊映射域名的ip:port組合相同

    • 平台的人幫忙做的映射可能是172.21.92.212:19092,172.21.92.213:19093,172.21.92.214:19094

      • 那此陣列第一個元素就不能是172.21.92.213, 否則會組成172.21.92.213:9092

驗證方式

用Conductor測基本連線

但Conductor就只能測到如此而已, 因為multibroker要收費, 沒辦法測收發訊息

自己寫Code測連線還送資料

用這段code測負載平衡時, 請配合MP monitor觀察pod networking和disk用量是否有平均分配到多個broker

helm chart修改幅度

  • 為了能實現相同host不同port的機制, 有去改原本chart裡的template和values

  • 主要是想辦法讓每個broker的advertised.listener都吃到正確的EXTERNAL URL

    • 原本的chart提供的方法是不同host相同port, 跟我們需求不同 (跟cloud kafka一樣)

Last updated

Was this helpful?