问题标签 [consul]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ansible - 在 Consul 的键/值对中保存列表
我想这可能适用于任何键/值存储类型,但我主要使用 Consul 进行存储。我需要一种将列表保存在键值中的方法。但是,元素周围的引号被删除。
我已经尝试了所有这些,问题是我需要它们作为有效列表返回,以便我可以通过 Ansible w/ 运行它with_flattened
Ansible 任务:
我需要遍历列表并执行进一步的操作。但是,我似乎无法正确解析元素。
consul - Consul 中的 Bootstrap expect=1 导致集群中出现奇怪的行为
尝试一次启动一个节点集群,我对 bootstrap-expect 值有点困惑。
它的设置方式是使用 bootstrap-expect 启动 consul,然后在它启动后consul join
运行
目前,部署集 bootstrap-expect 将其设置为集群中的节点数,并在该数之后选举领导者。
然而,当 bootstrap-expect 设置为 1 时(思考过程是这样我们可以拥有一个集群而无需等待所有节点),就会发生一些奇怪的事情。
因此,首先,每个节点都认为它是领导者——这是预期的,因为 bootstrap-expect 设置为 1。但是在相互执行 consul join 之后,没有选出新的集群领导者——发生的事情很奇怪——每个节点cluster 仍然认为自己是集群的领导者。
为什么节点在加入集群时不选举新的领导者?或者至少尊重现有的领导者?
apache-zookeeper - 在使用 Zookeeper、Consul 或 etcd 等注册中心进行主节点选举时,如何防止两个主节点同时处于活动状态?
tl;博士
即使您使用 Zookeeper、Consul 或 etcd 等注册中心之一实施 master 选举,似乎总是存在一种竞争条件,即旧 master 没有意识到它不再是 master 并尝试写入,而新 master 是写入畅通,导致同时写入两个服务实例,这是我们想要避免的。我们如何在没有这种竞争条件的情况下实现主选举?
详细的问题陈述
假设我们想使用其中一个注册中心(例如 Zookeeper、Consul 或 etcd)来实现主节点选举以进行故障转移。
假设服务 S1、S2、S3 有 3 个实例,每个实例在同一台机器上都有对应的注册节点,当前 S1 为主,S2 和 S3 为从。
此外,S1、S2、S3 都将共享状态存储在注册表中,但我们不希望多个实例同时写入该状态,因为并发访问可能会使状态不一致。
假设 S1 正在对存储在注册表中的共享状态进行写操作。也就是在再次检查是否是leader之前会执行更多的写操作。
假设此时有一个网络分区。在一个分区上是 S1。在另一个分区上是 S2 和 S3,所以它有仲裁。
注册中心正确地将 S2 识别为新的领导者,并使 S1 作为领导者无效。
S2 激活是因为它是新的领导者,并开始对存储在注册表中的共享状态进行一系列写入操作。
分区已修复。
此时 S1 和 S2 都会同时对注册表执行写操作,并且由于分区已修复,它们的写操作都会成功,这可能会导致状态不一致。
示例跟踪是:
- S1 被告知它是主控,并开始对注册表中的共享状态进行写入操作
- 发生分区,S1 在一个分区中,S2 和 S3 在另一个分区中
- S2 被识别为新的 master
- S2 被通知它是新的主控,并开始对注册表中的共享状态进行写入操作
- 分区已修复
- S1 写入注册表中的共享状态并成功,因为没有分区
- S2 写入注册表中的共享状态并且也成功,导致写入与 S1 的任意交错
- S1 被通知它不再是主控并停止写入
想法
- 考虑到 Consul 的会话,一个 API 写入调用是否也需要一个会话 ID 并且只有在该会话 ID 仍然是 master 的情况下才能成功解决这个问题?
- 领事或其他注册机构之一是否有这样的电话?
ansible - 为 Ansible 查找指定令牌
我需要针对 Consul 的键/值进行查找。我尝试以这种方式传递令牌,但仍然被拒绝访问。令牌绝对正确。
docker - 领事没有注销僵尸服务
我正在用马拉松部署一个简单的 hello world nginx 容器,一切似乎都运行良好,除了我有 6 个不会从领事注销的容器。docker ps
显示没有容器在运行。
我尝试使用/v1/catalog/deregister
端点取消注册服务,但它们不断回来。然后我杀死了注册器容器,并再次尝试取消注册。他们回来了。
我正在运行注册器
有 1 个领事代理正在运行。
重新启动机器(这是本地 vm 上的单节点安装)不会使服务消失。
如何让这些容器消失?
load-balancing - 服务发现工具和检查节点运行状况的负载均衡器在概念上有什么区别?
最近,一些服务发现工具变得流行/“主流”,我想知道在哪些主要用例下应该使用它们而不是传统的负载均衡器。
使用 LB,您可以在平衡器后面聚集一堆节点,然后客户端向平衡器发出请求,然后平衡器(通常)将这些请求轮询到集群中的所有节点。
通过服务发现(Consul、ZK等),您可以让一个集中的“共识”服务确定特定服务的哪些节点是健康的,并且您的应用程序连接到该服务认为是健康的节点。因此,虽然服务发现和负载平衡是两个独立的概念,但服务发现为您提供负载平衡作为一种方便的副作用。
但是,如果负载均衡器(例如HAProxy或nginx)内置了监控和健康检查,那么您几乎可以将服务发现作为负载均衡的副作用!这意味着,如果我的 LB 知道不将请求转发到其集群中的不健康节点,那么这在功能上等同于共识服务器告诉我的应用程序不要连接到不健康节点。
所以对我来说,服务发现工具感觉就像是负载均衡器的“六合一,六合一”。我在这里错过了什么吗?如果有人有一个完全基于负载平衡微服务的应用程序架构,那么切换到基于服务发现的模型有什么好处(或没有好处)?
ruby-on-rails - Cannot load Rails due to Switch to inspect mode error
I'm on a fresh install of Ubuntu 14.04 LTS. RVM 1.26.11 is installed with Ruby ruby 2.2.0p0. I'm using envconsul to handle environment variables. However, when I do:
envconsul -config=/etc/envconsul.hcl bundle exec rails c
it returns this error:
I, [2015-09-02T00:10:00.420551 #3953] INFO -- : ** [Raven] Raven 0.14.0 ready to catch errors
Loading development environment (Rails 4.2.3)
Switch to inspect mode.
and just dumps out to the command line. I can run bundle exec rails c
on its own, but it fails out because the environment variables aren't set. I tried setting an ~/.irbrc
but that doesn't help at all.
I'm really stumped on this one. Anyone have any ideas?
docker-machine - Docker-Machine LS 在手动安装时未显示 SWARM
我已经成功地在 Digital Ocean 机器上创建了自己的 Docker Swarm,而没有使用“docker-machine create”docker SWARM 钩子。我不使用这些钩子的动机是为了提供更好的引导和与我的 Consul 提供者以及其他东西的集成。
我面临的问题是“docker -H XXX.XXX.XXX.XXX:3376 ps”有效意味着我的 SWARM 已正确初始化,但由于“docker-machine ls”,我无法连接“docker-compose”无法识别 SWARM。我已通读 docker-machine 代码,试图找出“docker-machine ls”如何识别 SWARM 但找不到它。这是我的相关信息
docker-compose-master.yml
docker-compose-client.yml
请参阅以下输出
有谁知道我需要做些什么才能让 Docker Machine 识别我有一个 SWARM 以便我可以连接和使用 Docker Compose?
或者,有谁知道我如何在没有 docker-machine 的情况下将 docker compose 指向 SWARM?
java - 如何在 Spring-Cloud 中将 ConsulDiscoveryClient 与 Zuul 和 Sidecar 一起使用
我正在尝试将 Spring-Cloud 微服务架构与 Netflix 的 Sidecar 和 Zuul 组件一起使用,遵循 github 上 kbastani 的示例
将部署服务的环境已经有一个正在运行的 consul 服务,可用于服务发现和配置。这应该意味着我可以从示例中消除 config-service 和 eureka。
我现在正在尝试使用以下代码将 api-gateway 微服务连接到 Consul:
这会导致以下异常:
该服务的 pom.xml 是:
引导程序.yml:
应用程序.yml:
谁能阐明我如何将 Spring Cloud 与 Consul 一起用作发现和配置服务来创建 API 网关?
ruby-on-rails - 是否可以只有一个领事服务器为 Rails 应用程序提供密钥对?
我想知道是否可以仅使用一台领事服务器来提供领事服务器键值对。
我正在尝试设置 consul 服务器以仅存储我的 rails 应用程序的键值对。我只设置了一个将充当代理的领事服务器。但是在设置 consul 的 web-ui 时遇到问题。
我尝试运行一个物理实例作为 consul 服务器来服务 consul 的 web-ui
比在公共 ip 上访问 consul web-ui 我运行以下命令
收到以下错误
其中 XXXX 是实例的私有 ip