local_listener参数(1)---elaine

本文介绍了Oracle数据库中local_listener参数的设置及其与实例动态注册的关系。通过步骤演示如何配置local_listener参数,并验证实例是否成功注册到监听器上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于local_listener,官方文档是这样描述的:

Property

Description

Parameter type

String

Syntax

LOCAL_LISTENER = network_name

Default value

(ADDRESS = (PROTOCOL=TCP)(HOST=hostname)(PORT=1521)) where hostname is the network name of the local host.

Modifiable

ALTER SYSTEM

Basic

No

LOCAL_LISTENER specifies a network name that resolves to an address or address list of Oracle Net local listeners (that is, listeners that are running on the same machine as this instance). The address or address list is specified in the TNSNAMES.ORA file or other address repository as configured for your system.

个人理解:local_listener与监听的动态注册有关。

 

 

第一步,检查主机的信息

[oracle@secdb1 ~]$ cat /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1       localhost.localdomain   localhost

192.168.61.101  secdb1.localdomain      secdb1

第二步,检查local_listener参数

SYS@PROD>show parameter local_

 

NAME                  TYPE        VALUE

------------------------------------ ----------- ------------------------------

local_listener           string

第三步,启动监听

[oracle@secdb1 ~]$ lsnrctl

 

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 26-JUL-2012 21:07:27

 

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

 

Welcome to LSNRCTL, type "help" for information.

 

LSNRCTL> start

Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...

 

TNSLSNR for Linux: Version 10.2.0.1.0 - Production

Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=secdb1.localdomain)(PORT=1521)))

 

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production

Start Date                26-JUL-2012 21:07:32

Uptime                    0 days 0 hr. 0 min. 1 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=secdb1.localdomain)(PORT=1521)))

The listener supports no services

The command completed successfully

第四步,等待实例注册成功

LSNRCTL> status

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production

Start Date                26-JUL-2012 21:07:32

Uptime                    0 days 0 hr. 0 min. 47 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=secdb1.localdomain)(PORT=1521)))

Services Summary...

Service "PROD" has 1 instance(s).

  Instance "PROD", status READY, has 1 handler(s) for this service...

Service "PROD_XPT" has 1 instance(s).

  Instance "PROD", status READY, has 1 handler(s) for this service...

The command completed successfully

 

结论:(1)由“(DESCRIPTION = (ADDRESS =(PROTOCOL=tcp) (HOST =secdb1.localdomain)(PORT =1521 )))”可以得出,实例PROD确实注册到监听上了。监听所使用的protocoltcp,使用的端口是1521。这一动态注册过程是由PMON进程作用的。

结论:(2)动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP),因为pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,如果需要向非默认监听注册,则需要配置local_listener参数!

 

~~新手上路,多多指教~~

   小妞elaine

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26863369/viewspace-737093/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26863369/viewspace-737093/

