Redis一主两从三哨兵部署

本文详细介绍了在 CentOS 7.5 上部署 Redis 5.0.5 的主从复制和哨兵集群,包括配置步骤、验证复制和哨兵功能,并展示了故障转移过程。

基础环境:CentOS 7.5    Redis5.0.5

一、部署Redis

三个节点部署Redis,过程略

二、部署主从+哨兵

1、配置redis.conf

master   172.16.254.106

daemonize yes
dir /redis/data
logfile "/redis/log/redis.log"
requirepass redis
masterauth redis
bind 172.16.254.106
timeout 300
save ""

slave1    172.16.254.107

daemonize yes
logfile "/redis/log/redis.log"
dir /redis/data
requirepass redis
masterauth redis
timeout 300
bind 172.16.254.107
slaveof 172.16.254.106 6379
save ""

slave2     172.16.254.108

daemonize yes
logfile "/redis/log/redis.log"
dir /redis/data
requirepass redis
masterauth redis
timeout 300
bind 172.16.254.108
slaveof 172.16.254.106 6379
save ""

2、配置sentinel.conf

master   172.16.254.106

sentinel monitor mymaster 172.16.254.106 6379 2
sentinel down-after-milliseconds mymaster 10000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 15000
sentinel auth-pass mymaster redis
bind 172.16.254.106
port 26379
daemonize yes
logfile /redis/log/sentinel.log
dir /redis/data

slave1    172.16.254.107

sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 172.16.254.106 6379 2
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 15000
sentinel auth-pass mymaster redis
bind 172.16.254.107
port 26379
daemonize yes
logfile /redis/log/sentinel.log
dir /redis/data

slave2    172.16.254.108

sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 172.16.254.106 6379 2
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 15000
sentinel auth-pass mymaster redis
bind 172.16.254.108
port 26379
daemonize yes
logfile /redis/log/sentinel.log
dir /redis/data

3、启动redis和sentinel

/redis/bin/redis-server /redis/conf/redis.conf
/redis/bin/redis-sentinel /redis/conf/sentinel.conf

4、配置开机启动

su - redis -c "/redis/bin/redis-server /redis/conf/redis.conf"
su - redis -c "/redis/bin/redis-sentinel /redis/conf/sentinel.conf"

三、验证主从复制和哨兵

1、验证复制

master   172.16.254.106

redis-cli -p 6379 -h 172.16.254.106 -a redis
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
172.16.254.106:6379> set handong dongdong
OK

slave1    172.16.254.107

redis-cli -p 6379 -h 172.16.254.107 -a redis
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
172.16.254.107:6379> get handong
"dongdong"

slave2    172.16.254.108

redis-cli -p 6379 -h 172.16.254.108 -a redis
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
172.16.254.108:6379> get handong
"dongdong"

2、验证哨兵

在 master   172.16.254.106关闭redis

master   172.16.254.106

172.16.254.106:6379> shutdown
not connected>

查看sentinel日志

24832:X 02 Mar 2021 18:31:44.372 * +slave-reconf-inprog slave 172.16.254.107:6379 172.16.254.107 6379 @ mymaster 172.16.254.106 6379
24832:X 02 Mar 2021 18:31:44.372 * +slave-reconf-done slave 172.16.254.107:6379 172.16.254.107 6379 @ mymaster 172.16.254.106 6379
24832:X 02 Mar 2021 18:31:44.613 # -odown master mymaster 172.16.254.106 6379
24832:X 02 Mar 2021 18:31:44.613 # +failover-end master mymaster 172.16.254.106 6379
24832:X 02 Mar 2021 18:31:44.613 # +switch-master mymaster 172.16.254.106 6379 172.16.254.108 6379
24832:X 02 Mar 2021 18:31:44.613 * +slave slave 172.16.254.107:6379 172.16.254.107 6379 @ mymaster 172.16.254.108 6379
24832:X 02 Mar 2021 18:31:44.614 * +slave slave 172.16.254.106:6379 172.16.254.106 6379 @ mymaster 172.16.254.108 6379
24832:X 02 Mar 2021 18:31:54.740 # +sdown slave 172.16.254.106:6379 172.16.254.106 6379 @ mymaster 172.16.254.108 6379

