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

 更新时间:2023年07月07日 11:31:00   作者:楼下安同学  
本文主要介绍了Docker-compose搭建Redis集群(Sentinel)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

这就是所谓的高负载高可用架构,在使用集群承担高负载的同时,也能进行高可用的容灾机制。

到此这篇关于Docker-compose搭建Redis集群(Sentinel)的实现的文章就介绍到这了,更多相关Docker-Compose搭建Redis集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker跨服务器通信Overlay解决方案(上)之 Consul单实例

    Docker跨服务器通信Overlay解决方案(上)之 Consul单实例

    这篇文章主要介绍了Docker跨服务器通信Overlay解决方案(上)之 Consul单实例,本文通过场景分析实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • docker-compose简单使用方法详解

    docker-compose简单使用方法详解

    Compose通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,这篇文章主要介绍了docker-compose简单使用方法,需要的朋友可以参考下
    2022-10-10
  • docker 安装ElasticSearch 6.x的教程详解

    docker 安装ElasticSearch 6.x的教程详解

    这篇文章主要介绍了docker 安装ElasticSearch 6.x的教程,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-04-04
  • docker搭建本地私有仓库的实现

    docker搭建本地私有仓库的实现

    有时候使用Docker Hub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,本文主要介绍了docker搭建本地私有仓库的实现,感兴趣的可以了解一下
    2023-12-12
  • Docker容器如何开启特权模式

    Docker容器如何开启特权模式

    文章主要解决Docker容器中无法使用systemctl命令的问题,其原因在于大部分的系统镜像移除了init软件包,导致镜像中没有/sbin/init文件,解决方法是通过编写Dockerfile文件修改镜像,构建新的镜像,并运行新构建的镜像,需要注意的是,开启特权模式虽然方便,但可能存在安全风险
    2024-10-10
  • Docker 安装Nginx与配置Nginx的案例

    Docker 安装Nginx与配置Nginx的案例

    Nginx是一个高性能的HTTP和反向代理web服务器,ginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行,下面通过本文给大家介绍Docker 安装Nginx与配置Nginx的案例,感兴趣的朋友一起看看吧
    2024-08-08
  • ubuntu22通过docker安装wechat启动后无界面的问题及解决方法

    ubuntu22通过docker安装wechat启动后无界面的问题及解决方法

    这篇文章主要介绍了ubuntu22通过docker安装wechat启动后无界面的解决方法,通过微信创建脚本发现一系列问题,最终在小编的努力下顺利解决,下面把解决过程分享给大家,需要的朋友可以参考下
    2022-07-07
  • ubuntu如何在docker容器中安装strongswan

    ubuntu如何在docker容器中安装strongswan

    这篇文章主要介绍了ubuntu如何在docker容器中安装strongswan,起动一个ubuntu容器,我是用的docker compose启动的,compose的配置文件为ipsec-strongswan.yml,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • docker 查看容器日志命令的实现

    docker 查看容器日志命令的实现

    这篇文章主要介绍了docker 查看容器日志命令的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Docker部署MinIO镜像的方法(保姆级教程)

    Docker部署MinIO镜像的方法(保姆级教程)

    本文主要介绍了使用Docker部署MinIO镜像,包括创建挂载目录、运行MinIO容器的参数解析、使用Compose运行MinIO容器等,具有一定的参考价值,感兴趣的可以了解一下
    2024-12-12

最新评论