Redis缓存高可用集群

Redis-Redis缓存高可用集群 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。不足在于所有的元数据的更新压力全部集中在一个地方,可能导致元数据的存储压力。 阅读详情

1、Redis集群方案比较

哨兵模式

在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况

【3分钟干货】
‍‍redis的哨兵的监控机制是怎样的?

哨兵监控也是有集群的,会有多个哨兵进行监控,当判断发生故障的哨兵达到一定数量的时候才进行修复。一个健壮的部署至少需要三个哨兵实例。

1.每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
2.如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
3.如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
4.当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
5.在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令
6.当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次
7.若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。——选自 Java面经

高可用集群模式

redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到1000节点。redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单

2、redis高可用集群搭建

单机redis安装

下载地址:http://redis.io/download
安装步骤:

# 安装gcc
yum install gcc

# 把下载好的redis-3.0.0-rc2.tar.gz放在/usr/local文件夹下,并解压
tar -zxvf redis-3.0.0-rc2.tar.gz

# 进入到解压好的redis-3.0.0目录下,进行编译
make

# 进入到redis-3.0.0/src目录下进行安装,安装完成验证src目录下是否已经生成了redis-server 、redis-cil
make install

# 建立俩个文件夹存放redis命令和配置文件
mkdir -p /usr/local/redis/etc
mkdir -p /usr/local/redis/bin

# 把redis-3.0.0下的redis.conf复制到/usr/local/redis/etc下
cp redis.conf /usr/local/redis/etc/

# 移动redis-3.0.0/src里的几个文件到/usr/local/redis/bin下
mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin

# 启动并指定配置文件
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf(注意要使用后台启动,所以修改redis.conf里的daemonize改为yes)

# 验证启动是否成功
ps -ef | grep redis 

# 查看是否有redis服务或者查看端口
netstat -tunpl | grep 6379

# 进入redis客户端 
/usr/local/redis/bin/redis-cli 

# 退出客户端
quit

# 退出redis服务: 
(1)pkill redis-server 
(2)kill 进程号                       
(3)/usr/local/redis/bin/redis-cli shutdown

redis集群搭建

redis集群需要至少要三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,由于节点数较多,这里采用在一台机器上创建6个redis实例,并将这6个redis实例配置成集群模式,所以这里搭建的是伪分布式集群模式,当然真正的分布式集群的配置方法几乎一样,搭建伪分布式集群的步骤如下:

第一步:在/usr/local下创建文件夹redis-cluster,然后在其下面分别创建6个文件夾如下
(1)mkdir -p /usr/local/redis-cluster
(2)mkdir 8001、 mkdir 8002、 mkdir 8003、 mkdir 8004、 mkdir 8005、 mkdir 8006

第一步:把之前的redis.conf配置文件copy到8001下,修改如下内容:
(1)daemonize yes
(2)port 8001(分别对每个机器的端口号进行设置)
(3)bind 192.168.0.61(必须要绑定当前机器的ip,这里方便redis集群定位机器,不绑定可能会出现循环查找集群节点机器的情况)
(4)dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
(5)cluster-enabled yes(启动集群模式)
(6)cluster-config-file nodes-8001.conf(这里800x最好和port对应上)
(7)cluster-node-timeout 5000
(8)appendonly yes

第三步:把修改后的配置文件,分别 copy到各个文夹下,注意每个文件要修改第2、4、6项里的端口号

第四步:由于 redis集群需要使用 ruby命令,所以我们需要安装 ruby
(1)yum install ruby
(2)yum install rubygems
(3)gem install redis --version 3.0.0(安装redis和 ruby的接囗)

第五步:分别启动6个redis实例,然后检查是否启动成功
(1)/usr/local/redis/bin/redis-server /usr/local/redis-cluster/800*/redis.conf
(2)ps -ef | grep redis 查看是否启动成功

第六步:在redis的安装目录下执行 redis-trib.rb命令
(1)cd /usr/local/redis-3.0.0/src
(2)./redis-trib.rb create --replicas 1 192.168.0.61:8001 192.168.0.61:8002 192.168.0.61:8003 192.168.0.61:8004 192.168.0.61:8005 192.168.0.61:8006

第七步:验证集群:
(1)连接任意一个客户端即可:./redis-cli -c -h -p (-c表示集群模式,指定ip地址和端口号)如:/usr/local/redis/bin/redis-cli -c -h 192.168.0.61 -p 800*
(2)进行验证: cluster info(查看集群信息)、cluster nodes(查看节点列表)
(3)进行数据操作验证
(4)关闭集群则需要逐个进行关闭,使用命令:
/usr/local/redis/bin/redis-cli -c -h 192.168.0.61 -p 800* shutdown

