docker-compose搭建一个公网访问的redis哨兵集群

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 docker-compose入门之redis哨兵的搭建


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

docker的出现,极大的方便了我们快速的安装各种java开发中用到的中间件。这里首先以redis的哨兵为例,redis的单机版安装这里就不简述了。首先确保你的云服务器上已经安装了doker和docker-compose。


提示:以下是本篇文章正文内容,下面案例可供参考

一、部署环境

环境: 一台云服务器、Docker、Docker-Compose
目标: Redis哨兵模式,一主二从三哨兵
明细: Redis主节点(端口6379)、Redis从节点1(端口6380)、Redis从节点2(端口6381)、Redis哨兵1(端口26379)、Redis哨兵2(端口26380)、Redis哨兵3(端口26381)

二、哨兵集群目录

按照这个目录创建文件夹以及文件
哨兵集群的配置文件目录

二、使用步骤

1.创建master的redis.conf文件

在/home/docker/redis_master_slave_sentinel/master/conf/redis.conf文件中:

# redis 服务器的端口号(默认:6379
port 6379

# 绑定的 IP 地址,如果设置为 127.0.0.1,则只能本地访问;若设置为 0.0.0.0,则监听所有接口(默认:127.0.0.1)
bind 0.0.0.0

#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭设置为no。
protected-mode yes

# 设置密码,客户端连接时需要提供密码才能进行操作,如果不设置密码,可以注释掉此行(默认:无)
# requirepass foobared
#requirepass gzlr123456

# 是否以守护进程(daemon)模式运行,默认为 "no",设置为 "yes" 后 Redis 会在后台运行
daemonize no

# 设置日志级别(默认:notice)。可以是 debug、verbose、notice、warning
loglevel notice

# 设置日志文件的路径(默认:空字符串),如果不设置,日志会输出到标准输出
logfile "/var/log/redis.log"

# 指定本地数据存放位置
dir "/data"

# 设置数据库数量(默认:16),Redis 使用数据库索引从 015
databases 16

# 是否启用 AOF 持久化,默认为 "no"。如果设置为 "yes",将在每个写操作执行时将其追加到文件中
appendonly no

# 指定更新日志的条件,有三个可选参数 - no:表示等操作系统进行数据缓存同步到磁盘(),always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全), everysec:表示每秒同步一次(折衷,默认值);
appendfsync everysec

# 设置 AOF 持久化的文件路径(默认:appendonly.aof)
appendfilename "appendonly.aof"

# 设置是否开启 RDB 持久化,默认为 "yes"。如果设置为 "no",禁用 RDB 持久化功能
save 900 1
save 300 10
save 60 10000

# 设置 RDB 持久化文件的名称(默认:dump.rdb)
dbfilename dump.rdb

把上面master的redis.conf配置文件内容复制到/home/docker/redis_master_slave/sentinel/node_1/conf/redis.conf以及
在/home/docker/redis_master_slave/sentinel/node_2/conf/redis.conf文件中,node_1/conf/redis.conf把port端口修改为6380,node_2/conf/redis.conf中把port端口修改为6381

2.启动主从集群

在/home/docker/redis_master_slave_sentinel/replication/docker-compose.yml中:

version: "3"
services:
    redis_master: # 服务名
        image: redis  # 使用的镜像
        container_name: redis_master  # docker启动的容器名称
        volumes:
            - /home/docker/redis_master_slave_sentinel/master/data:/data     
            - /home/docker/redis_master_slave_sentinel/master/conf:/etc/redis
            - /home/docker/redis_master_slave_sentinel/master/log:/var/log
            - /home/docker/redis_master_slave_sentinel/scripts:/root/redis_scripts

        command: /bin/bash /root/redis_scripts/run_redis_server.sh master
        env_file:
            - /home/docker/redis_master_slave_sentinel/common.env   
        #ports:
        #    - 6379:6379
        network_mode: host                     
    redis_node_1:
        image: redis
        container_name: redis_node_1
        depends_on:
            - redis_master
        volumes:
            - /home/docker/redis_master_slave_sentinel/node_1/data:/data
            - /home/docker/redis_master_slave_sentinel/node_1/conf:/etc/redis
            - /home/docker/redis_master_slave_sentinel/node_1/log:/var/log
            - /home/docker/redis_master_slave_sentinel/scripts:/root/redis_scripts

        command: /bin/bash /root/redis_scripts/run_redis_server.sh slave
        env_file:
            - /home/docker/redis_master_slave_sentinel/common.env
        #ports:
        #    - 6380:6380
        network_mode: host                     
    redis_node_2:
        image: redis
        container_name: redis_node_2
        depends_on:
            - redis_master
        volumes:
            - /home/docker/redis_master_slave_sentinel/node_2/data:/data
            - /home/docker/redis_master_slave_sentinel/node_2/conf:/etc/redis
            - /home/docker/redis_master_slave_sentinel/node_2/log:/var/log
            - /home/docker/redis_master_slave_sentinel/scripts:/root/redis_scripts

        command: /bin/bash /root/redis_scripts/run_redis_server.sh slave
        env_file:
            - /home/docker/redis_master_slave_sentinel/common.env
        #ports:
        #    - 6381:6381
        network_mode: host  