[root@localhost apps]# cat kafka1.yml version: "3.6" services: kafka1: container_name: kafka1 image: 'bitnami/kafka:3.6.1' mem_limit: 4g ulimits: nproc: 65535 nofile: 65535 user: root ports: - '19092:9092' - '19093:9093' environment: - KAFKA_CFG_NODE_ID=1 - KAFKA_ENABLE_KRAFT=yes - KAFKA_CFG_PROCESS_ROLES=broker,controller - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kd.suufood.com:19092 - KAFKA_BROKER_ID=1 - KAFKA_KRAFT_CLUSTER_ID=iZWRiSqjZAlYwlKEqHFQWI - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@172.23.0.11:9093,2@172.23.0.12:9093,3@172.23.0.13:9093 - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_HEAP_OPTS=-Xmx2G -Xms1G - KAFKA_JVM_PERFORMANCE_OPTS="-Xss256k" volumes: - /data/new_public/kafka/broker01:/bitnami/kafka:rw networks: netkafka: ipv4_address: 172.23.0.11 kafka2: container_name: kafka2 image: 'bitnami/kafka:3.6.1' user: root ports: - '29092:9092' - '29093:9093' environment: - KAFKA_CFG_NODE_ID=2 - KAFKA_ENABLE_KRAFT=yes - KAFKA_CFG_PROCESS_ROLES=broker,controller - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kd.suufood.com:29092 - KAFKA_BROKER_ID=2 - KAFKA_KRAFT_CLUSTER_ID=iZWRiSqjZAlYwlKEqHFQWI - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@172.23.0.11:9093,2@172.23.0.12:9093,3@172.23.0.13:9093 - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M volumes: - /data/new_public/kafka/broker02:/bitnami/kafka:rw networks: netkafka: ipv4_address: 172.23.0.12 kafka3: container_name: kafka3 image: 'bitnami/kafka:3.6.1' user: root ports: - '59092:9092' - '59093:9093' environment: - KAFKA_CFG_NODE_ID=3 - KAFKA_ENABLE_KRAFT=yes - KAFKA_CFG_PROCESS_ROLES=broker,controller - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kd.suufood.com:39092 - KAFKA_BROKER_ID=3 - KAFKA_KRAFT_CLUSTER_ID=iZWRiSqjZAlYwlKEqHFQWI - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@172.23.0.11:9093,2@172.23.0.12:9093,3@172.23.0.13:9093 - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M volumes: - /data/new_public/kafka/broker03:/bitnami/kafka:rw networks: netkafka: ipv4_address: 172.23.0.13 networks: netkafka: driver: bridge ipam: config: - subnet: 172.23.0.0/25
最新发布
03-19
<think>嗯,用户给了一个Docker Compose文件,想要我帮忙解释或者分析一下。首先,我需要仔细看看这个文件的结构和内容。看起来这是一个配置了三个Kafka节点的集群,使用KRaft模式运行,也就是去除了ZooKeeper的依赖。用户可能是在搭建Kafka集群时遇到了问题,或者想要确认配置是否正确。 首先,文件里用了Docker Compose版本3.6,定义了一个服务,包含kafka1、kafka2、kafka3三个服务。每个服务都用了bitnami/kafka:3.6.1镜像,这应该是官方的一个镜像版本。接下来,每个容器都有不同的端口映射,比如kafka119092映射到宿主机的9092,这可能是因为在同一台机器上运行多个实例,避免端口冲突。 然后看环境变量部分,这里有很多Kafka的配置参数。比如KAFKA_ENABLE_KRAFT=yes,说明启用了KRaft模式。KAFKA_CFG_PROCESS_ROLES设置了broker和controller,这意味着每个节点同时充当broker和controller角色,这是KRaft架构的特点。不过,注意到kafka1的内存限制是4g,而其他两个是较小的内存,这可能影响性能,用户是否知道这点? 再看网络配置,每个容器都有一个静态的IPv4地址,属于同一个子网netkafka。这有助于节点之间的通信。但是检查KAFKA_CFG_CONTROLLER_QUORUM_VOTERS,里面列出了三个节点的IP和端口,都是9093。看起来是正确的,但需要确认这些IP是否真的能互通,以及端口是否开放。 另外,每个服务的advertised.listeners配置了不同的外部端口,比如19092、29092、39092,对应的域名是kd.suufood.com。这里可能需要确认该域名是否解析到宿主机的正确IP,否则客户端可能无法连接。 还有,volumes部分挂载了宿主机的目录到容器内,确保数据持久化。路径是否正确?权限是否足够,因为容器以root用户运行,可能需要检查宿主机的目录权限。 用户可能的问题包括:集群是否配置正确,节点能否正常通信,客户端连接是否成功,或者是否有配置错误导致服务启动失败。比如,KRaft模式下controller的配置是否正确,quorum voters的IP是否正确,端口是否开放,以及内存分配是否合理。 需要指出可能的错误点,比如kafka3的端口映射是59092和59093,但advertised.listeners配置的是39092,这会导致客户端连接失败,因为宿主机端口59092映射到容器9092,但广告地址是39092,端口不匹配。用户可能需要将advertised.listeners的端口改为59092,或者调整宿主机端口映射,确保内外端口一致。 另外,检查KAFKA_BROKER_ID是否应该和NODE_ID一致?在KRaft模式下,NODE_ID应该唯一,而BROKER_ID可能已经被弃用,或者需要保持一致。需要确认当前版本的Kafka是否还使用BROKER_ID,或者是否由NODE_ID代替。如果配置了BROKER_ID,可能会引起混淆或错误。 最后,建议用户检查日志,确认每个节点是否成功加入集群,网络是否通畅,以及客户端配置是否正确使用广告地址和端口。</think>以下是对您提供的Kafka集群Docker Compose文件的逐层解析: --- ### 一、基础配置分析 1. **版本声明** `version: "3.6"` 表示使用Docker Compose v3.6语法,支持较新的配置特性 2. **网络架构** - 自定义桥接网络`netkafka`,子网`172.23.0.0/25` - 每个Kafka节点分配**静态IP**(如`172.23.0.11`),确保固定通信地址 --- ### 二、核心服务配置(以kafka1为例) #### 1. 容器基础参数 ```yaml container_name: kafka1 image: 'bitnami/kafka:3.6.1' # 使用KRaft模式的官方镜像 mem_limit: 4g # 容器内存限制(注意kafka2/3配置不同) ports: - '19092:9092' # 客户端通信端口映射 - '19093:9093' # Controller通信端口 volumes: - /data/.../broker01:/bitnami/kafka:rw # 数据持久化目录 ``` #### 2. KRaft模式关键配置 | 环境变量 | 作用说明 | |---------|---------| | `KAFKA_ENABLE_KRAFT=yes` | 启用KRaft模式(去ZooKeeper化) | | `KAFKA_CFG_PROCESS_ROLES=broker,controller` | 节点同时承担Broker和Controller角色 | | `KAFKA_CFG_CONTROLLER_QUORUM_VOTERS` | 集群控制器节点列表(需与所有节点一致) | #### 3. 监听器配置解析 ```bash KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kd.suufood.com:19092 ``` - `PLAINTEXT`:客户端通信协议 - `CONTROLLER`:集群内部控制器通信 - **注意**:`advertised.listeners`中的端口需与宿主机映射端口一致(如`19092`对应`9092`) --- ### 三、潜在问题排查点 1. **端口映射一致性** kafka3配置中: ```yaml ports: - '59092:9092' # 宿主机59092 → 容器9092 environment: - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kd.suufood.com:39092 ``` **矛盾点**:广告地址端口`39092`与映射端口`59092`不一致,客户端将无法连接 2. **内存分配差异** - kafka1分配`4G`内存,kafka2/3仅`512M`,可能影响集群稳定性 - 建议通过`KAFKA_HEAP_OPTS`统一调整堆内存 3. **网络连通性验证** 需确保: ```bash # 测试节点间通信 docker exec kafka1 nc -zv 172.23.0.12 9093 docker exec kafka2 nc -zv 172.23.0.13 9093 ``` --- ### 四、操作建议 1. **修改kafka3广告地址** ```yaml KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kd.suufood.com:59092 ``` 2. **日志检查命令** ```bash docker logs -f kafka1 | grep -i 'Registered Broker' ``` 3. **集群状态验证** ```bash # 进入任意容器执行 kafka-metadata-shell.sh \ --snapshot /bitnami/kafka/data/__cluster_metadata-0/quorum/00000000000000000000.log ``` 通过以上配置调整和验证步骤,可确保KRaft模式集群正常运作。建议使用`docker-compose up -d`启动服务后,持续监控节点日志确认选举状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值