一、项目用到nsqd分布式消息服务
nsqd
nsqlookupd
nsqadmin
docker nsq-compose.yml文件如下:
version: "3.2"
services:
# 唯一性,在集群中的节点只能指向唯一的nsqlookupd服务
# 去中心化,即使nsqlookupd崩溃,也会不影响正在运行的nsqd服务
# 充当nsqd和naqadmin信息交互的中间件
# 提供一个http查询服务,给客户端定时更新nsqd的地址目录
nsqlookup: # 拓扑结点
image: nsqio/nsq:latest
ports:
- 4160:4160
- 4161:4161
command: /nsqlookupd
networks:
- yunbay_backend
nsqd: # nsqd节点
image: nsqio/nsq:latest
ports:
- 4150:4150
- 4151:4151
volumes:
- /data/nsqd/:/data
depends_on:
- nsqlookup
command: /nsqd --lookupd-tcp-address=nsqlookup:4160 --data-path=/data # nsqd数据持久目录
networks:
- yunbay_backend
nsqadmin: # nsq后台管理
image: nsqio/nsq:latest
ports:
- 4171:4171
command: /nsqadmin --lookupd-http-address=nsqlookup:4161
depends_on:
- nsqlookup
networks:
- yunbay_backend
networks:
yunbay_backend:
external: true # 外部定义网络,即由docker network create创建的网络(注:stack命令不能创建新的可对接网络)
一、yunbay后台服务如下:
account
ybapi
ybgoods
yborder
ybpay
ybasset
ybim
ybeos
ybnsq
ybsearch
ybcron
docker yunbay-compose.yml文件如下:
version: "3.2"
services:
account: # 帐号服务
image: 172.17.6.140:5000/jayden21/account:latest
ports:
- 92:92
networks:
- backend
volumes:
- conf-data:/opt
- /tmp/logs:/tmp/logs
# depends_on:
# - redis
command: -config /opt/account/conf/config.yml -log_dir /tmp/logs/account
deploy:
replicas: 1
update_config:
parallelism: 2
restart_policy:
condition: on-failure
api: # 公共服务
image: 172.17.6.140:5000/jayden21/ybapi:latest
ports:
- 90:90
networks:
#- frontend
- backend
volumes:
- conf-data:/opt
- /tmp/logs:/tmp/logs
command: -config /opt/ybapi/conf/config.yml -log_dir /tmp/logs/ybapi
# depends_on:
# - db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
ybgoods: # 商品服务
image: 172.17.6.140:5000/jayden21/ybgoods:latest
ports:
- 96:96
networks:
- backend
volumes:
- conf-data:/opt
- /tmp/logs:/tmp/logs
command: -config /opt/ybgoods/conf/config.yml -log_dir /tmp/logs/ybgoods
# depends_on:
# - redis
deploy:
replicas: 1
update_config:
parallelism: 2
restart_policy:
condition: on-failure
yborder: # 订单服务
image: 172.17.6.140:5000/jayden21/yborder:latest
ports:
- 91:91
networks:
- backend
volumes:
- conf-data:/opt
- /tmp/logs:/tmp/logs
command: -config /opt/yborder/conf/config.yml -log_dir /tmp/logs/yborder
# depends_on:
# - redis
deploy:
replicas: 1
update_config:
parallelism: 2
restart_policy:
condition: on-failure
ybasset: # 资产服务
image: 172.17.6.140:5000/jayden21/ybasset:latest
ports:
- 95:95
networks:
- backend
volumes:
- conf-data:/opt
- /tmp/logs:/tmp/logs
command: -config /opt/ybasset/conf/config.yml -log_dir /tmp/logs/ybasset
# depends_on:
# - redis
deploy:
replicas: 1
update_config:
parallelism: 2
restart_policy:
condition: on-failure
ybpay: # 第三方支付服务
image: 172.17.6.140:5000/jayden21/ybpay:latest
ports:
- 94:94
networks:
- backend
volumes:
- conf-data:/opt
- /tmp/logs:/tmp/logs
command: -config /opt/ybpay/conf/config.yml -log_dir /tmp/logs/ybpay
# depends_on:
# - redis
deploy:
replicas: 1
update_config:
parallelism: 2
restart_policy:
condition: on-failure
ybeos: # eos节点
image: 172.17.6.140:5000/jayden21/ybeos:latest
ports:
- 97:97
networks:
- backend
volumes:
- conf-data:/opt
command: -config /opt/ybeos/conf/config.yml
# depends_on:
# - redis
deploy:
replicas: 1
update_config:
parallelism: 2
restart_policy:
condition: on-failure
ybim: # im服务
image: 172.17.6.140:5000/jayden21/ybim:latest
ports:
- 98:98
networks:
- backend
volumes:
- conf-data:/opt
command: -config /opt/ybim/conf/config.yml
# depends_on:
# - redis
deploy:
replicas: 1
update_config:
parallelism: 2
restart_policy:
condition: on-failure
ybsearch: # 搜索服务
image: 172.17.6.140:5000/jayden21/ybsearch:latest
ports:
- 93:93
networks:
- backend
volumes:
- conf-data:/opt
command: -config /opt/ybsearch/conf/config.yml
# depends_on:
# - redis
deploy:
replicas: 1
update_config:
parallelism: 2
restart_policy:
condition: on-failure
ybnsq: # nsq消息服务
image: 172.17.6.140:5000/jayden21/ybnsq:latest
networks:
- backend
volumes:
- conf-data:/opt
- /tmp/logs:/tmp/logs
extra_hosts: # 添加域名绑定
- "node1: 172.17.6.140"
- "node2: 172.17.6.139"
- "node3: 172.17.6.138"
command: -config /opt/ybnsq/conf/config.yml -log_dir /tmp/logs/ybnsq
# depends_on:
# - redis
deploy:
replicas: 1
update_config:
parallelism: 2
restart_policy:
condition: on-failure
ybcron: # 定时程序
image: 172.17.6.140:5000/jayden21/ybcron:latest
networks:
- backend
volumes:
- conf-data:/opt
- /tmp/logs:/tmp/logs
command: -config /opt/ybcron/conf/config.yml -log_dir /tmp/logs/ybcron
# depends_on:
# - redis
deploy:
replicas: 1
update_config:
parallelism: 2
restart_policy:
condition: on-failure
visualizer:
image: dockersamples/visualizer:stable
ports:
- "9001:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
portainer:
image: portainer/portainer
ports:
- "9002:9000"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
replicas: 1
placement:
constraints: [node.role == manager]
networks:
frontend:
backend:
volumes:
conf-data:
driver_opts:
type: "nfs4"
o: "addr=172.17.6.140,nolock,soft,rw" # 需要在此节点上安装nfs-utils,并开启服务
device: ":/opt"
二、配置compose.yml注意的几点:
1、由于nsq和yunbay是两个不同的swarm集群,因此yunbay里的ybnsq通过nsq swarm里面的nsqlookup取到nsqd的地址是nsq swarm网络里面的主机名(容器id),两个swarm没使用同一个(可对接)网络的话,解析不了nsqd的主机名,因此,两个swarm需要使用可对接网络解决
2、