• docker 构建带健康检查的redis镜像


    ===============================================

     2018/11/5_第1次修改                       ccb_warlock

     

    ===============================================

     由于希望引入docker的健康检查,即对不健康容器的策略(如果容器进入 unhealthy 状态,它会停止容器并且重新启动一个新容器来取代它),故根据官方给出的脚本进行修改后构建出带健康检查的redis镜像。
     

     这里简单提下为什么要花力气去构建带健康检查的镜像:docker的容器有2个自我检查的机制,一个是进程的检查,就是服务的进程运行是否正常;另一层就是业务的检查,就是在进程运行的情况下,业务是否正常提供服务。

     以redis举例,正常情况配置正确,资源给够的情况,redis进程可以正常运行,但是由于连接redis的程序连接过多(达到了redis的连接数上线,一般单redis是1W不到点,redis服务就开始拒绝新的连接)。像这种情况进程的检查是捕获不到异常的,那就得配合健康检查增加一个维度判断redis是否正常。

     


     一、准备工作

    redis官方版本:4.0.11(虽然现在刚出了5.X,但是新东西很多都还未知,故保守在生产环境还是设计使用4.X)

    示例redis的密码为:123456

    存放密码的环境变量:redisPWD

     


     二、构建带有健康检查的新镜像

     2.1  创建构建目录
    mkdir -p /opt/build/redis

     # 进入目录

    cd /opt/build/redis

     2.2 编辑healthcheck脚本

    vi healthcheck

     # 将下面的内容添加到healthcheck文件内,wq保存。

    #!/bin/bash
    set -eo pipefail
    host="$(hostname -i || echo '127.0.0.1')"
    if ping="$(redis-cli -h "$host" ping)" && [ "$ping" = 'PONG' ]; then
        exit 0
    elif  ping="$(redis-cli -h "$host" -a "$redisPWD" ping)"  && [ "$ping" = 'PONG' ]; then
            exit 0
    fi
    exit 1
     2.3 编辑dockerfile文件
    vi dockerfile

     # (基于redis镜像)将下面的内容添加到dockerfile文件内,wq保存。

    # basic image
    FROM redis:4.0.11
    
    COPY healthcheck /usr/local/bin/
    
    RUN chmod +x /usr/local/bin/healthcheck
    
    HEALTHCHECK --interval=10s --timeout=10s --retries=6 CMD ["healthcheck"]
     2.4 构建镜像
    docker build --rm -t redis:4.0.11-chk .
    由于dockerfile构建时已经增加了健康检查的命令,故即使部署容器时没有配置健康检查也会根据初始规则自动进行健康检查。
     

    至此,带有健康检查的redis镜像(redis:4.0.11-chk)构建完成。

     

     


     三、 启动redis

    由于我习惯使用swarm、docker compose部署,下面就是使用了健康检查后的compose该怎么写。

    version: '3.6'
    services:
    
      redis:
        image: redis:4.0.11-chk
        environment:
          - TZ=Asia/Shanghai
          - redisPWD=123456
        volumes:
          # 配置文件
          - /usr/docker-vol/redis/conf/redis.conf:/etc/redis.conf
          # 持久化
          - /usr/docker-vol/redis/data:/data
        command: 
          redis-server /etc/redis.conf
        deploy:
          replicas: 1
          restart_policy:
            condition: any
          resources:
            limits:
              cpus: "0.3"
              memory: 256M
          update_config:
            parallelism: 1
            delay: 5s 
            monitor: 5s
            max_failure_ratio: 0.1
            order: start-first
        ports:
          - 6379:6379
        networks:
          - my-net
    
    networks:
      my-net:
        external: true

      

  • 相关阅读:
    python thrift
    redis 知识点
    Spring其他注解和xml配置(不常用的)
    Spring常用的的注解以及对应xml配置详解
    Eureka的工作原理简介
    SpringBoot的自动配置实现和介绍
    SpringBoot多配置文件,切换环境
    数据卷介绍和常用的服务部署
    Spring Security简介
    在Java中入门,读取和创建Excel,Apache POI的使用
  • 原文地址:https://www.cnblogs.com/straycats/p/9906816.html
Copyright © 2020-2023  润新知