PS:当出现集群无法启动时,删除redis的临时数据文件,再次重新启动每一个redis服务,然后重新构造集群环境。
3、Java操作redis集群
借助redis的java客户端jedis可以操作以上集群,引用jedis版本的maven坐标如下:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

Java编写访问redis集群的代码非常简单,如下所示:

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

/**
 * 访问redis集群
 * @author aaron.rao
 *
 */
public class RedisCluster 
{
    public static void main(String[] args) throws IOException
    {
        Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
        jedisClusterNode.add(new HostAndPort("192.168.0.61", 8001));
        jedisClusterNode.add(new HostAndPort("192.168.0.61", 8002));
        jedisClusterNode.add(new HostAndPort("192.168.0.61", 8003));
        jedisClusterNode.add(new HostAndPort("192.168.0.61", 8004));
        jedisClusterNode.add(new HostAndPort("192.168.0.61", 8005));
        jedisClusterNode.add(new HostAndPort("192.168.0.61", 8006));
        
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(100);
        config.setMaxIdle(10);
        config.setTestOnBorrow(true);
        JedisCluster jedisCluster = new JedisCluster(jedisClusterNode, 6000, 10, config);
        System.out.println(jedisCluster.set("student", "aaron"));
        System.out.println(jedisCluster.set("age", "18"));
        
        System.out.println(jedisCluster.get("student"));
        System.out.println(jedisCluster.get("age"));
        
        jedisCluster.close();
    }
}
运行效果如下:
OK
OK
aaron
18
缓存高可用:缓存如何保证高可用? 上一课时提到了缓存集群的负载均衡策略,保证缓存服务的高可用,集群策略是最常用的,这一课时,我们以 Redis 为例,分析一下单点缓存如何扩展到集群,以及集群部署的几种常见模式。 文章目录Redis 的主从复制Redis Sentinel——Redis 哨兵Redis Cluster 集群 Redis 的主从复制 集群实现依靠副本,而副本技术有个非常关键的一点,那就是各个副本之间的快速数据同步,也就是我们常说的主从复制。 主从复制技术在关系型数据库、缓存等各类存储节点中都有比较广泛的应用。Redis 的主从复 阅读详情

相关推荐

Redis 缓存高可用集群的编程学习

然后,我们使用连接池创建了一个 Redis 客户端,并使用客户端进行键值对的设置和获取。通过以上步骤,我们成功地构建了一个高可用的 Redis 缓存集群,并通过代码示例演示了如何连接和操作集群。在本文中,我们将探讨如何构建一个高可用的 Redis 缓存集群,并提供相应的源代码示例。请注意,在实际生产环境中,还需要考虑数据持久化、监控和安全等方面的问题,以确保 Redis 集群的稳定性和可靠性。在这个示例中,我们指定 Sentinel 监控的端口号为 26379,并设置了监控的主节点地址和端口号。

loop_code966的博客 76

14 | 缓存的使用姿势(二):缓存如何做到高可用?

前面几节课,我带你了解了缓存的原理、分类以及常用缓存的使用技巧。我们开始用缓存承担大部分的读压力,从而缓解数据库的查询压力,在提升性能的同时保证系统的稳定性。这时,你的电商系统整体的架构演变成下图的样子:我们在 Web 层和数据库层之间增加了缓存层,请求会首先查询缓存,只有当缓存中没有需要的数据时才会查询数据库。在这里,需要关注缓存命中率这个指标(缓存命中率 = 命中缓存的请求数 / 总请求数)。

qq_37756660的博客 232

搭建Redis缓存高可用集群环境搭建

附件详细阐述了Redis搭建集群环境的详细步骤,如果有需要的朋友可以参考下。

高并发系统-缓存(二)-如何使用缓存

主要以缓存+数据库方式说明以数据库中的数据为准,缓存中的数据是按需加载的。分为读策略和写策略。整体流程时序如下:上述做法基本能够满足日常需求,但是在极端情况下还是会导致缓存和数据库数据不一致,如下图所示不过这种情况很极端,一般数据库的读写操作和缓存的读写操作不在一个数量级上,一般情况很难会出现读请求读取完数据后,设置A2在读写请的写数据库和删A1缓存之后才操作,除非有代码问题^_^针对这种情况,可以采用如下两种方式。

BASK2311的博客 929

网格聚类 Grid Clustering/Grid-based Clustering

