gpt4 book ai didi

docker - NSQ Docker 集群

转载 作者:行者123 更新时间:2023-12-02 18:07:45 25 4
gpt4 key购买 nike

我尝试在 Docker Swarm 中使用 NSQ 但没有成功

mhlg/rpi-nsq 是为 Raspberry Pi ARM7 开发板构建的 Docker 镜像,如果作为普通 Docker 容器运行,我可以确认其工作正常

在 Docker 中运行 NSQ(OK)

# crete a bridged network
$ docker network create nsq_network

# run lookupd
$ docker run --name nsqlookupd --network nsq_network -p 4160:4160 -p 4161:4161 mhlg/rpi-nsq nsqlookupd

# run nsqd
$ docker run --name nsqd --network nsq_network -p 4150:4150 -p 4151:4151 mhlg/rpi-nsq nsqd --broadcast-address=nsqd --lookupd-tcp-address=nsqlookupd:4160

# run nsqadmin
$ docker run --name nsqadmin --network nsq_network -p 4171:4171 mhlg/rpi-nsq nsqadmin --lookupd-http-address=nsqlookupd:4161

在 Docker Swarm 模式下运行 NSQ(失败)这就是我在群管理器中所做的

# crete an overlay network
$ docker network create nsq_network

# run nsqlookupd
$ docker service create --replicas 1 --name nsqlookupd --network nsq_network -p 4160:4160 -p 4161:4161 mhlg/rpi-nsq nsqlookupd

# run nsqd
$ docker service create --replicas 1 --name nsqd --network nsq_network -p 4150:4150 -p 4151:4151 mhlg/rpi-nsq nsqd --lookupd-tcp-address=nsqlookupd:4160 --broadcast-address=nsqd

# run nsqadmin
$ docker service create --replicas 1 --name nsqadmin --network nsq_network -p 4171:4171 mhlg/rpi-nsq nsqadmin --lookupd-http-address=nsqlookupd:4161

如果我附加到 nsqd 服务,我可以看到它无法连接到 nsqlookupd 服务。

[nsqd] 2016/12/09 16:51:56.851953 LOOKUPD(nsqlookupd:4160): sending heartbeat
[nsqd] 2016/12/09 16:51:56.852049 LOOKUP connecting to nsqlookupd:4160
[nsqd] 2016/12/09 16:51:57.852457 LOOKUPD(nsqlookupd:4160): ERROR PING - dial tcp: i/o timeout

覆盖网络似乎产生了一些问题(多播?),但我不知道如何解决它,尤其是在 ARM 设备上。

我尝试通过 ssh 进入运行 nsqd 服务的 Docker 主机,并从 nsqd 容器内部执行一些 dns 命令

# resolve google.com (OK)
root@3206d1c3cd3d:/# nslookup google.com
Server: 127.0.0.11
Address: 127.0.0.11#53

Non-authoritative answer:
Name: google.com
Address: 216.58.214.78

# resolve nsqd service (OK) - can resolve the container I'm executing the command from
root@e1f6430acd1c:/# nslookup nsqd
Server: 127.0.0.11
Address: 127.0.0.11#53

Non-authoritative answer:
Name: nsqd
Address: 10.0.0.2

# resolve nsqlookupd service (FAIL)
root@e1f6430acd1c:/# nslookup nsqlookupd
;; connection timed out; no servers could be reached

最佳答案

在 docker swarm 中遇到了同样的问题。我是这样解决的:

docker service create \
--mode global \
--name swarm-master-nsq_nsqlookupd \
--constraint node.role==manager \
--hostname nsqlookupd \
--network name=swarm-master-nsq_nsq,alias=nsqlookupd \
nsqio/nsq:latest /nsqlookupd


docker service create \
--replicas 3 \
--name swarm-master-nsq_nsqd \
--constraint node.role==manager \
--hostname nsqd \
--network name=swarm-master-nsq_nsq,alias=nsqd \
nsqio/nsq:latest sh -c '/nsqd --broadcast-address=$(hostname -i) --lookupd-tcp-address=nsqlookupd:4160'


docker service create \
--replicas 1 \
--publish 4171:4171 \
--name swarm-master-nsq_nsqadmin \
--constraint node.role==manager \
--hostname nsqadmin \
--network name=swarm-master-nsq_nsq,alias=nsqadmin \
nsqio/nsq:latest /nsqadmin --lookupd-http-address=nsqlookupd:4161

据我所知,您的示例中存在几个问题:

  1. 您没有为 nsqlookupd 和其他服务取别名
  2. nsqd 的广播不正确(假设你想在某个时候增加 nsqd 节点的数量)

关于docker - NSQ Docker 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41064776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com