标签: etcd

使用etcd作为主存储/数据库?

可以将etcd用作可靠的数据库替代品吗?由于它是以持久方式分发和存储键/值对,因此它将是一个很好的替代nosql数据库.此外,它有一个很棒的API.有人可以解释为什么这不是一件事吗?

database nosql coreos etcd kubernetes

31
推荐指数
2
解决办法
1万
查看次数

当面向消息的中间件完成工作时,为什么还要烦恼服务?

我得到的问题是etcd/consul/$试图解决的问题.服务消费者需要与服务提供商交谈,一个庞大流动的分布式系统需要一种机制来嫁给两者.

然而,"服务消费者在哪里满足他们的要求?"的问题.是旧的,IMO已经解决了MOM - 面向消息的中间件.

在MOM中,我们的想法是服务消费者并不关心服务提供商所在的位置.他们只是发送消息并让消息传递总线负责将消息路由到适当的消费者.可以有多个提供者都做同样的事情(基于队列的循环)或版本化的提供者(/ v1 /请求转到一个,/ v2 /请求转到另一个).

这是一个简单,强大的集成模式,它完全将服务接口与其实现分离.

然而,我看到了对发现服务提供商的这种奇怪的痴迷,这似乎在消费者和提供者之间创造了紧密的耦合(除了一些其他反模式之外).

那么,我在这里错过了什么?TIA.

service service-discovery mom etcd consul

18
推荐指数
1
解决办法
985
查看次数

将etcd集群自动配置为Docker swarm服务

我想找到一种方法将etcd集群部署为Docker Swarm服务,该服务将自动配置而无需任何交互.基本上,我想到了这个命令的精神:

docker service create --name etcd --replicas 3 my-custom-image/etcd
Run Code Online (Sandbox Code Playgroud)

我假设覆盖网络配置为安全并提供加密和身份验证,所以我相信我不需要TLS,甚至不需要--auto-tls.当这可以在另一层上解决时,不希望额外的头痛找到提供证书的方法.

我需要--name为每个实例都有一个唯一的,但是我可以从一个可以使用的入口点脚本中获得它export ETCD_NAME=$(hostname --short).

问题是,我坚持初始配置.根据聚类指南,有三个选项,但似乎都不适合:

  • DNS发现场景最接近我正在寻找的,但Docker 目前不支持DNS SRV记录发现.我可以查找etcd,我将获得节点容器的所有IP,但没有_etcd-server._tcp记录.
  • 我不能自动构建,ETCD_INITIAL_CLUSTER因为虽然我知道IP,但我不知道其他节点的名称,我不知道有任何方法可以解决这些问题.(我不打算将Docker API套接字暴露给etcd容器.)
  • 没有预先存在的etcd集群,虽然从discovery.etcd.io提供初始配置URI是一种可能的解决方法,我有兴趣不这样做.我的目标是"只需从这部署一个堆栈docker-compose.yml,它就会自动做正确的事情,没有问题就是这样".

有什么技巧可以拉吗?

deployment configuration docker etcd docker-swarm-mode

18
推荐指数
1
解决办法
1092
查看次数

如何在使用spring boot时配置动态属性?

我打算将Spring Boot用于我的任务.它是一个连接数据库的典型服务器应用程序.我知道我可以使用Spring Configuration外部化我的属性,例如数据库连接细节.但我还有其他需要在运行时更新的动态属性.例如鳍状肢/特征标志.我的应用程序的某些功能需要动态控制,例如想象app.cool-feature.enable = true之类的属性,然后在一段时间后app.cool-feature.enable = false关闭相同的功能

有什么建议在运行时采集这种动态行为的最佳做法是什么?我可以想到以下选项来触发变更......

  • 使用上述属性更改将JMS消息发送到服务器实例
  • 在服务器实例上调用公开的API端点,例如POST http:// myapp/admin/config/update {"config":{"app.cool-feature.enable":true}}

我知道我可以编写我自己的自定义代码来实现这个(这将是第三次),但只是想知道是否已经有我不知道的动态属性配置的标准方法/常见做法.如果它可以与Apache ZooKeeper,coreos etcd,Netflix策展人等其他解决方案一起使用并且与Spring紧密集成,那将会很棒.

思考?

java spring spring-boot etcd apache-zookeeper

17
推荐指数
3
解决办法
1万
查看次数

docker-swarm和docker-组成如何动态添加节点并让它们由服务解析

我一直在玩,docker-compose并从码头中心网站拼凑了一个项目.

我想到的一件事就是我如何扩展个别服务(通过添加更多实例)并让现有实例以某种方式了解这些新实例.

例如,规范docker-compose示例包括以下群集:

  • redis节点
  • python(flask)节点
  • haproxy负载均衡器

我创建了集群,一切正常,但我尝试将另一个节点添加到集群:

$ docker-compose scale web=2
Creating and starting 2 ... done


$ docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                                          NAMES
e83f6ed94546        packetops/web:latest   "/bin/sh -c 'python /"   6 minutes ago       Up About a minute   80/tcp                                         swarm-slave/1_web_2
40e01a615a2f        tutum/haproxy          "python /haproxy/main"   7 minutes ago       Up About a minute   443/tcp, 1936/tcp, 172.16.186.165:80->80/tcp   swarm-slave/1_lb_1
f16357a28ac4        packetops/web:latest   "/bin/sh -c 'python /"   7 minutes ago       Up About a minute   80/tcp                                         swarm-slave/1_lb_1/1_web_1,swarm-slave/1_lb_1/web,swarm-slave/1_lb_1/web_1,swarm-slave/1_web_1
8dd59686e7be        redis                  "/entrypoint.sh …
Run Code Online (Sandbox Code Playgroud)