本文主要简单介绍了网格聚类的基本概念,优缺点,应用场景,建模时的注意事项,评价指标,实现方法,python示例和模型参数等。

JasonH2021的博客 4827

线阵相机标定必看:如何用Halcon实现亚毫米级精度测量(以HC050标定板为例)

本文以HC050标定板为例,详细阐述了如何利用Halcon实现线阵相机的高精度标定,以达到亚毫米级测量。文章深入剖析了线阵相机标定的核心原理、面临的独特挑战,并提供了从硬件搭建、图像采集到Halcon软件实操的完整路径,重点解析了运动参数设置、精度验证及常见问题排错,为精密测量应用提供系统解决方案。

weixin_29213655的博客 311

写入缓存策略无法更改_缓存如何做到高可用

缓存如何做到高可用使用缓存承担大部分的读压力,可以缓解数据库的查询压力,提升了保证系统稳定性。分布式高可用方案 分布式缓存高可用方案有三种:客户端方案,一般称为 Smart Client 。通过指定一些数据分片和数据读写策略,实现缓存高可用。在客户端配置多个缓存节点,通过缓存写入和读取算法策略实现分布式,从而提高缓存的可用性。中间代理方案,在客户端和缓存节点之间中间层,在性能上会有一定损耗,在代理...

weixin_39970994的博客 439

Unity游戏开发必备:HybridCLR热更新实战教程(含iOS/Android适配指南)

本文详细介绍了HybridCLR在Unity游戏开发中的热更新实战教程,包括iOS/Android平台适配指南。通过环境配置、项目结构规划、热更新工作流实现等步骤,帮助开发者高效掌握C#热更新技术,解决移动游戏快速迭代的痛点问题。

weixin_29011395的博客 441

redis的主从复制和高可用、集群,以及用redis做mysql缓存

一、redis的安装先在下载安装包解压后进入目录应为已经有Makefile了所以直接make编译这里会报错,需要gcc编译器安装好gcc,再次make编译,还是会报错;这个错误根据 Readme 可知需要执行 make MALLOC=libcmake完成后,提示去到 src 目录下到src目录后执行按提示执行make test,会报错提示安装tcl工具完成后 make install 完成安装注意...

Wk_yyy的博客 3229

从误检率30%到99.7%:YOLOv8/v9工业零件缺陷检测实战(附产线部署全流程与参数调优秘籍)

工业场景YOLO实战:从实验室到车间的关键调优策略 本文针对工业缺陷检测的特殊性,系统总结了YOLOv8/v9在工业应用中的实战经验。通过齿轮厂缺陷检测案例,揭示了实验室模型与工业场景的三点本质差异:小目标特性(0.2-1mm缺陷)、复杂背景干扰(油污/反光)和数据量不足问题。重点提出了工业级解决方案:1)数据采集需覆盖极端工况(不同光照/污染/角度);2)标注采用LabelStudio+预标注提升效率;3)定制工业增强策略(反光模拟/缺陷复制粘贴)。文章还提供了完整的参数调优记录和TensorRT加速部署

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1731

CANoe-vTESTstudio之Test Diagram编辑器

总之,CANoe-vTESTstudio的Test Diagram编辑器提供了一个直观且强大的工具,用于创建和管理测试用例。通过图形化的界面和丰富的功能,测试工程师可以更轻松地编写复杂的测试脚本,并有效地进行测试开发。在上面的示例中,我们创建了一个名为"MyTestCase"的测试用例,并定义了两个测试步骤"Step1"和"Step2"。在上面的示例中,我们在执行"Step1"之后使用条件语句来确定是否执行"Step2"。在每次迭代中,我们创建一个新的测试步骤,并根据迭代次数动态生成相应的日志和验证消息。

TcData的博客 248

Redis技术笔记-从三大缓存问题到高可用集群落地实战

本文系统介绍了Redis的核心特性与常见缓存问题解决方案。Redis作为高性能键值数据库,支持多种数据结构,适用于缓存、排行榜等场景。文章重点分析了缓存三大问题:穿透(空值缓存+布隆过滤器)、击穿(互斥锁+软过期)、雪崩(分散过期+限流降级),并提供了详细解决方案。此外,详细讲解了Redis集群的搭建步骤,包括环境准备、集群创建、测试验证等环节,通过主从复制和分片机制实现高可用。最后展示了PHP连接Redis集群的实践方法,为构建高并发系统提供参考。

m0_65816971的博客 3251

7、基于机器学习的生产效率估计方法解析

