四畳半神话大系

Spring Cloud 疑难杂症(1): Eureka docker swarm下的高可用

在使用 docker swarm 集群环境下,多个 Eureka 注册服务需要配置不同的端口号,同时 docker-compose.yml 文件也需要设置多个服务配置。

EUREKA 配置 yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# bootstrap.yml
spring:
application:
name: eureka-server
cloud:
inetutils:
# 限制在docker容器中使用的ip端防止容器绑定到不同ip端,导致容器间无法连接
preferred-networks: 10.10.0
timeout-seconds: 2
default-hostname: ${EUREKA_HOST_NAME:eureka-server}

# application.yml
eureka:
instance:
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}}
# 集群下使用要通过IP进行通信
prefer-ip-address: true
hostname: ${EUREKA_HOST_NAME}
client:
register-with-eureka: true
fetch-registry: true
service-url:
# 有多少个节点都要加进去
defaultZone: http://${EUREKA_ZONE_HOST1:127.0.0.1}:${EUREKA_ZONE_PORT1:8761}/eureka/,http://${EUREKA_ZONE_HOST:127.0.0.1}:${EUREKA_ZONE_PORT:8761}/eureka/

docker-compose 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
version: '3.6'
services:
eureka-server:
image: eureka
container_name: sc-eureka
restart: always
deploy:
mode: replicated
replicas: 1
resources:
limits:
memory: 1g
cpus: "0.5"
update_config:
parallelism: 1 # 每次更新复本数量
delay: 2s # 每次更新间隔
order: start-first # 更新顺序为新任务启动优先
restart_policy:
condition: on-failure
# 多节点部署在不同docker 节点服务器上
placement:
constraints: [node.role == manager]
volumes:
- /var/log/xyj:/var/log
environment:
- SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE}
- EUREKA_HOST_NAME=eureka-server
- EUREKA_SERVER_PORT=8761
- EUREKA_ZONE_HOST=eureka-server
- EUREKA_ZONE_PORT=8761
- EUREKA_ZONE_HOST1=eureka-server1
- EUREKA_ZONE_PORT1=8762
networks:
docker_net-es:
aliases:
- eureka
ports:
- 8761:8761

eureka-server1:
image: eureka
container_name: sc-eureka
restart: always
deploy:
mode: replicated
replicas: 1
resources:
limits:
memory: 1g
cpus: "0.5"
update_config:
parallelism: 1 # 每次更新复本数量
delay: 2s # 每次更新间隔
order: start-first # 更新顺序为新任务启动优先
restart_policy:
condition: on-failure
placement:
constraints: [node.role == worker]
volumes:
- /var/log/xyj:/var/log
environment:
- SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE}
- EUREKA_HOST_NAME=eureka-server1
- EUREKA_SERVER_PORT=8762
- EUREKA_ZONE_HOST=eureka-server1
- EUREKA_ZONE_PORT=8762
- EUREKA_ZONE_HOST1=eureka-server
- EUREKA_ZONE_PORT1=8761
networks:
docker_net-es:
aliases:
- eureka
ports:
- 8762:8762
networks:
docker_net-es:
external: true

注意: docker swarm 创建自定义网络时需要指定网段,例如:

1
docker network create -d overlay docker_net-es --subnet 10.10.0.0/24 --gateway 10.10.0.1 --attachable

专题:

本文发表于 2020-04-04,最后修改于 2020-04-04。

本站永久域名blog.amoyiki.com,也可搜索「 四畳半神话大系 」找到我。

期待关注我的 ,查看最近的文章和动态。


上一篇 « Spring Cloud 疑难杂症目录 下一篇 » Spring Cloud 疑难杂症(2): docker swarm 环境下多网卡问题

推荐阅读

Big Image