Docker-compose搭建Redis集群(Sentinel)的实现
目录
- redis集群概述
- 使用Docker搭建Redis 集群
- 测试哨兵
redis集群概述
Redis的集群方案大致有三种:
- redis cluster集群方案
- master/slave主从方案
- 使用哨兵模式来进行主从替换以及故障恢复
Sentinel系统可以监视一个或者多个redis master服务,以及master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。

使用Docker搭建Redis 集群
打开Windows Terminal 新建redis-sentinel主目录,进入目录内部,在新建一个sentinel目录用来存放哨兵脚本。在sentinel目录中新建 sentinel.conf 配置文件、Dockerfile、sentinel-entrypoint.sh脚本文件。
sentinel.conf 文件配置
# 哨兵sentinel实例运行的端口 默认26379 port 26379 sentinel monitor mymaster redis-master 6379 3 # 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒 sentinel down-after-milliseconds mymaster 5000 # 指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长 sentinel parallel-syncs mymaster 1 # 故障转移的超时时间 sentinel failover-timeout mymaster 5000
sentinel-entrypoint.sh脚本文件配置
# 同步配置文件,启动哨兵 sed -i "s/$SENTINEL_QUORUM/$SENTINEL_QUORUM/g" /etc/redis/sentinel.conf sed -i "s/$SENTINEL_DOWN_AFTER/$SENTINEL_DOWN_AFTER/g" /etc/redis/sentinel.conf sed -i "s/$SENTINEL_FAILOVER/$SENTINEL_FAILOVER/g" /etc/redis/sentinel.conf exec docker-entrypoint.sh redis-server /etc/redis/sentinel.conf --sentinel
Dockerfile文件配置
# 建立Dockerfile指定基础镜像,同时拷贝配置文件到镜像内部 FROM redis EXPOSE 26379 ADD sentinel.conf /etc/redis/sentinel.conf RUN chown redis:redis /etc/redis/sentinel.conf COPY sentinel-entrypoint.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/sentinel-entrypoint.sh ENTRYPOINT ["sentinel-entrypoint.sh"]
docker-compose.yml文件配置
# 搭建几个从库,就需要在services中配置几个信息,开放相应端口
version: '2'
networks:
app-tier:
driver: bridge
services:
redis:
image: 'bitnami/redis:latest'
environment:
- REDIS_REPLICATION_MODE=master
- REDIS_PASSWORD=""
networks:
- app-tier
ports:
- '6380:6379'
redis-slave:
image: 'bitnami/redis:latest'
environment:
- REDIS_REPLICATION_MODE=slave
- REDIS_MASTER_HOST=redis
- REDIS_MASTER_PASSWORD=""
- REDIS_PASSWORD=""
ports:
- '6381:6379'
depends_on:
- redis
networks:
- app-tier
redis-slave2:
image: 'bitnami/redis:latest'
environment:
- REDIS_REPLICATION_MODE=slave
- REDIS_MASTER_HOST=redis
- REDIS_MASTER_PASSWORD=""
- REDIS_PASSWORD=""
ports:
- '6382:6379'
depends_on:
- redis
networks:
- app-tier
redis-slave3:
image: 'bitnami/redis:latest'
environment:
- REDIS_REPLICATION_MODE=slave
- REDIS_MASTER_HOST=redis
- REDIS_MASTER_PASSWORD=""
- REDIS_PASSWORD=""
ports:
- '6383:6379'
depends_on:
- redis
networks:
- app-tier
redis-sentinel:
image: 'bitnami/redis-sentinel:latest'
environment:
- REDIS_MASTER_PASSWORD=""
depends_on:
- redis
- redis-slave
- redis-slave2
- redis-slave3
ports:
- '26379-26382:26379'
networks:
- app-tier
配置文件架构
redis-sentinel # 项目根路径
├── docker-compose.yml # docker-compose文件
└── sentinel # 存放初始化sentinel容器的相关文件
├── Dockerfile # sentinel构建镜像文件
├── sentinel.conf # sentinel配置文件
└── sentinel-entrypoint.sh # sentinel.sh启动脚本
启动服务
# 在后面加 -d 为在后台启动 # compose启动失败可以尝试手动启动Containers docker-compose up --scale redis-sentinel=4

测试哨兵
打开4个Windows Terminal,连接redis,其中6380为master,6381、6382、6383为slave,此时只有master是有写的权限的,当使用slava进行写的时候会报 (error) READONLY You can't write against a read only replica.错误,即为搭建成功。
kill掉主库容器进程,模拟宕机
# Kill掉主库容器进程,模拟宕机 docker kill Containerid
这就是所谓的高负载高可用架构,在使用集群承担高负载的同时,也能进行高可用的容灾机制。
您可能感兴趣的文章
- 02-02hadoop动态增加和删除节点方法介绍
- 02-02干货 | Linux新手入门好书推荐
- 02-02linux系统下MongoDB单节点安装教程
- 02-02Linux下nginx生成日志自动切割的实现方法
- 02-02Centos 6中编译配置httpd2.4的多种方法详解
- 02-02CentOS7 下安装telnet服务的实现方法
- 02-02分布式Hibernate search详解
- 02-02Hadoop对文本文件的快速全局排序实现方法及分析
- 02-02CentOS6.3添加nginx系统服务的实例详解
- 02-02Hadoop编程基于MR程序实现倒排索引示例


阅读排行
推荐教程
- 12-07Tomcat启动报错:严重: Unable to process Jar entry [m
- 12-07解决tomcat启动报错:一个或多个listeners启动失败问题
- 12-07一文教你怎么选择Tomcat对应的JDK版本
- 12-07Tomcat配置IPV6的实现步骤
- 12-07tomcat启动报错jar not loaded的问题
- 02-02CentOS7 下安装telnet服务的实现方法
- 12-11docker存储目录迁移示例教程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-07Tomcat部署war包并成功访问网页详细图文教程
- 01-07windows server 2008安装配置DNS服务器




