配置redis:docker+集群+主从

本文详细介绍了如何使用Docker拉取Redis镜像并创建6个容器,配置成主从集群。通过`docker create`命令创建并命名容器,设置端口映射和持久化存储,并启用集群模式。接着启动所有容器,然后使用`redis-cli`命令行工具进行集群配置,创建一主一从的结构。最后验证集群状态并进行试用,确保集群正常工作。

1.docker 拉取 redis 镜像

        访问 Redis 镜像库地址: https://hub.docker.com/_/redis?tab=tags

        我学习用,才用的是最新版本(实际生产环境建议采用稍前的版本,这样一定程度上保证可靠性)

       命令:

   $ docker pull redis:latest

2. 创建 Redis 容器

redis的主从集群,主必须是3以上的单数(为了容错投票,感兴趣的可以自行了解 Redis-cluster投票 )

        创建 6 个Redis 容器:

  •                 redis-node1:6379
  •                 redis-node2:6380
  •                 redis-node3:6381
  •                 redis-node4:6382
  •                 redis-node5:6383
  •                 redis-node6:6384

执行命令如下:

docker create --name redis-node1 --net host -v /data/redis-data/node1:/data redis:latest --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6379
docker create --name redis-node2 --net host -v /data/redis-data/node2:/data redis:latest --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6380
docker create --name redis-node3 --net host -v /data/redis-data/node3:/data redis:latest --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6381
docker create --name redis-node4 --net host -v /data/redis-data/node4:/data redis:latest --cluster-enabled yes --cluster-config-file nodes-node-4.conf --port 6382
docker create --name redis-node5 --net host -v /data/redis-data/node5:/data redis:latest --cluster-enabled yes --cluster-config-file nodes-node-5.conf --port 6383
docker create --name redis-node6 --net host -v /data/redis-data/node6:/data redis:latest --cluster-enabled yes --cluster-config-file nodes-node-6.conf --port 6384

参数解释:

--name redis-node1  该redis实例命名为 redis-node1

--net host     基于host模式创建  这样可以是不在同一台服务器的项目也可以访问redis容器

--cluster-enabled:是否启动集群,选值:yes   默认为no

--cluster-config-file 配置文件.conf :指定节点信息,自动生成

--appendonly:是否开启持久化

--cluster-node-timeout 毫秒值: 配置节点连接超时时间

效果截图:

 3、启动 Redis 容器

执行命令如下:

docker start redis-node1 redis-node2 redis-node3 redis-node4 redis-node5 redis-node6

效果截图:

确认是否启动(有时候即使如上图所示也未必启动,必须通过docker ps确认)

 4.配置集群

 进入任意一个 Redis 实例:

执行组件集群的命令:

redis-cli --cluster create 172.30.120.242:6379 172.30.120.242:6380 172.30.120.242:6381 172.30.120.242:6382 172.30.120.242:6383 172.30.120.242:6384 --cluster-replicas 1

这里的参数 --cluster-replicas 1 代表一主一从  前三个为主,后三个为从,但是主从的对应关系和顺序无关。

如果是--cluster-replicas 2 表示 一主二从(这里不会生效,因为6个实例一主二从意味着只有两个主,这样不行,主redis的数量必须是3个以上的单数)

执行截图:

 配置完之后查看一下集群节点信息:

使用命令:

/data# redis-cli -c
127.0.0.1:6379> cluster nodes

 可以看到主从设置和槽位分配信息

5.试用一下

 

 ok,配置完成了!

