前提环境
Rancher1.6 + Cattle
其他网络或者架构可自行研究, 希望本文能为你提供灵感.
目的
- 高可用: 也就是down机恢复 / 没有单点故障. 这在没有docker时的传统部署中是一个难点, 但现在Rancher帮我们做了, 我们不用太担心.
- 易于配置与扩展: 传统配置ip的方式我们是不推荐的, 需要有更好的方案.
必备知识
- 能够使用Rancher添加 服务/应用, 并会配置"挂载"
- Cattle环境中的内部DNS服务, 看这篇文章即可.
- Nsq的Nsqd与Nsqlookupd的关系以及连接原理, 可以多读读官方文档: nsqd, nsqlookupd, production, topology_patterns. 或者我写的另一篇文章: Nsq从入门到实践
开始部署
流程如下
- 创建nsqd与nsqlookupd服务, 重点是nsqd容器中hostname的配置.
- 在生产者服务中Link nsqd服务.
- 在消费者服务中Link nsqlookupd服务.
- 就可以用了.
就是这么简单且枯燥.
详细如下
创建nsqd与nsqlookupd
新建应用: 名为nsq
添加服务, 可以参考以下docker-compose.yml
version: '2'
services:
nsqlookupd:
image: nsqio/nsq
command:
- /nsqlookupd
nsqd:
image: nsqio/nsq
hostname: nsqd.nsq
volumes:
- /workspace/docker/volumes/nsqd/data:/data
links:
- nsqlookupd:nsqlookupd
command:
- /nsqd
- --lookupd-tcp-address=nsqlookupd:4160
- --data-path=/data
需要注意以下几点
- nsqd 容器需要配置lookupd地址: lookupd-tcp-address=nsqlookupd:4160, 和挂载的数据文件: --data-path=/data, 并Link nsqlookupd服务.
-
重点!! nsqd 容器不用配置broadcast-address, 而是使用默认的主机名, 所以需要配置主机名, 可以看到这里配置的是
hostname: nsqd.nsq
, 这个值是有意义的, 是{服务名称}.{应用名称}, 详情看: Cattle环境中的内部DNS服务
使用hostname有一个好处: 不用去生产者服务Link这个nsqd节点, 当需要部署多个nsqd节点时 这点将大大减少配置复杂度.
nsqd配置好了之后是这样的:



nsqlookup不用配置什么, 所以不截图了.
生产者与消费者服务连接nsqd与nsqdlookupd
需要在生产者服务中添加nsqd的链接

这样就可以在生产者代码中使用
nsqd
这个host去连接nsqd服务了.
同理需要在消费者服务添加nsqlookupd链接

完成, 现在就可以正常使用nsq了.
再扩展一个nsqd节点
当你发现一个nsqd不够用了之后就需要再添加一个Nsqd节点, 为了方便我们把这个节点成为 nsqd-baba
.
由于我们使用hostname的方式来指定nsqd的广播地址, 所以部署这个节点是十分方便的, 仅仅只需要在nsq应用中添加一个nsqd-baba
服务. 配置和上面添加第一个nsqd节点时大同小异:
- 这次需要将hostname(主机名)配置为
nsqd-baba.nsq
. - 挂载需要再重新指定一下, 因为nsqd节点的data文件夹不能被多个nsqd节点共用.
网友评论