Spring Cloud 疑难杂症(5): docker swarm 环境下优雅更新服务
微服务更新如果使用 docker stop 来强制停止,会使线上服务发生短暂的服务不可用。
避免这个问题,让服务更新平滑过渡,需要在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
| version: '3.6' services: gateway-server: image: gateway:0.1.1 container_name: sc-gateway restart: always deploy: mode: replicated replicas: 2 resources: limits: memory: 1g cpus: "0.5" restart_policy: condition: on-failure update_config: parallelism: 1 delay: 10s order: start-first volumes: - /var/log:/var/log ports: - 9000:9000 env_file: .env.base environment: - SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE} - SERVER_HOST_NAME=gateway-server networks: - docker_net-es
|
(docker swarm环境下) 替换之前的镜像版本,使用如下命令更新
1
| docker stack deploy -c docker-compose.yml server-name
|
Dockerfile 文件中需要配置 curl,去请求服务内的接口。当接口请求成功时认定为服务启动成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| FROM openjdk:8-jre-alpine VOLUME /tmp ADD article-service-1.0-SNAPSHOT.jar app.jar
RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories && \ echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories
RUN apk update && \ apk add --no-cache ca-certificates && \ apk add --no-cache curl bash && \ apk --no-cache add fontconfig ttf-dejavu RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone ENV JAVA_OPTS="-Xmx512m -Xms256m" ENTRYPOINT ["java", "-XX:+UnlockExperimentalVMOptions","-XX:+UseCGroupMemoryLimitForHeap", "-Dfile.encoding=UTF-8","-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"] EXPOSE 8016
HEALTHCHECK --interval=3m --timeout=10s --start-period=3m --retries=3 CMD curl -f http://localhost:8016/actuator/health || exit 1
|
CONTAINER ID |
IMAGE |
COMMAND |
CREATED |
STATUS |
PORTS |
00182aad8000 |
gateway:0.4.3 |
“java -XX:+UnlockExp…” |
2 weeks ago |
Up 2 weeks (healthy) |
9000/tcp |
db2867d62000 |
deco-common-service:0.4.2 |
“java -XX:+UnlockExp…” |
3 weeks ago |
Up 3 weeks (healthy) |
8012/tcp |
06dcb35ec000 |
admin-system-service:0.4.0 |
“java -XX:+UnlockExp…” |
3 weeks ago |
Up 3 weeks (healthy) |
8020/tcp |
5ceed8db0000 |
deco-rendering-service:0.4.0 |
“java -XX:+UnlockExp…” |
3 weeks ago |
Up 3 weeks (healthy) |
8013/tcp |
这样配置下来,每次更新服务时会先启动新服务,等服务健康检查通过时就会关闭旧服务,达到平滑升级的目的 |
|
|
|
|
|
上一篇 « Spring Cloud 疑难杂症(4): Feign 访问缓慢及调用出错
下一篇 » Spring Cloud 疑难杂症(6): OpenJDK 字体库缺失