配置內外網IP訪問kafka集群
場景說明
在kafka使用場景中,有時希望訪問kafka集群時內網和外網可以通過不同的IP訪問,而kafka集群只配置了內網IP的訪問接口。本文對雙網卡(一個網卡IP對應內網、一個網卡IP對應外網)和單網卡(對應內網IP)兩種場景提供訪問Kafka集群的方式。
配置方式
下面配置方式以FusionInsight HD中的使用方式說明。
場景一:雙網卡
配置原理
Kafka Broker節點主機配置雙網卡,一個網卡對應內網IP段,供內網訪問使用,一個網卡對應外網IP段,供外網訪問使用。
配置原理是:把Broker對應主機的內外網IP都加入到Kafka listener配置中,內外網使用對應的IP去訪問。
配置前準備
1.?????? 確定內外網IP的對應關系
文中以FI雙平面舉例,三個節點,各個節點管理IP(外網)和業務IP(內網)對應關系如下圖:
業務平面IP是192.168網段,目前此網段3個節點IP可訪問Kafka集群,管理平面IP是8.5網段,此網段3個節點IP不可以正常訪問kafka集群。下文假設需要把8.5網段當成外部可訪問的網段平面。
2.?????? 安裝Kafka客戶端并查看配置
1)Kafka客戶端的安裝方式見產品文檔中軟件安裝的配置客戶端部分。
2)創建具有Kafkaadmin權限的用戶,具體見產品文檔中添加用戶和角色部分。
3)登錄Kafka客戶端,查看Kafka各節點的信息
切換到Kafka客戶端安裝目錄,例如“/opt/kafkaclient”。
cd /opt/kafkaclient
執行以下命令,配置環境變量。
source bigdata_env
執行以下命令,進行用戶認證。(普通模式跳過此步驟)
kinit 組件業務用戶
執行以下命令,切換到Kafka客戶端安裝目錄。
cd Kafka/kafka/bin
執行./kafka-broker-info.sh --zookeeper zk業務IP:24002/kafka,查詢結果為kafka節點的brokerid與kafka業務ip節點的對應關系。
4)后臺查看目前集群中listener.security.protocol.map和listeners兩個參數的配置
查看Kafka集群各個節點上的/opt/huawei/Bigdata/FusionInsight_Current/1_XX_Broker/etc/server.properties路徑,其中1_XX_Broker修改為集群中的具體路徑,查看并拷貝保存server.properties文件中的listener.security.protocol.map和listeners配置文件信息到本地。
具體配置方式
說明:listener.security.protocol.map是-名稱和安全協議之間的映射,-名稱與安全協議這個鍵值對以冒號分隔,映射條目之間以逗號分隔。listeners是kafka的-,配置格式是:-名稱://IP:Port,不同-配置間用逗號隔開。
本文環境中broker-1節點這兩個參數設置如下:
listener.security.protocol.map = PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL,TRACE:SASL_PLAINTEXT
listeners = SASL_PLAINTEXT://192.168.131.10:21007,PLAINTEXT://192.168.131.10:21005,SSL://192.168.131.10:21008,SASL_SSL://192.168.131.10:21009,TRACE://192.168.131.10:21013
具體配置方式如下:
1)? 在原listener.security.protocol.map配置中添加新IP訪問的-名稱和訪問協議,例如,使用SASL_PLAINTEXT協議,則新增映射EXTERNAL_SASL_PLAINTEXT:SASL_PLAINTEXT,EXTERNAL_SASL_PLAINTEXT是自定義-名稱,SASL_PLAINTEXT是協議名,kafka中支持的協議類型有PLAINTEXT、SASL_PLAINTEXT、SASL_SSL、SSL四種。
2)? 在各個節點的原listeners配置中添加新IP訪問地址EXTERNAL_SASL_PLAINTEXT://8.5.131.10:21112,EXTERNAL_SASL_PLAINTEXT必須與listener.security.protocol.map中新添加的-名一致,8.5.131.10為新增的訪問Kafka的IP,21112為此IP訪問的端口號。注意:各個節點上的listeners不一樣,區別是IP地址不同,各個節點上對應的是本機的IP,修改時,新增的IP地址需與原IP地址是對應的。端口號必須與原配置中的端口號不同,且端口未被使用。查看端口是否使用方式:lsof -i:21112,21112為查詢的端口號,如果沒有查到信息則此端口未被使用。
3)? 修改各個節點的listener.security.protocol.map信息:
執行kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21007 --add-config listener.security.protocol.map=[PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL,TRACE:SASL_PLAINTEXT ,EXTERNAL_SASL_PLAINTEXT:SASL_PLAINTEXT] --command-config ../config/consumer.properties
--entity-name對應參數1表示brokerid,是kafka-broker-info.sh中查詢出的Broker_ID;--bootstrap-server參數是原集群訪問的地址,--command-config參數是consumer.properties的絕對或者相對路徑,文件中的安全協議security.protocol參數必須與--bootstrap-server中的端口對應;listener.security.protocol.map的值是步驟1中修改后的協議,執行時必須添加“[]”,否則執行報錯。
執行時按./kafka-broker-info.sh --zookeeper zk業務IP:24002/kafka查詢出的brokerid依次執行(本文中有三個kafka節點,因此上述命令執行三次,即命令中的
--entity-name 分別設置為 1,2,3)。
4)? 修改各個節點的listeners信息:
執行kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21005 --add-config listeners=[PLAINTEXT://192.168.131.10:21005,SASL_PLAINTEXT://192.168.131.10:21007,SSL://192.168.131.10:21008,SASL_SSL://192.168.131.10:21009,TRACE://192.168.131.10:21013, EXTERNAL_SASL_PLAINTEXT://8.5.131.10:21112]
--entity-name對應參數1表示brokerid;--bootstrap-server參數是原集群訪問的地址,--command-config參數是consumer.properties的絕對或者相對路徑,文件中的安全協議參數必須與--bootstrap-server中的端口對應;listeners中的IP必須與brokerid是一一對應,具體對應關系是kafka-broker-info.sh中brokerid與listeners中原配置IP以及新增IP一一對應。執行時按brokerid依次執行。
例如,本文中對應關系如下:
BrokerID
原kafka訪問IP
新增Kafka訪問IP
1
192.168.131.10
8.5.131.10
2
192.168.131.11
8.5.131.11
3
192.168.131.12
8.5.131.12
修改時,--entity-name 1對應的listeners中的IP是原IP 192.168.131.10和新增IP 8.5.131.10。
5)? 配置完成后原IP可繼續訪問,新添加的IP按新配置的端口和協議訪問,例如,EXTERNAL_SASL_PLAINTEXT對應的是SASL_PLAINTEXT協議,生產數據的命令是kafka-verifiable-producer.sh --max-messages 100 --topic mytest --broker-list 8.5.131.11:21112 --producer.config ../config/producer.properties
說明:配置時,這兩個參數原本的配置不能刪除,只能在原來的配置上增加新的配置,否則使用kafka-configs.sh命令會報錯。添加新的配置后,zk上/brokers/ids/目錄下各節點的信息也會改變,可能造成kafka-broker-info.sh信息的展示與添加配置前不同。
例如,listeners配置時新添加的協議在原來協議后面,則不會改變zk上/brokers/ids/目錄下各節點的host信息,kafka-broker-info.sh仍顯示原IP與brokerid的映射關系。listeners=[PLAINTEXT://192.168.131.10:21005,SASL_PLAINTEXT://192.168.131.10:21007,SSL://192.168.131.10:21008,SASL_SSL://192.168.131.10:21009,TRACE://192.168.131.10:21013 ,EXTERNAL_SASL_PLAINTEXT://8.5.131.10:21112]
而listeners配置時新添加的協議在原來協議前面,則可能會改變zk上/brokers/ids/目錄下各節點的host信息,kafka-broker-info.sh顯示新IP與brokerid的映射關系。
listeners=[ EXTERNAL_SASL_PLAINTEXT://8.5.131.10:21112,PLAINTEXT://192.168.131.10:21005,SASL_PLAINTEXT://192.168.131.10:21007,SSL://192.168.131.10:21008,SASL_SSL://192.168.131.10:21009,TRACE://192.168.131.10:21013]
場景二:單網卡
配置原理
Kafka Broker節點主機只對應一個網卡,供內網訪問使用,防火墻映射出一個可供外網訪問的IP,Kafka每個節點內網IP和端口與映射外網相同IP的不同端口,外網訪問時,使用此映射的IP和端口。
配置原理是:把Broker對應主機的內網IP和端口加入到Kafka listener配置中,Broker對應的外網IP和端口加入到kafka advertised.listener配置中,外網使用對應的IP和端口去訪問,實際訪問的還是內網的IP和端口。
配置前準備
1.?????? 網絡映射新的IP和端口
此方案中不同節點映射為同一IP不同端口,映射關系如下:
原IP
原端口
映射IP
映射端口
192.168.131.10
21112
8.5.131.10
21027
192.168.131.11
21112
8.5.131.10
21028
192.168.131.12
21112
8.5.131.10
21029
192.168網段是原集群中的業務IP,8.5網段是新映射的IP,外網可直接訪問此網段。訪問時,不同端口實際上訪問的是對應的內網IP。
2.?????? 安裝Kafka客戶端并查看配置
1)Kafka客戶端的安裝方式見產品文檔中軟件安裝的配置客戶端部分。
2)創建具有Kafkaadmin權限的用戶,具體見產品文檔中添加用戶和角色部分。
3)登錄Kafka客戶端,查看Kafka各節點的信息
切換到Kafka客戶端安裝目錄,例如“/opt/kafkaclient”。
cd /opt/kafkaclient
執行以下命令,配置環境變量。
source bigdata_env
執行以下命令,進行用戶認證。(普通模式跳過此步驟)
kinit 組件業務用戶
執行以下命令,切換到Kafka客戶端安裝目錄。
cd Kafka/kafka/bin
執行./kafka-broker-info.sh --zookeeper zk業務IP:24002/kafka,查詢結果為kafka節點的brokerid與kafka業務ip節點的對應關系。
4)后臺查看目前集群中listener.security.protocol.map和listeners兩個參數的配置
查看Kafka集群各個節點上的/opt/huawei/Bigdata/FusionInsight_Current/1_XX_Broker/etc/server.properties路徑,其中1_XX_Broker修改為集群中的具體路徑,查看并拷貝保存server.properties文件中的listener.security.protocol.map和listeners配置文件信息到本地。
具體配置方式
說明:listener.security.protocol.map是-名稱和安全協議之間的映射,-名稱與安全協議這個鍵值對以冒號分隔,映射條目之間以逗號分隔。listeners是kafka的-,配置格式是:-名稱://IP:Port,不同-配置間用逗號隔開。advertised.listeners是kafka對外開放的-,配置格式是:-名稱://IP:Port,不同-配置間用逗號隔開。
本文環境中broker-1節點這兩個參數設置如下:
listener.security.protocol.map = PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL,TRACE:SASL_PLAINTEXT
listeners = SASL_PLAINTEXT://192.168.131.10:21007,PLAINTEXT://192.168.131.10:21005,SSL://192.168.131.10:21008,SASL_SSL://192.168.131.10:21009,TRACE://192.168.131.10:21013
具體配置方式如下:
1) 在原listener.security.protocol.map配置中添加新IP訪問的-名稱和訪問協議,例如,使用SASL_PLAINTEXT協議,則新增映射EXTERNAL_SASL_PLAINTEXT:SASL_PLAINTEXT,EXTERNAL_SASL_PLAINTEXT是自定義-名稱,SASL_PLAINTEXT是協議名,kafka中支持的協議類型有PLAINTEXT、SASL_PLAINTEXT、SASL_SSL、SSL四種。
2) 在各個節點的原listeners配置中添加新IP訪問地址EXTERNAL_SASL_PLAINTEXT://8.5.131.10:21112,EXTERNAL_SASL_PLAINTEXT必須與listener.security.protocol.map中新添加的-名一致,8.5.131.10為新映射的外網訪問Kafka的IP,21112為此IP訪問的端口號。注意:各個節點上的listeners不一樣,區別是IP地址不同,各個節點上對應的是本機的IP,新映射的IP地址是一樣的。修改時,新增的IP地址對應的端口號必須與原配置中的端口號不同,且端口未被使用。查看端口是否使用方式:lsof -i:21112,21112為查詢的端口號,如果沒有查到信息則此端口未被使用。
3) 修改各個節點的listener.security.protocol.map信息:
執行kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21007 --add-config listener.security.protocol.map=[PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL,TRACE:SASL_PLAINTEXT ,EXTERNAL_SASL_PLAINTEXT:SASL_PLAINTEXT] --command-config ../config/consumer.properties
--entity-name對應參數1表示brokerid,是kafka-broker-info.sh中查詢出的Broker_ID;--bootstrap-server參數是原集群訪問的地址,--command-config參數是consumer.properties的絕對或者相對路徑,文件中的安全協議security.protocol參數必須與--bootstrap-server中的端口對應;listener.security.protocol.map的值是步驟1中修改后的協議,執行時必須添加“[]”,否則執行報錯。
執行時按./kafka-broker-info.sh --zookeeper zk業務IP:24002/kafka查詢出的brokerid依次執行(本文中有三個kafka節點,因此上述命令執行三次,即命令中的
--entity-name 分別設置為 1,2,3)。
4) 修改各個節點的listeners信息:
執行kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21005 --add-config listeners=[PLAINTEXT://192.168.131.10:21005,SASL_PLAINTEXT://192.168.131.10:21007,SSL://192.168.131.10:21008,SASL_SSL://192.168.131.10:21009,TRACE://192.168.131.10:21013, EXTERNAL_SASL_PLAINTEXT:// 192.168.131.10:21112]
--entity-name對應參數1表示brokerid;--bootstrap-server參數是原集群訪問的地址,--command-config參數是consumer.properties的絕對或者相對路徑,文件中的安全協議參數必須與--bootstrap-server中的端口對應;listeners中的IP必須與brokerid是一一對應。執行時按brokerid依次執行。注意此時EXTERNAL_SASL_PLAINTEXT對應的是內網IP和內網配置的端口。
5) 修改各個節點的advertised.listeners信息:
執行kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21005 --add-config advertised.listeners=[PLAINTEXT://192.168.131.10:21005,SASL_PLAINTEXT://192.168.131.10:21007,SSL://192.168.131.10:21008,SASL_SSL://192.168.131.10:21009,TRACE://192.168.131.10:21013, EXTERNAL_SASL_PLAINTEXT://8.5.131.10:21027]
--entity-name對應參數1表示brokerid;--bootstrap-server參數是原集群訪問的地址,--command-config參數是consumer.properties的絕對或者相對路徑,文件中的安全協議參數必須與--bootstrap-server中的端口對應;advertised.listeners中的原IP必須與brokerid是一一對應,新增IP的端口必須與此節點對應的映射端口一一對應。執行時按brokerid依次執行。注意此時EXTERNAL_SASL_PLAINTEXT對應的是映射的外網IP和外網訪問的端口。
6) 配置完成后原IP可繼續訪問,新添加的IP按新配置的端口和協議訪問,例如,EXTERNAL_SASL_PLAINTEXT對應的是SASL_PLAINTEXT協議,生產數據的命令是kafka-verifiable-producer.sh --max-messages 100 --topic mytest --broker-list 8.5.131.10:21027 --producer.config ../config/producer.properties
說明:配置時,這兩個參數原本的配置不能刪除,只能在原來的配置上增加新的配置,否則使用kafka-configs.sh命令會報錯。
回退方式
1.?????? 如果刪除此次配置,針對各個節點在kafka客戶端執行如下兩條命令:
kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21005 --delete-config listener.security.protocol.map --command-config ../config/consumer.properties
kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21005 -- delete-config listeners --command-config ../config/consumer.properties
kafka-configs.sh --entity-type brokers --entity-name 1 --alter --bootstrap-server 192.168.131.10:21005 -- delete-config advertised.listeners --command-config ../config/consumer.properties
執行時按./kafka-broker-info.sh --zookeeper zk業務IP:24002/kafka查詢出的brokerid依次執行刪除。刪除時各個節點配置都需要刪除,各個節點命令僅--entity-name參數不一致。此刪除方式僅刪除listener.security.protocol.map和listeners相關的配置,對其他配置無影響,刪除后這兩個參數恢復為默認配置。刪除后需重啟Kafka集群。
分布式 Kafka
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。