NATS 5: 使用 docker swarm 建立 nats 集群
-
参考
-
Settings
- 一台电脑上的三个xubuntu虚拟机
机器 IP xubuntu1 10.80.28.46 xubuntu2 10.80.28.47 xubuntu3 10.80.28.83
建立 docker swarm
- 参考 “多台服务器上利用 Docker Swarm 建立 RabbitMQ 集群” 上同一章节。
建立 overly network
- 需要利用 overly network 的自动 DNS 功能
$ docker network create -d overlay nats-cluster
使用 docker-compose 文件在 docker swarm 上建立nats集群 (无TLS)
- swarm.conf 如下,必须在每个节点的
~/nats/nats-tls-cluster/swarm.conf
位置。注意这里集群的地址用的是域名,就是下面 yml 文件中 service 下面的 nats1, nats2, nats3。http_port = 8222 cluster { listen = 6222 routes = [ nats://nats1:6222 nats://nats2:6222 nats://nats3:6222 ] }
- docker-compose-swarm.yml 如下:
- nats1, nats2, nats3 节点的客户端连接端口(容器中的4222)分别暴露在 nats-cluster 的4221, 4222, 4223 端口。
- 容器的监听端口8222也类似暴露。
version: "3" services: nats1: image: nats:latest hostname: nats1 command: "-c /swarm.conf" volumes: - "~/nats/nats-tls-cluster/swarm.conf:/swarm.conf" ports: - "4221:4222" - "8221:8222" nats2: image: nats:latest hostname: nats2 command: "-c /swarm.conf" volumes: - "~/nats/nats-tls-cluster/swarm.conf:/swarm.conf" ports: - "4222:4222" - "8222:8222" nats3: image: nats:latest hostname: nats3 command: "-c /swarm.conf" volumes: - "~/nats/nats-tls-cluster/swarm.conf:/swarm.conf" ports: - "4223:4222" - "8223:8222" networks: default: external: name: nats-cluster
- 现在默认在当前目录下有
docker-compose-swarm.yml
文件,在每个服务器上也有volumes
中需要的swarm.conf
文件:$ docker stack deploy --compose-file docker-compose-swarm.yml nats Creating service nats_nats1 Creating service nats_nats2 Creating service nats_nats3
- 现在已经成功在docker swarm上启动了nats集群,可以使用docker命令查看一下部署情况:
$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS repl3antbepm nats_nats1 replicated 1/1 nats:latest *:4221->4222/tcp, *:8221->8222/tcp b35tfh7xqzka nats_nats2 repli