本文探讨了基于机器学习的生产效率估计方法,重点介绍了效率分析树(EAT)和凸效率分析树(CEAT)算法的原理及其与传统自由处置壳(FDH)和数据包络分析(DEA)方法的对比。通过剪枝优化、生产可能性集构建及方向距离函数(DDF)估计,EAT和CEAT在避免过拟合、提升估计稳定性与处理凸性假设方面展现出优势。结合PISA教育数据的实证研究,采用箱线图、核密度图和非参数检验方法验证了不同模型效率得分分布的显著差异。研究表明,EAT与CEAT为生产效率评估提供了更准确、灵活的工具,适用于教育、企业生产和医疗等多个

milk5的博客 91

03-Redis缓存高可用集群

Redis缓存高可用集群

野心与梦 1万+

[QMT和ptrade量化交易小白入门]-125、菜场大妈加上四大现金行业指数风控,最大回撤从22%减少了一半

群里面有人建议,在菜场大妈策略的基础上,加入申万的行业指数(银行,钢铁,有色,煤炭)测算其宽度,当这四大行业其中有一个高就会清仓(用来控制回撤)。这背后的逻辑是,在存量资金博弈的市场环境中,资金总量相对固定,当银行、钢铁、有色、煤炭等大市值周期行业因基本面改善(如涨价、政策催化)或避险需求而走强时,会吸引大量资金涌入,导致其他板块(尤其是小市值股票)面临流动性虹吸。经过回测,对比上一个版本发现确实是可以降低一半的回撤,最大回撤从22.3%降到了11.4%,而且有很多时间是空仓等待。

木头大左的博客 237

CATIA二次开发一一一获取属性的几种方法

这些方法覆盖了CATIA CAA开发中属性操作的典型场景,开发者可通过类型判断实现递归遍历、跨文档关联等复杂逻辑。此方法用于遍历对象的所有属性,获取属性键后可通过类型判断选择后续处理方式。适用于处理嵌套对象或关联对象的场景(如几何特征关联制造特征)。适用于简单属性值的直接读取(如版本号、状态标识等)。用于处理多值属性(如多选参数、装配体子件列表等)。用于处理跨文档引用(如零件关联图纸文件)。

工业软件开发 430

redis高可用、redis集群、redis缓存优化

redis高可用、redis集群、redis缓存优化 今日内容概要 redis高可用 redis集群 redis缓存优化

Java5658的博客 307

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

redis三大缓存问题之缓存雪崩(搭建rediscluster高可用集群方案)

前面一篇文章介绍了redis的缓存穿透问题,接下来这篇文章着重介绍redis的缓存雪崩问题以及解决方案,最后通过代码进行测试。 (一)什么是redis缓存雪崩问题? 缓存雪崩是指,由于缓存层承载着大量请求可以有效的保护数据库存储层,但是如果缓存层同时出现大量缓存失效的情况,或者突然有个别机器节点挂掉了,导致大量的请求直接到达存储层,造成存储层也会挂掉的情况。 (二)redis缓存雪崩常用解决方案? 针对上面出现的缓存雪崩场景,通常有不限于以下一些解决方案,这些方案可以依实际场景互相搭配使用: 1)

qq_20395245的博客 854

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

玩转 Redis缓存 集群高可用

Redis作为主流nosql,在高并发使用场景中都会涉及到集群和高可用的问题,有几种持久化?场景下的缓存策略怎么选?高可用方案怎么实现?集群有哪几种?跟着这几个问题,结合一些自己使用的经验来简单分析一下。 一.有哪些持久化 Redis有两种持久化的方式:`RDB` 和 `AOF` RDB - 快照 通过预设频率write on copy来持久化数据(所以内存不宜设置超过物理内存的...

QWER654786的博客 137

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

深入解析Redis集群模式:构建高可用与可扩展的缓存系统

Redis集群是官方提供的分布式解决方案,通过数据分片(16384个哈希槽)和主从复制实现高性能、高可用和线性扩展。它解决了单机Redis的容量、性能和单点故障问题,支持无缝扩容和自动故障转移。集群采用Gossip协议通信,客户端需支持重定向处理。搭建最少需要3主3从6个节点,适合大数据量、高并发和高可用场景,但存在多Key操作限制、部署复杂等缺点。

zyyyyyhhhhh的博客 1013

搭建Redis缓存高可用集群详解

1、Redis集群方案比较 (1)哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinal工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况 (2)高可用集群模式 redis集群是一个由多个主从节点群组成的分布式服务器...

baidu_41937166的博客 1166
上一篇: Redis主从复制原理总结
下一篇: zookeeper相关名词概念与工作原理
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值