配置内外网IP访问kafka集群

网友投稿 2866 2022-05-30

场景说明

在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访问kafka集群

映射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小时内删除侵权内容。

上一篇:对AWVS扫描规则的分析
下一篇:小花带你一周入门html+css(六)CSS进阶之兼容性与滤镜丨【WEB前端大作战】
相关文章