<think>首先,用户的问题是基于之前的引用,但指令说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。” 然而,本次对话历史中没有显示上一次的问题和回答。在系统消息中,这是第一条用户消息,所以可能没有上一次的问题。系统消息中提到了“用户上一次的问题”,但查看上下文,这是对话的开始。 系统指令说:“尽可能多的参考用户上一次的问题和你的回答”,但由于这是第一条消息,我需要假设没有历史。用户消息中提到:“上述引用仅供参考,并不是用户真正的需求”,所以我应该专注于用户的当前问题。 用户当前问题是:“我想查找在docker中安装redis配置主从和Sentinel的方法 请问docker安装redis配置主从和Sentinel的详细步骤” 所以,我需要提供详细的步骤。 现在,回答必须遵循系统级指令: 1. 所有行内数学表达式使用 $...$ 格式。但在本上下文中,是关于DockerRedis,所以可能没有数学表达式。如果有变量或路径,我应该考虑是否适用。例如,路径或端口号可能算作变量,但指令指定“变量、不等式、方程等”,所以可能不需要。尽量只在有数学内容时使用。 2. 独立公式使用 $$...$$。同样,可能不适用。 3. LaTeX语法正确。既然没有数学,可能不需要。 4. 使用中文回答。 5. 生成相关问题。指令说:“生成相关问题”,并在示例中显示在末尾。 6. 回答中引用的段落末尾自然地添加引用标识,例如:[^1]。引用来自用户提供的引用[1]到[5],我应该引用这些作为来源。 用户提供了引用[1]到[5],是关于Docker Compose部署Redis主从和Sentinel集群的。所以,在回答中,我需要引用这些来源。 回答结构:指令说“回答结构清晰,帮助用户逐步解决问题”,所以需要逐步说明。 从引用中提取关键步骤: - 引用[1]:提到了使用Docker Compose部署Redis主从与Sentinel,配置文件的示例(redis-master.conf, redis-slave.conf, sentinel.conf)。 - 引用[2]:创建Sentinel配置文件,示例内容。 - 引用[3]:运行Sentinel容器的命令示例。 - 引用[4]:类似,docker run命令启动Sentinel。 - 引用[5]:Docker安装Redis+Sentinel,SpringBoot配置,但用户只问安装部分。 用户指定了“docker中安装redis配置主从和Sentinel”,所以专注于安装和配置。 详细步骤大纲: 1. 准备Docker环境:确保DockerDocker Compose已安装。 2. 创建配置文件目录。 3. 编写主Redis节点的配置文件。 4. 编写从Redis节点的配置文件。 5. 编写Sentinel配置文件。 6. 使用Docker Compose或docker run命令启动容器。 从引用[1]中,有Docker Compose配置的暗示。引用[5]也有部分。 我应该建议使用Docker Compose来简化,因为引用[1]提到它。 步骤: - 创建目录结构。 - 编写配置文件:主redis.conf, 从redis.conf, sentinel.conf。 - 编写docker-compose.yml文件。 - 运行docker-compose up。 在回答中,提供示例配置文件内容,基于引用。 例如: - 主节点配置:基于引用[1],redis-master.conf可能包括port, requirepass, etc. - 从节点配置:slaveof指向主节点。 - Sentinel配置:monitor主节点,auth-pass等。 然后,在docker-compose.yml中定义服务。 引用[2],[3],[4]提供了docker run命令,但Compose更清晰。 最终,在回答中: - 使用中文。 - 结构清晰:分步骤。 - 在引用内容的末尾添加引用标识。 - 生成相关问题。 相关问题示例:类似于示例中的“快速排序相关问题”。 例如: 1. 如何验证Redis主从复制是否正常工作? 2. 如何测试Sentinel故障转移? 3. 如何扩展Redis Sentinel集群? 4. Docker中部署Redis的常见问题? 现在,编写回答。 </think>### Docker 中安装 Redis配置主从与 Sentinel 的详细步骤 以下是基于 Docker 部署 Redis 主从(Replication)和 Sentinel(哨兵)高可用集群的完整步骤。Sentinel 用于监控主节点的健康状态,并在故障时自动切换到从节点,确保集群的高可用性[^1]。整个过程使用 Docker Compose 工具简化部署,参考了用户提供的引用内容。步骤包括准备工作、配置文件创建、启动容器和验证配置。 #### **准备工作** 1. **确保 Docker 环境已安装** 在开始前,确保 DockerDocker Compose 已安装在您的系统上。可以通过以下命令检查版本: ```bash docker --version docker-compose --version ``` 如果未安装,请参考 [Docker 官方文档](https://docs.docker.com/get-docker/)安装。 2. **创建项目目录结构** 在本地创建一个项目目录(例如 `redis-cluster`),并为其子目录用于存放配置文件和数据卷: ```bash mkdir -p redis-cluster/master redis-cluster/slave1 redis-cluster/slave2 redis-cluster/sentinel cd redis-cluster ``` 这个结构便于管理主节点、从节点和 Sentinel 的配置[^1]。 #### **步骤 1: 编写 Redis 配置文件** Redis 主从复制需要为每个节点创建配置文件。以下配置文件基于引用[1]和[2]的示例调整,确保安全性(如设置密码)。 - **主节点配置文件 (`master/redis.conf`)** 创建文件 `redis-cluster/master/redis.conf`,内容如下: ```conf port 6379 requirepass "123456" # 主节点密码,用于从节点和Sentinel认证 masterauth "123456" # 从节点连接主节点时使用相同密码 dir /data # 数据存储目录 daemonize no # 在Docker中保持前台运行 appendonly yes # 启用AOF持久化 protected-mode no # 禁用保护模式,允许外部访问 ``` 此配置指定 Redis 主节点监听端口 6379,并启用认证[^1][^2]。 - **从节点配置文件 (`slave1/redis.conf` 和 `slave2/redis.conf`)** 创建两个从节点配置文件(示例为 `slave1/redis.conf`),内容类似: ```conf port 6380 # 从节点端口,slave2 可设置为 6381 requirepass "123456" # 从节点密码 masterauth "123456" # 用于连接主节点的密码 replicaof master 6379 # 指向主节点(在Docker网络中通过服务名访问) dir /data # 数据存储目录 daemonize no appendonly yes protected-mode no ``` 注意:`replicaof` 参数指定主节点的服务名(在后续 Docker Compose 中定义为 `master`)和端口[^1][^5]。 #### **步骤 2: 编写 Sentinel 配置文件** Sentinel 监控 Redis 主节点,并在故障时选举新的主节点。创建多个 Sentinel 配置文件(例如 `sentinel/sentinel.conf`),参考引用[2]和[4]调整。 - **Sentinel 配置文件 (`sentinel/sentinel.conf`)** 创建文件 `redis-cluster/sentinel/sentinel.conf`,内容如下: ```conf port 26379 # Sentinel 端口(可复制文件用于多个Sentinel,端口改为26380等) dir "/tmp" # 临时目录 sentinel monitor the_master master 6379 2 # 监控主节点(名称"the_master",服务名"master",端口6379,quorum=2) sentinel auth-pass the_master 123456 # 主节点认证密码 sentinel failover-timeout the_master 10000 # 故障转移超时时间 sentinel deny-scripts-reconfig yes # 禁用脚本重配置,增强安全 daemonize no protected-mode no ``` 关键点: - `sentinel monitor the_master master 6379 2`:指定监控的主节点(服务名 `master`),`2` 表示需要至少 2 个 Sentinel 同意才能触发故障转移[^2][^4]。 - 如果需要多个 Sentinel,复制此文件并修改端口(如 26380),quorum 值保持至少 2 以确保高可用[^5]。 #### **步骤 3: 编写 Docker Compose 文件** 使用 Docker Compose 定义所有服务,简化启动过程。创建文件 `docker-compose.yml` 在项目根目录,内容如下(基于引用[1]和[5]调整): ```yaml version: '3.8' services: # Redis 主节点 master: image: redis:7.0.5 # 指定Redis镜像版本 container_name: redis-master command: redis-server /usr/local/etc/redis/redis.conf volumes: - ./master/redis.conf:/usr/local/etc/redis/redis.conf - ./master/data:/data # 数据卷持久化数据 networks: - redis-net ports: - "6379:6379" # 暴露主节点端口 # Redis 从节点 1 slave1: image: redis:7.0.5 container_name: redis-slave1 command: redis-server /usr/local/etc/redis/redis.conf volumes: - ./slave1/redis.conf:/usr/local/etc/redis/redis.conf - ./slave1/data:/data networks: - redis-net ports: - "6380:6380" depends_on: - master # 确保主节点先启动 # Redis 从节点 2(可选,增加冗余) slave2: image: redis:7.0.5 container_name: redis-slave2 command: redis-server /usr/local/etc/redis/redis.conf volumes: - ./slave2/redis.conf:/usr/local/etc/redis/redis.conf - ./slave2/data:/data networks: - redis-net ports: - "6381:6381" depends_on: - master # Sentinel 节点 1 sentinel1: image: redis:7.0.5 container_name: sentinel-26379 command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf networks: - redis-net ports: - "26379:26379" depends_on: - master - slave1 - slave2 # Sentinel 节点 2(增加Sentinel节点提高可靠性) sentinel2: image: redis:7.0.5 container_name: sentinel-26380 command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf # 复用配置文件,实际中可为不同文件 networks: - redis-net ports: - "26380:26380" depends_on: - master # 定义自定义网络,确保容器间可通过服务名通信 networks: redis-net: driver: bridge ``` 关键点: - **网络配置**:自定义网络 `redis-net` 允许容器通过服务名(如 `master`)相互访问,避免 IP 硬编码[^1][^5]。 - **数据卷**:映射本地目录到容器内部,确保配置和数据持久化(避免重启丢失)[^3][^4]。 - **Sentinel 数量**:部署至少 2-3 个 Sentinel 节点,quorum 值设置为多数(例如 2)以支持故障转移[^2][^4]。 #### **步骤 4: 启动集群** 在项目根目录运行 Docker Compose 命令启动所有服务: ```bash docker-compose up -d # -d 后台运行 ``` 启动后,检查容器状态: ```bash docker ps # 确认所有容器正常运行 ``` #### **步骤 5: 验证配置** - **验证主从复制**:连接到主节点,检查复制状态: ```bash docker exec -it redis-master redis-cli -a 123456 info replication ``` 输出中应显示 `role:master` 和 `connected_slaves:2`(表示两个从节点已连接)[^1]。 - **验证 Sentinel 监控**:连接到 Sentinel 节点,检查主节点状态: ```bash docker exec -it sentinel-26379 redis-cli -p 26379 sentinel masters ``` 输出应显示主节点信息,包括 IP 和状态[^2][^5]。 - **测试故障转移**:手动停止主节点,Sentinel 应自动选举新主节点: ```bash docker stop redis-master docker exec -it sentinel-26379 redis-cli -p 26379 sentinel get-master-addr-by-name the_master ``` 输出应显示新的主节点 IP[^4]。 #### **注意事项** - **安全性**:密码(如 `123456`)仅为示例,生产环境应使用强密码并限制访问[^2]。 - **资源优化**:可根据需要调整容器资源(如 CPU 和内存),或添加更多从节点/Sentinel 节点增强可靠性[^5]。 - **备份恢复**:定期备份数据卷目录(如 `./master/data`),以防数据丢失[^1]。 通过以上步骤,您已成功在 Docker 中部署 Redis 主从与 Sentinel 集群。Sentinel 系统会自动处理故障转移,确保服务高可用[^1][^5]。 ### 相关问题 1. 如何监控 Redis Sentinel 的运行状态和日志? 2. Docker 中部署 Redis 主从时,如何处理网络配置冲突(如端口占用)? 3. 如何扩展 Redis Sentinel 集群以支持更多节点? 4. Spring Boot 应用如何配置连接到 Redis Sentinel 集群(如引用[5]中的示例)?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值