hivemq/hivemq-dns-cluster-discovery-extension

GitHub: hivemq/hivemq-dns-cluster-discovery-extension

为 HiveMQ 提供基于 DNS 的集群节点自动发现能力,使其能在 Kubernetes、OpenShift 等容器编排平台中实现弹性动态组网。

Stars: 11 | Forks: 3

:hivemq-link: https://www.hivemq.com :hivemq-support: {hivemq-link}/support/ :round-robin: https://en.wikipedia.org/wiki/Round-robin_DNS :hivemq-docker-image: https://github.com/hivemq/hivemq4-docker-images :dns-discovery-image: {hivemq-docker-image}#hivemq-dns-discovery-image :docker-swarm: {hivemq-docker-image}#local-cluster-with-docker-swarm = HiveMQ DNS 集群发现扩展 image:https://img.shields.io/badge/Extension_Type-Integration-orange?style=for-the-badge[Extension Type] image:https://img.shields.io/github/v/release/hivemq/hivemq-dns-cluster-discovery-extension?style=for-the-badge[GitHub release (latest by date),link=https://github.com/hivemq/hivemq-dns-cluster-discovery-extension/releases/latest] image:https://img.shields.io/github/license/hivemq/hivemq-dns-cluster-discovery-extension?style=for-the-badge&color=brightgreen[GitHub,link=LICENSE] image:https://img.shields.io/github/actions/workflow/status/hivemq/hivemq-dns-cluster-discovery-extension/check.yml?branch=master&style=for-the-badge[GitHub Workflow Status,link=https://github.com/hivemq/hivemq-dns-cluster-discovery-extension/actions/workflows/check.yml?query=branch%3Amaster] == 目的 此 HiveMQ 扩展使您能够使用容器编排平台(Kubernetes、Openshift)以及云环境来运行弹性 HiveMQ 集群。 它使用 DNS 作为集群发现机制,这对于动态扩缩容的环境非常理想。 只要 HiveMQ 实例通过 DNS 变得可用,就会在运行时动态添加或移除它们。 此扩展通常与 {hivemq-docker-image}[Docker] 和容器编排平台结合使用。 只要云环境 / 容器编排环境支持使用 {round-robin}[round-robin^] DNS A 记录进行服务发现,就可以使用此扩展。 == 安装说明 必须解压该扩展,并将完整的扩展文件夹放入 extensions 文件夹中。 完成此操作后,请按照“配置”章节中的说明,根据您的需求调整属性。 == 配置 应使用以下环境变量或属性键来自定义发现参数。 如果提供了属性文件(`conf/` 文件夹中的 `config.properties` ),扩展将使用此文件中的键值对,并在文件更改时重新加载这些值。 扩展将首先尝试加载属性文件。 如果文件不存在,扩展将不会尝试重新加载属性,而是尝试在每次迭代时从环境变量中读取,直到 broker 关闭。 *配置选项:* |======================================================================= |环境变量 |默认值 |属性键 |含义 |HIVEMQ_DNS_DISCOVERY_ADDRESS |- |discoveryAddress |提供 A 记录的地址,用作集群节点地址 |HIVEMQ_DNS_DISCOVERY_TIMEOUT |30 |resolutionTimeout |等待 DNS 解析完成的超时时间 |HIVEMQ_DNS_RELOAD_INTERVAL | 30 | reloadInterval | 用于更新所有 HiveMQ 集群节点地址的重载间隔。 | |======================================================================= == Metrics DNS 集群发现扩展提供了一组指标,可用于在仪表盘中监控其行为。 以下是可以使用的指标: 这两个计数器指标指示了为接收集群成员的 IP 地址而进行的 DNS 查询尝试是成功还是失败: ## com.hivemq.dns-cluster-discovery-extension.query.success.count com.hivemq.dns-cluster-discovery-extension.query.failed.count 此 gauge 显示了在上一次 DNS 查询期间接收到的当前已找到的集群成员 IP 地址数量: ## com.hivemq.dns-cluster-discovery-extension.resolved-addresses [[sample-dns-record]] == DNS 记录示例 以下列表展示了扩展期望并解析的 round-robin A 记录示例: .... $ dig tasks.hivemq ; <<>> DiG 9.10.3-P4-Debian <<>> tasks.hivemq ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21767 ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;tasks.hivemq. IN A ;; ANSWER SECTION: tasks.hivemq. 600 IN A 10.0.0.6 tasks.hivemq. 600 IN A 10.0.0.5 tasks.hivemq. 600 IN A 10.0.0.4 tasks.hivemq. 600 IN A 10.0.0.7 tasks.hivemq. 600 IN A 10.0.0.3 .... 此记录代表 overlay 网络上的一个 5 节点集群。 [[first-steps]] == 初始步骤 此图展示了 DNS 发现在容器引擎上通常是如何实现的。 如果在容器引擎之外使用 DNS 发现,相关组件会有所不同。 例如,当与 DNSaaS 解决方案结合使用时,DNS 条目将由所使用的编排解决方案来创建。 image::dns-discovery-diagram.png[DNS 发现可视化] 容器引擎为容器/pod 提供了 DNS 服务器,以改善 DNS 查询的缓存,并提供服务发现和容器主机名等附加功能。 此 DNS 服务器是 DNS 发现扩展与之通信的主要 endpoint。 DNS 服务器响应由编排引擎创建的预定义记录。 该记录包含集群中的容器/pod 列表,HiveMQ 随后将使用这些信息来发现其他节点。 [[usage]] == 容器环境使用 大多数容器编排环境都支持此类发现方式。 请参阅以下列表以获取一些示例: * https://kubernetes.io/docs/concepts/services-networking/service/#headless-services[Kubernetes^] * https://docs.docker.com/docker-cloud/apps/service-links/#discovering-containers-on-the-same-service-or-stack[Docker Swarm^] * https://mesosphere.github.io/mesos-dns/[Mesos^] * https://docs.openshift.com/container-platform/3.6/architecture/core_concepts/pods_and_services.html#headless-services[Openshift^] 有关使用上述发现机制的更多信息,请参阅 {dns-discovery-image}[DNS 发现镜像 README^] 要实现您自己的此类发现机制解决方案,您必须为您的 HiveMQ 部署提供以下任一条件: * 在您的云提供商的 DNS 服务上提供自定义 DNS 记录,其中包含您的 HiveMQ 实例的地址。 * 在部署中包含一个备用 DNS 服务器,它为 HiveMQ 实例提供常规 DNS 服务,并同时提供服务发现记录。 === Kubernetes 要在 Kubernetes 上使用 DNS 发现,您通常需要一个指向 HiveMQ 部署的 headless service,类似于以下配置: ## [source] ## kind: Service apiVersion: v1 metadata: name: hivemq-discovery annotations: service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" spec: selector: app: hivemq-cluster1 ports: - protocol: TCP port: 1883 targetPort: 1883 clusterIP: None NOTE: service 的 selector 和 name 非常重要。 selector 定义了在生成的 DNS 记录中会列出哪些 pod。 NOTE: name 将决定生成的 DNS 记录的 `service-name`,其格式通常为 `..svc.`。 === Docker Swarm Docker swarm 默认为服务发现提供 DNS 条目。 您只需创建一个服务即可,如 {docker-swarm}[DNS 发现镜像 README^] 所示。 == 需要帮助? 如果您遇到任何问题,我们很乐意提供帮助。 联系我们最好的地方是我们的 {hivemq-support}[支持]。 == 贡献 如果您想为 HiveMQ DNS Cluster Discovery Extension 做贡献,请参阅 link:CONTRIBUTING.md[贡献指南]。 == 许可证 HiveMQ DNS Cluster Discovery Extension 是在 `APACHE LICENSE, VERSION 2.0` 下授权的。 可以 link:LICENSE[在此处]找到该许可证的副本。
标签:HiveMQ, JS文件枚举, 中间件, 域名枚举, 子域名突变, 容器编排, 物联网, 请求拦截, 集群发现