该处的网络模式为 host,所以你的云服务器安全组设置中,必须把这些用到的端口添加到安全组中。

在/home/docker/redis_master_slave_sentinel/common.env文件中配置密码

REQUIRE_PASS=ghxk123456
MASTER_AUTH=ghxk123456
#MASTER_HOST=redis_master
MASTER_HOST=1.192.111.236    #注意,此处一定要修改成你自己的服务器ip
MASTER_PORT=6379

在/home/docker/redis_master_slave_sentinel/replication目录下运行容器启动命令

启动主从集群命令

启动主从集群容器后,使用 docker ps 命令查看集群

在这里插入图片描述
至此,主从集群启动成功。
我们进入master节点内部,查看信息
进入master节点容器内部
set以及get都没问题。接着看一下主从信息
查看主从信息

3.启动哨兵

在/home/docker/redis_master_slave_sentinel/docker-compose.yml文件中,配置哨兵相关的设置

# 服务器的端口号
port 26379

# 可访问的 IP 地址
bind 0.0.0.0     

# 日志文件
logfile "sentinel.log"

# 监控的主机(格式为 sentinel monitor 主机名 主机ip 主机端口 多少个哨兵节点都认为主节点不可达时才会进行故障转移的数量)
sentinel monitor ms_redis 1.197.111.239 6379 2   #注意,此处一定要修改为你的服务器ip地址

# 监控的主机密码(格式为 sentinel auth-pass 主机名 主机连接密码)
sentinel auth-pass ms_redis ghxk123456

# 指定在多少毫秒内,哨兵节点没有收到主节点的响应时,就会将主节点判定为下线状态(格式为 sentinel down-after-milliseconds 主机名 超时毫秒数)
sentinel down-after-milliseconds ms_redis 5000

# 指定进行故障转移的超时时间,即在多少毫秒内完成故障转移操作(格式为 sentinel failover-timeout 主机名 主机连接密码)
sentinel failover-timeout ms_redis 60000

# 这个配置项用于指定在进行故障转移时可以同时同步的从节点数量(格式为 sentinel parallel-syncs 主机名 数量)
sentinel parallel-syncs ms_redis 1

#表示禁止通过脚本重写哨兵的配置 该参数是涉及到安全问题的,避免脚本重复,默认为Yes
sentinel deny-scripts-reconfig yes

#设置认证密码
requirepass ghxk123456

在/home/docker/redis_master_slave_sentinel/目录下启动哨兵容器
在此目录下运行 docker-compose up -d 启动哨兵

启动后查看容器,如下图
哨兵容器启动
现在我们进入sentinel哨兵容器内部查看信息
哨兵信息

再开一个会话窗口,通过docker pause redis_master来暂停master容器
暂停master容器
暂停之后,再来sentinei哨兵节点查看信息,可以看到master节点已经从6379转移到6380了,至此主从+哨兵演示完成
切换到新的master
故障转移完成,,现在可以恢复redis_master了

docker unpause redis_master


总结

提示:这里对文章进行总结:

以上就是本次搭建过程

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用docker-compose搭建Redis集群,你可以按照以下步骤进行操作: 1. 创建一个docker-compose.yml文件,并在其中定义Redis集群的服务。你可以使用以下示例作为参考: ``` version: '3' services: redis-6379: image: redis ports: - "6379:6379" volumes: - ./redis-6379:/data command: redis-server /data/redis.conf redis-6380: image: redis ports: - "6380:6379" volumes: - ./redis-6380:/data command: redis-server /data/redis.conf redis-6381: image: redis ports: - "6381:6379" volumes: - ./redis-6381:/data command: redis-server /data/redis.conf redis-6382: image: redis ports: - "6382:6379" volumes: - ./redis-6382:/data command: redis-server /data/redis.conf redis-6383: image: redis ports: - "6383:6379" volumes: - ./redis-6383:/data command: redis-server /data/redis.conf redis-6384: image: redis ports: - "6384:6379" volumes: - ./redis-6384:/data command: redis-server /data/redis.conf ``` 2. 在每个Redis服务的目录中创建一个redis.conf文件,用于配置Redis集群的参数。你可以使用以下示例作为参考: ``` port 6379 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes ``` 3. 运行docker-compose命令来启动Redis集群: ``` docker-compose up -d ``` 这将启动Redis集群的所有服务,并将它们连接在一起。 请注意,以上步骤中的示例仅适用于在本地搭建Redis集群。如果你需要在生产环境中搭建Redis集群,你可能需要进行更多的配置和安全性措施。 #### 引用[.reference_title] - *1* *2* *3* [docker(八)—docker-compose搭建redis集群](https://blog.csdn.net/xiaoqiang65/article/details/121011071)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值