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

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

最新文章

  1. CentOS(5.8/6.7)linux生产环境若干优化实战
  2. 【leetcode】 Remove Duplicates from Sorted List
  3. Angularjs 跳转页面并传递参数的方法总结
  4. ubuntu apt-get install php
  5. C# Sqlite 序列
  6. c++之路进阶——codevs2333(弹飞绵羊)
  7. laravel各种路径的获取方法
  8. ABBYY FineReader 12最新官方版下载
  9. LaTex学习笔记
  10. Add, remove, shuffle and sort
  11. Linux:-bash: ***: command not found
  12. windows 消息机制的学习
  13. Activity生命周期方法调用finish后的不同表现
  14. Linux "零拷贝" sendfile函数中文说明及实际操作
  15. OM模块功能&API详解
  16. 一个比ack速度快n倍的代码搜索工具: ag
  17. windows部署Apollo
  18. .Net core2.0+Mysql5.7部署到CentOS7.5完整实践经验
  19. P4139 上帝与集合的正确用法
  20. Spring RedisTemplate操作-注解缓存操作(11)

热门文章

  1. PAT 甲级 1110 Complete Binary Tree
  2. node之文件的下载
  3. Java关于Robot类的使用
  4. 基于Vue-cli 快速搭建项目
  5. Day25-博客系统
  6. Day18-前端和后端怎么区分
  7. 置换群和Burnside引理,Polya定理
  8. Request URI Too Long
  9. SQL Server 数据库对象命名参考
  10. react入门-props.children