Apache RocketMQ这个错误日志只出现在从节点上 主节点却没有问题 为什么?这个方法的org.apache.rocketmq.broker.out.BrokerOuterAPI#getTimerCheckPoint如下行调用出错
RemotingCommand response = this.remotingClient.invokeSync(MixAll.brokerVIPChannel(true, addr), request, 3000);
那时候是不是还没切换,所以单向配置没问题。主备切换场景中,谁都可能成为主,所以要把同组broker所有ip都配置到白名单中。这部分内容 4.x还是5.x都没有变过的
https://rocketmq.apache.org/zh/docs/4.x/bestPractice/04access,
此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”
问题1:如果该错误只在从节点上出现,可能是因为从节点与主节点的配置不同步或数据同步不完整导致的。建议您检查从节点与主节点的配置是否一致,并确保从节点已成功拉取到主节点的数据。
此外,也有可能是由于网络原因导致的,建议您检查从节点和主节点之间的网络连接是否正常。
问题2:如果您在Kubernetes集群中部署RocketMQ,并且需要动态获取Pod的IP地址并设置白名单,可以考虑使用ConfigMap来存储Pod的IP地址,并使用downwardAPI来获取Pod的IP地址。然后将这些IP地址添加到broker.conf文件中的plain_acl.yml
配置文件中的globalWhiteRemoteAddresses
中。
例如,在ConfigMap中定义以下数据:
apiVersion: v1
kind: ConfigMap
metadata:
name: pod-ip
data:
ip: $(POD_IP)
然后,在broker.conf文件中配置以下内容:
plain:
plainLogin:
users:
- username: admin
password: 123456
accessKey: rocketmq1
secretKey: rocketmq2
whiteRemoteAddress:
- file:/opt/rocketmq/conf/plain_acl.yml
- username: test
password: 123456
accessKey: rocketmq3
secretKey: rocketmq4
whiteRemoteAddress:
- file:/opt/rocketmq/conf/plain_acl.yml
globalWhiteRemoteAddresses: ${ROCKETMQ_DEFAULT_PLAIN_WHITE_REMOTE_ADDRESSES}
最后,在Kubernetes Pod的环境变量中设置以下内容:
containers:
- name: rocketmq-broker
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: ROCKETMQ_DEFAULT_PLAIN_WHITE_REMOTE_ADDRESSES
valueFrom:
configMapKeyRef:
name: pod-ip
key: ip
这样可以动态地将Pod的IP地址添加到broker.conf文件中的plain_acl.yml
配置文件中。
问题3:是的,您可以在plain_acl.yml
配置文件中设置globalWhiteRemoteAddresses
来指定白名单,支持IP地址和域名。如果您要使用域名,请确保所有Broker都能够解析该域名。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/