翼度科技»论坛 云主机 服务器技术 查看内容

Docker-compose搭建Redis集群(Sentinel)的实现

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
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 文件配置
  1. # 哨兵sentinel实例运行的端口 默认26379  
  2. port 26379  
  3. sentinel monitor mymaster redis-master 6379 3
  4. # 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
  5. sentinel down-after-milliseconds mymaster 5000
  6. # 指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长
  7. sentinel parallel-syncs mymaster 1
  8. # 故障转移的超时时间
  9. sentinel failover-timeout mymaster 5000
复制代码
sentinel-entrypoint.sh脚本文件配置
  1. # 同步配置文件,启动哨兵
  2. sed -i "s/$SENTINEL_QUORUM/$SENTINEL_QUORUM/g" /etc/redis/sentinel.conf
  3. sed -i "s/$SENTINEL_DOWN_AFTER/$SENTINEL_DOWN_AFTER/g" /etc/redis/sentinel.conf
  4. sed -i "s/$SENTINEL_FAILOVER/$SENTINEL_FAILOVER/g" /etc/redis/sentinel.conf
  5. exec docker-entrypoint.sh redis-server /etc/redis/sentinel.conf --sentinel
复制代码
Dockerfile文件配置
  1. # 建立Dockerfile指定基础镜像,同时拷贝配置文件到镜像内部
  2. FROM redis
  3. EXPOSE 26379
  4. ADD sentinel.conf /etc/redis/sentinel.conf
  5. RUN chown redis:redis /etc/redis/sentinel.conf
  6. COPY sentinel-entrypoint.sh /usr/local/bin/
  7. RUN chmod +x /usr/local/bin/sentinel-entrypoint.sh
  8. ENTRYPOINT ["sentinel-entrypoint.sh"]
复制代码
docker-compose.yml文件配置
  1. # 搭建几个从库,就需要在services中配置几个信息,开放相应端口
  2. version: '2'
  3. networks:
  4.   app-tier:
  5.     driver: bridge
  6. services:
  7.   redis:
  8.     image: 'bitnami/redis:latest'
  9.     environment:
  10.       - REDIS_REPLICATION_MODE=master
  11.       - REDIS_PASSWORD=""
  12.     networks:
  13.       - app-tier
  14.     ports:
  15.       - '6380:6379'
  16.   redis-slave:
  17.     image: 'bitnami/redis:latest'
  18.     environment:
  19.       - REDIS_REPLICATION_MODE=slave
  20.       - REDIS_MASTER_HOST=redis
  21.       - REDIS_MASTER_PASSWORD=""
  22.       - REDIS_PASSWORD=""
  23.     ports:
  24.       - '6381:6379'
  25.     depends_on:
  26.       - redis
  27.     networks:
  28.       - app-tier
  29.   redis-slave2:
  30.     image: 'bitnami/redis:latest'
  31.     environment:
  32.       - REDIS_REPLICATION_MODE=slave
  33.       - REDIS_MASTER_HOST=redis
  34.       - REDIS_MASTER_PASSWORD=""
  35.       - REDIS_PASSWORD=""
  36.     ports:
  37.       - '6382:6379'
  38.     depends_on:
  39.       - redis
  40.     networks:
  41.       - app-tier
  42.   redis-slave3:
  43.     image: 'bitnami/redis:latest'
  44.     environment:
  45.       - REDIS_REPLICATION_MODE=slave
  46.       - REDIS_MASTER_HOST=redis
  47.       - REDIS_MASTER_PASSWORD=""
  48.       - REDIS_PASSWORD=""
  49.     ports:
  50.       - '6383:6379'
  51.     depends_on:
  52.       - redis
  53.     networks:
  54.       - app-tier  
  55.   redis-sentinel:
  56.     image: 'bitnami/redis-sentinel:latest'
  57.     environment:
  58.       - REDIS_MASTER_PASSWORD=""
  59.     depends_on:
  60.       - redis
  61.       - redis-slave
  62.       - redis-slave2
  63.       - redis-slave3
  64.     ports:
  65.       - '26379-26382:26379'
  66.     networks:
  67.       - app-tier
复制代码
配置文件架构
  1. redis-sentinel                        # 项目根路径
  2.     ├── docker-compose.yml            # docker-compose文件
  3.     └── sentinel                      # 存放初始化sentinel容器的相关文件
  4.         ├── Dockerfile                # sentinel构建镜像文件
  5.         ├── sentinel.conf             # sentinel配置文件
  6.         └── sentinel-entrypoint.sh    # sentinel.sh启动脚本
复制代码
启动服务
  1. # 在后面加 -d 为在后台启动
  2. # compose启动失败可以尝试手动启动Containers
  3. docker-compose up --scale redis-sentinel=4
复制代码


测试哨兵

打开4个Windows Terminal,连接redis,其中6380为master,6381、6382、6383为slave,此时只有master是有写的权限的,当使用slava进行写的时候会报
  1. (error) READONLY You can't write against a read only replica.
复制代码
错误,即为搭建成功。
​ kill掉主库容器进程,模拟宕机
  1. # Kill掉主库容器进程,模拟宕机
  2. docker kill Containerid
复制代码
这就是所谓的高负载高可用架构,在使用集群承担高负载的同时,也能进行高可用的容灾机制。
到此这篇关于Docker-compose搭建Redis集群(Sentinel)的实现的文章就介绍到这了,更多相关Docker-Compose搭建Redis集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/server/291498bml.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具