docker etcd docker-compose docker-swarm

15
推荐指数
1
解决办法
1331
查看次数

Hazelcast(Java)和ETCD(golang)的差异/相似之处?

现在我们构建一个实时分析系统,它应该是高度分布式的.我们计划使用分布式锁和计数器来确保数据的一致性,我们需要一种分布式映射来了解哪个客户端连接到哪个服务器.我之前没有分布式系统的经验,但我认为我们有两个选择:

  1. Java的+ Hazelcast

  2. Golang + ETCD

但是在主题背景下彼此的利弊是什么?

java distributed go hazelcast etcd

11
推荐指数
2
解决办法
3194
查看次数

如何在coreOS上将etcd值输入我的systemd服务?

我有两个服务A和B.

A在启动时设置etcd中的值,比如它从环境文件中获取的公共IP地址:

ExecStartPost=/usr/bin/etcdctl set /A_ADDR $COREOS_PUBLIC_IPV4
Run Code Online (Sandbox Code Playgroud)

B在启动时需要该值,以及它自己的IP地址.所以这样的事情会很好:

ExecStart=/usr/bin/docker run -e MY_ADDR=$COREOS_PUBLIC_IPV4 -e A_ADDR=$ETCD_A_ADDR mikedewar/B
Run Code Online (Sandbox Code Playgroud)

但这显然是不可能的,因为etcd变量不会像这样的systemd环境变量.相反,我可以做一些/usr/bin/bash -c 'run stuff'我的,ExecStart但它很尴尬,特别是因为我需要systemd扩展$COREOS_PUBLIC_IPV4和我的新bash shell扩展$(etcdctl get /A_ADDR).它也充满了代码味道,让我觉得我错过了一些重要的东西.

有人能告诉我从etcd获取值到我ExecStart声明中的"正确"方法吗?

- 更新

所以我一直在运行

ExecStart=/usr/bin/bash -c 'source /etc/environment && /usr/bin/docker run -e A_ADDR=$(/usr/bin/etcdctl get /A_ADDR) -e MY_ADDR=$COREOS_PUBLIC_IPV4 mikedewar/B'
Run Code Online (Sandbox Code Playgroud)

但它很难看.还是不敢相信我没有错过什么..

systemd coreos etcd

10
推荐指数
2
解决办法
4993
查看次数

跨多个数据中心使用etcd是否安全?

跨多个数据中心使用etcd是否安全?因为它将etcd端口暴露给公共互联网.在这种情况下我是否必须使用客户端证书或者etcd有某种授权?

coreos etcd

10
推荐指数
1
解决办法
4100
查看次数

无法发现泊坞容器

我正在按照本教程进行服务发现http://jasonwilder.com/blog/2014/07/15/docker-service-discovery

简述:

我创建了一个运行在xyzd:4001的etcd主机

docker run -d --name etcd -p 4001:4001 -p 7001:7001 coreos/etcd
Run Code Online (Sandbox Code Playgroud)

在backend_serverip:8000和docker-register创建了一个运行容器的后端服务器

$ docker run -d -p 8000:8000 --name whoami -t jwilder/whoami
$ docker run --name docker-register -d -e HOST_IP=$(hostname --all-ip-addresses | awk '{print $1}') -e ETCD_HOST=x.y.z.d:4001 -v /var/run/docker.sock:/var/run/docker.sock -t jwilder/docker-register
Run Code Online (Sandbox Code Playgroud)

在backend2_serverip:8000和docker-register创建了另一个运行容器的后端服务器

 $ docker run -d -p 8000:8000 --name whoami -t jwilder/whoami
 $ docker run --name docker-register -d -e HOST_IP=$(hostname --all-ip-addresses | awk '{print $1}') -e ETCD_HOST=x.y.z.d:4001 -v /var/run/docker.sock:/var/run/docker.sock -t jwilder/docker-register
Run Code Online (Sandbox Code Playgroud)

创建了一个运行docker-discover和ubuntu映像的客户端

$ docker run -d --net …
Run Code Online (Sandbox Code Playgroud)

registry service-discovery docker etcd

8
推荐指数
1
解决办法
346
查看次数

minikube:无法连接本地部署的nginx服务

我在我的ubuntu 16.04机器上安装了minikube并启动了一个集群,并附带一条消息

"Kubernetes is available at https://192.168.99.100:443"

接下来,我使用以下命令部署了nginx服务

> kubectl.sh run my-nginx --image=nginx --replicas=2 --port=80 --expose

> kubectl.sh get  pods -o wide
NAME                        READY     STATUS    RESTARTS   AGE       NODE
my-nginx-2494149703-8jnh4   1/1       Running   0          13m       127.0.0.1
my-nginx-2494149703-q09be   1/1       Running   0          13m       127.0.0.1

> kubectl.sh get  services -o wide
NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE       SELECTOR
kubernetes   10.0.0.1     <none>        443/TCP   14m       <none>
my-nginx     10.0.0.83    <none>        80/TCP    13m       run=my-nginx

> kubectl.sh get  nodes -o wide
NAME        STATUS    AGE
127.0.0.1   Ready     16m
Run Code Online (Sandbox Code Playgroud)

问题:

1)节点127.0.0.1是我的本地开发机器吗?这让我最困惑.

2)以下理解是否正确:集群(节点,kubernetes API服务器)具有10.0.0.x中的内部IP地址,其对应的外部IP地址为192.168.99.x. …

docker etcd kubernetes flannel

8
推荐指数
1
解决办法
1万
查看次数