日志显示master已转到 172.16.254.108

slave1    172.16.254.107

172.16.254.107:6379> info replication
# Replication
role:slave
master_host:172.16.254.108
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:1066441
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:03dbe80af15f63cdbec15fea68fb1e61d755448c
master_replid2:d4597eea20a0a990b90617b9a012235dbbf56c9b
master_repl_offset:1066441
second_repl_offset:1039824
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:17866
repl_backlog_histlen:1048576

查看sentinel日志

31194:X 02 Mar 2021 18:31:42.541 # +sdown master mymaster 172.16.254.106 6379
31194:X 02 Mar 2021 18:31:42.708 # +new-epoch 3
31194:X 02 Mar 2021 18:31:42.712 # +vote-for-leader 6c89091bdbc3096afc92a229f8b76f1addbadb02 3
31194:X 02 Mar 2021 18:31:43.074 # +config-update-from sentinel 6c89091bdbc3096afc92a229f8b76f1addbadb02 172.16.254.106 26379 @ mymaster 172.16.254.106 6379
31194:X 02 Mar 2021 18:31:43.074 # +switch-master mymaster 172.16.254.106 6379 172.16.254.108 6379
31194:X 02 Mar 2021 18:31:43.075 * +slave slave 172.16.254.107:6379 172.16.254.107 6379 @ mymaster 172.16.254.108 6379
31194:X 02 Mar 2021 18:31:43.075 * +slave slave 172.16.254.106:6379 172.16.254.106 6379 @ mymaster 172.16.254.108 6379
31194:X 02 Mar 2021 18:31:53.156 # +sdown slave 172.16.254.106:6379 172.16.254.106 6379 @ mymaster 172.16.254.108 6379日志显示master已转到172.16.254.108

slave2    172.16.254.108

172.16.254.108:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.16.254.107,port=6379,state=online,offset=1083399,lag=1
master_replid:03dbe80af15f63cdbec15fea68fb1e61d755448c
master_replid2:d4597eea20a0a990b90617b9a012235dbbf56c9b
master_repl_offset:1083399
second_repl_offset:1039824
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1005531
repl_backlog_histlen:77869

在redis命令行查到当前节点为master

查看sentinel日志

31320:X 02 Mar 2021 18:31:41.900 # +sdown master mymaster 172.16.254.106 6379
31320:X 02 Mar 2021 18:31:42.001 # +odown master mymaster 172.16.254.106 6379 #quorum 2/2
31320:X 02 Mar 2021 18:31:42.001 # +new-epoch 3
31320:X 02 Mar 2021 18:31:42.001 # +try-failover master mymaster 172.16.254.106 6379
31320:X 02 Mar 2021 18:31:42.063 # +vote-for-leader 58efcb63fbf69a680b49265dd5f789ecf90d44de 3
31320:X 02 Mar 2021 18:31:42.063 # 6c89091bdbc3096afc92a229f8b76f1addbadb02 voted for 6c89091bdbc3096afc92a229f8b76f1addbadb02 3
31320:X 02 Mar 2021 18:31:42.071 # 1b8a0ee301ad416c543a90e221e8144888ae4e2a voted for 6c89091bdbc3096afc92a229f8b76f1addbadb02 3
31320:X 02 Mar 2021 18:31:42.431 # +config-update-from sentinel 6c89091bdbc3096afc92a229f8b76f1addbadb02 172.16.254.106 26379 @ mymaster 172.16.254.106 6379
31320:X 02 Mar 2021 18:31:42.431 # +switch-master mymaster 172.16.254.106 6379 172.16.254.108 6379
31320:X 02 Mar 2021 18:31:42.431 * +slave slave 172.16.254.107:6379 172.16.254.107 6379 @ mymaster 172.16.254.108 6379
31320:X 02 Mar 2021 18:31:42.431 * +slave slave 172.16.254.106:6379 172.16.254.106 6379 @ mymaster 172.16.254.108 6379
31320:X 02 Mar 2021 18:31:52.512 # +sdown slave 172.16.254.106:6379 172.16.254.106 6379 @ mymaster 172.16.254.108 6379

