redis高可用解决方案(一):哨兵模式
redis哨兵模式
使用redis的分片可以满足redis内存的扩容,但是一旦有服务器宕机,那么整个redis都将无法使用
redis可以利用哨兵模式来实现redis的高可用
哨兵机制原理
首先配置主从结构,一台主机下面可以挂载多台从机,主机的数据同步到从机,但是从机只能读不能写
哨兵进行监听,利用心跳检测机制检查当前主机是否存货,如果超过3次没有回应则表示主机宕机
当主机宕机后,会从当前的从机中选举一个主机,其余机器都是从机,以前的主机在从新启动以后也会挂载到当前主机上
主从搭建步骤
检查是否有启动的redis
ps -ef|grep redis
关闭redis
kill -9 kid
复制分片文件夹更名为sentinel
cp shards sentinel
进入sentinel
cd sentinel
启动多台 redis
redis-server redis-6379.conf & redis-server redis-6380.conf & redsi-server redis-6381.conf
配置主从
主机:6379
从机6380,6381
连接从机
redis-server redis-6380.conf
挂载到主机
slaveof 主机ip 端口
检查挂载情况
info replication
哨兵搭建
在redis目录下有一个哨兵的配置文件复制到sentinel目录下
cp sentine.conf sentine
使用vim打开sentine.conf配置文件
vim sentine.conf
如下修改
关闭保护模式 protected-mode no #去点注释 开启后台启动 daemonize yes 修改哨兵监听端口 sentinel monitor mymaster 127.0.0.1 6379 1
启动哨兵
redis-sentinel sentinel.conf
在springboot中集成redis哨兵
配置文件 redis.properties
redis.sentinel.masterName=mymaster
redis.sentinels=39.101.165.86:26379
redisConfig.java
@PropertySource(value = "classpath:/properties/redis.properties")
@Configuration
public class RedisConfig {
@Value("${redis.sentinel.masterName}")
private String masterName;
@Value("${redis.sentinels}")
private String sentinels;
@Bean(name = "jedisSentinelPool")
public JedisSentinelPool jedisSentinelPool(){
Set<String> sentinel = new HashSet<>();
sentinel.add(sentinels);
JedisSentinelPool pool = new JedisSentinelPool(masterName, sentinel);
return pool;
}
@Bean
@Scope("prototype")
public Jedis jedis(@Qualifier("jedisSentinelPool")JedisSentinelPool pool){
Jedis jedis = pool.getResource();
return jedis;
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SAP Spartacus CmsPage的加载逻辑
- JUnit 5 测试 Spring 引擎的时候提示 junit-vintage 错误
- SAP Spartacus activeBaseSite的设置逻辑
- SAP Spartacus取语言设置的入口程序
- 几行 Python 代码实现文字识别,你敢信?
- SAP Spartacus的navigation初始化
- 大数据ETL实践探索 ---- 笔试面试考点
- jQuery 效果
- jQuery 样式操作
- Nginx 限制资源的访问
- 如何设计一个秒杀系统
- Linux下登录凭证窃取技巧
- kali修改root密码
- PPT画成这样,述职答辩还能过吗?
- 详解 Cookie,Session,Token