启动 172.16.254.106节点redis服务

redis-server /redis/conf/redis.conf

172.16.254.106

172.16.254.106:6379> info replication
# Replication
role:slave
master_host:172.16.254.108
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:1117795
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:03dbe80af15f63cdbec15fea68fb1e61d755448c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1117795
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1106692
repl_backlog_histlen:11104

可以看到redis启动之后,变成了slave节点。

查看三个节点的sentinel日志都出现以下信息:

24832:X 02 Mar 2021 18:36:50.723 # -sdown slave 172.16.254.106:6379 172.16.254.106 6379 @ mymaster 172.16.254.108 6379

172.16.254.106作为slave的身份已经加入。

<think> 首先,用户的问题是:“我想查找Spring Boot连接Redis哨兵架构的方法 请问Spring Boot连接Redis哨兵架构的实现方法”。这是个具体的技术问题,需要我基于提供的引用来回答。 回顾系统级指令: - 所有行内数学表达式必须使用$...$格式(但这个问题不涉及数学表达式,所以我可能不需要这个)。 - 独立公式使用$$...$$(同样,不适用)。 - LaTeX语法正确(不适用)。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识(例如,[^1])。 - 回答结构清晰,逐步解决用户问题。 - 尽量保证回答真实可靠。 用户引用了多个来源(引用[1]到[^5]),这些引用讨论了Redis从架构、哨兵架构,以及如何在Spring Boot中集成它们。用户明确想了解如何连接Redis哨兵架构的实现方法。 关键点从引用中提取: - 引用[1]:提到Redis从架构的搭建、Jedis连接代码、哨兵架构的搭建、哨兵Jedis连接代码、Spring Boot整合Redis连接代码。 - 引用[2]:描述Redis从复制和哨兵架构,强调了高可用性。 - 引用[3]:提供了Spring Boot整合Redis的依赖和示例项目。 - 引用[4]:解释从和哨兵架构的重要性,并提到部署多个节点保证高可用。 - 引用[5]:直接指向Spring Boot集成Redis哨兵的实战教程。 用户的问题焦点是:Spring Boot连接Redis哨兵架构的方法。所以,我需要提供实现步骤和代码示例。 结构我的回答: 1. **介绍**:简要解释Redis哨兵架构和为什么在Spring Boot中集成。 2. **步骤**:逐步说明如何配置Spring Boot连接到Redis哨兵集群。 3. **代码示例**:基于引用中的信息,提供Spring Boot的配置文件或代码片段。 4. **引用添加**:在相关部分末尾添加引用标识。 5. **相关问题**:生成相关问题作为结尾。 确保回答真实可靠: - 基于引用[1]、[3]和[5],它们提供了具体的代码和依赖。 - 引用[1]提到哨兵的Spring Boot整合Redis连接代码。 - 引用[3]给出依赖:spring-boot-starter-data-redis 和 commons-pool2。 - 引用[5]指向Spring Boot & Redis Sentinel实战。 实现方法概要: 1. 添加必要的依赖(Maven或Gradle)。 2. 配置application.properties或application.yml文件,设置Redis哨兵信息。 3. 使用StringRedisTemplate或RedisTemplate操作Redis。 详细步骤: - 依赖:在pom.xml中添加spring-boot-starter-data-redis和commons-pool2。 - 配置:指定哨兵节点、节点名称、密码等。 - 代码:注入RedisTemplate或StringRedisTemplate。 从引用[1]和[3]中提取: - 引用[3]:引入依赖。 - 引用[1]:哨兵的Spring Boot整合Redis连接代码。 用户提到“哨兵”,所以在配置中需要指定哨兵节点。 生成相关问题: - 系统指令要求生成相关问题。 - 例如:哨兵架构的故障转移过程?如何测试Redis高可用?Spring Boot集成Redis的最佳实践? 最终回答结构: - 开头:直接回答用户问题。 - 体:步骤和代码。 - 结尾:相关问题。 </think> ### Spring Boot 连接 Redis 哨兵架构的实现方法 在 Redis 哨兵架构中,哨兵(即 1 个节点、2 个从节点、3 个哨兵节点)是种高可用方案。哨兵节点负责监控节点的健康状态,在节点故障时自动提升从节点为新节点。Spring Boot 通过 `spring-boot-starter-data-redis` 组件简化了集成过程。以下是完整的实现步骤,基于引用中的最佳实践: --- #### 1. **添加依赖** 在 Spring Boot 项目的 `pom.xml` 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> ``` 这些依赖提供了 Redis 连接池和哨兵支持[^3]。 --- #### 2. **配置哨兵信息** 在 `application.properties` 或 `application.yml` 文件中配置 Redis 哨兵信息。假设您的架构是: - **节点名称**:`mymaster` - **哨兵节点**:3 个(例如 `sentinel1:26379`, `sentinel2:26379`, `sentinel3:26379`) - **密码**(如果有):`yourpassword` 使用 `application.yml` 配置示例: ```yaml spring: redis: sentinel: master: mymaster # 节点名称 nodes: - sentinel1:26379 - sentinel2:26379 - sentinel3:26379 password: yourpassword # 哨兵密码(如无密码可省略) lettuce: pool: max-active: 8 # 连接池最大连接数 max-idle: 8 min-idle: 0 ``` - **关键点**:`spring.redis.sentinel.nodes` 必须列出所有哨兵节点地址。哨兵会自动发现节点和从节点。 - 如果 Redis 需要密码,在 `spring.redis.password` 中额外配置节点密码[^1][^3]。 --- #### 3. **使用 RedisTemplate 操作 Redis** 在 Spring Boot 服务类中注入 `RedisTemplate` 或 `StringRedisTemplate` 进行数据操作: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; @Service public class RedisService { @Autowired private StringRedisTemplate redisTemplate; // 适合字符串操作 public void setKey(String key, String value) { redisTemplate.opsForValue().set(key, value); } public String getKey(String key) { return redisTemplate.opsForValue().get(key); } } ``` - **说明**:`StringRedisTemplate` 是 `RedisTemplate` 的简化版,适合键值对为字符串的场景。若需复杂数据类型(如对象),改用 `RedisTemplate<String, Object>`[^1][^3]。 --- #### 4. **测试连接** 运行 Spring Boot 应用后,通过简单的 API 测试 Redis 操作: ```java @RestController public class TestController { @Autowired private RedisService redisService; @GetMapping("/test") public String test() { redisService.setKey("hello", "world"); return redisService.getKey("hello"); // 返回 "world" } } ``` - 如果哨兵切换节点,Spring Boot 会自动重连到新节点,无需代码修改[^2][^4]。 --- #### 注意事项 - **哨兵节点部署**:确保 3 个哨兵节点已启动,并配置为监控同节点(`mymaster`)。哨兵节点通过投票机制决定节点故障转移。 - **连接池**:使用 `commons-pool2` 优化性能,避免频繁创建连接。 - **高可用验证**:手动停止节点,观察哨兵是否自动提升从节点为节点,Spring Boot 应无缝切换[^4]。 - 完整示例项目可参考引用中的 `redis-sentinel-cluster`[^3]。 Redis 哨兵架构通过自动化故障转移,确保了系统的高可用性[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值