Redis 三种集群策略

Redis 是单线程的,但是一般的作为缓存使用的话,速度已经足够使用。
官方有一个简单测试:测试完成 50 个并发执行 100000 个请求,设置和获取的值是一个 256 字节字符串。结果:读的速度 110000次/s,写的速度81000次/s。

不过对于访问量特别大的服务来说,还是稍有不足。这时就需要考虑搭建集群。

Redis 主要提供三种集群策略

在主从复制中,数据库分为俩类,主数据库(master)和从数据库(slave)。

主从复制特点:

工作机制

主从配置

Redis 默认是主数据,所以 Master 无需配置,只需要修改 Slave 的配置即可。
设置需要连接的 Master 的ip端口

如果 Master 设置了密码。需要配置:

连接成功进入命令行后,可以通过以下命令行查看连接该数据库的其他库信息:

该模式是从 Redis 的 2.6 版本开始提供的,但是当时这个版本的模式是不稳定的,直到 Redis 的 2.8 版本以后,这个哨兵模式才稳定下来,无论是主从模式,还是哨兵模式,这两个模式都有一个问题,不能水平扩容,并且这两个模式的高可用特性都会受到Master主节点内存的限制。

哨兵的作用

监控 Redis 系统的运行状况,功能如下

工作机制

哨兵配置

哨兵配置的配置文件为sentinel.conf,设置主机名称,地址,端口,以及选举票数即恢复时最少需要几个哨兵节点同意。只要配置需要监控的master就可以了,哨兵会监控连接该master的slave。

启动哨兵节点

可以在任何一台服务器上查看指定哨兵节点信息:

控制台输出哨兵信息

3.0 版本之前的 Redis 是不支持集群的,那个时候,Redis 如果想要集群的话,就需要一个中间件,然后这个中间件负责将需要存入 Redis 中的数据的 key 通过一套算法计算得出一个值。然后根据这个值找到对应的 Redis 节点,将这些数据存在这个 Redis 的节点中。在取值的时候,同样先将 key 进行计算,得到对应的值,然后就去找对应的 Redis 节点,从对应的节点中取出对应的值。

这样做有很多不好的地方,比如说计算都需要在系统中去进行,会增加系统的负担。还有就是这种集群模式下,某个节点挂掉,其他的节点无法知道。而且也不容易对每个节点进行负载均衡。

从 Redis 3.0版本开始支持 redis-cluster 集群。redis-cluster 采用无中心结构,每一个节点都保存有这个集群所有主节点以及从节点的信息,及集群状态,每个节点都和其他节点连接。所以 redis-cluster 是一种服务端分片技术。

一、twemproxy 中间件

twemproxy 又称 nutcracker,起源于推特系统中 redis、memcached 集群的轻量级代理。

Redis 代理中间件 twemproxy 是一种利用中间件做分片的技术。twemproxy 处于客户端和服务器的中间,将客户端发来的请求,进行一定的处理后(sharding),再转发给后端真正的 redis 服务器。也就是说,客户端不直接访问redis服务器,而是通过t wemproxy 代理中间件间接访问。降低了客户端直连后端服务器的连接数量,并且支持服务器集群水平扩展。

twemproxy 中间件的内部处理是无状态的,它本身可以很轻松地集群,这样可以避免单点压力或故障。

twemproxy 是一个单点,很容易对其造成很大的压力,所以通常会结合 keepalived 来实现 twemproy 的高可用。这时,通常只有一台 twemproxy 在工作,另外一台处于备机,当一台挂掉以后,vip 自动漂移,备机接替工作。关于 keepalived 的用法可自行网上查阅资料。

二、codis 中间件
codis 是一个分布式的 Redis 解决方案,由豌豆荚开源,对于上层的应用来说,连接 codis proxy 和连接原生的 redis server 没什么明显的区别,上层应用可以像使用单机的 redis 一样使用,codis底 层会处理请求的转发,不停机的数据迁移等工作,所有后边的事情,对于前面的客户端来说是透明的,可以简单的认为后边连接的是一个内存无限大的 redis 服务。

客户端分片

分区的逻辑在客户端实现,由客户端自己选择请求到哪个节点。方案可参考一致性哈希,这种方案通常适用于用户对客户端的行为有完全控制能力的场景。

三、Jedis sharding集群
Redis Sharding 可以说是在 Redis cluster 出来之前业界普遍的采用方式,其主要思想是采用 hash 算法将存储数据的 key 进行 hash 散列,这样特定的 key 会被定为到特定的节点上。
庆幸的是,Java Redis 客户端驱动 Jedis 已支持 Redis Sharding 功能,即 ShardedJedis 以及结合缓存池的 ShardedJedisPool。

Jedis 的 Redis Sharding 实现具有如下特点:

Original: https://www.cnblogs.com/zhuminghui/p/16491004.html
Author: ”竹先森゜
Title: Redis 三种集群策略

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/528968/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java秒杀系统一:环境搭建和DAO层设计

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月11日
    0115
  • redis普通手动启动安装步骤

    redis还提供了普通安装,也就是不写入开机启动,步骤如下: 部署的是redis-4.0.10版本, 部署步骤如下: 1、上传到服务器,解压 tar zxvf redis-4.0….

    Linux 2023年5月28日
    082
  • gitlab

    版本控制gitlab 1. 版本控制介绍 2. gitlab部署 版本控制介绍 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思…

    Linux 2023年6月7日
    0111
  • Beyond Compare文件对比神器,快来给文件找茬!

    在工作中很多场景下都需要比对两个文件之间的差异,你是否还傻傻的同时打开两个文件,用眼睛一行一行的核对? 赶紧来试试这个神器Beyond Compare!!它可以快速的帮你找出两个文…

    Linux 2023年6月7日
    094
  • ACL和NAT

    NAT 概述: NAT(网络地址翻译)一个数据包目的ip或者源ip为私网地址, 运营商的设备 无法转发数据。 NAT工作机制: 一个数据包从企业内网去往公网时,路由器将数据包当 中…

    Linux 2023年6月6日
    086
  • Question03-查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩

    * SELECT stu.SID, stu.Sname, CAST(AVG(sc.score) AS DECIMAL(18,2)) avg_score FROM Student s…

    Linux 2023年6月7日
    079
  • Linux下的SELINUX

    理解Linux下的SELinux 长久以来,每当遇到授权问题或者新安装的主机,我的第一反应是通过 setenforce 0命令禁用SELinux,来减少产生的权限问题,但是这并不是…

    Linux 2023年6月7日
    079
  • Dockerfile 使用 SSH docker build

    如果在书写 Dockerfile 时,有些命令需要使用到 SSH 连接,比如从私有仓库下载文件等,那么我们应该怎么做呢? Dockerfile 文件配置 为了使得 Dockerfi…

    Linux 2023年6月7日
    078
  • 构建自定义镜像并优化dockerfile文件

    服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64…

    Linux 2023年6月7日
    082
  • nodejs调用shell

    shelljs https://github.com/shelljs/shelljs 实例 var shell = require(‘shelljs’); if (!shell.w…

    Linux 2023年5月28日
    092
  • FTP文件服务的安装与部署

    FTP(文件传输协议)概念 FTP基于C/S模式,FTP客户端与服务器端有两种传输模式,分别是FTP主动模式、FTP被动模式,主被动模式均是以FTP服务器端为参照。企业实际环境中,…

    Linux 2023年6月7日
    080
  • Ubuntu 20.04 双系统安装完整教程

    1、查看电脑的信息 1.1 查看BIOS模式 “win+r”快捷键进入”运行”,输入”msinfo32″回车…

    Linux 2023年6月7日
    086
  • Centos系统部署nginx1.18.0

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 一、 安装依赖包 yum –y install gcc gcc-c++ openssl openssl-d…

    Linux 2023年5月27日
    084
  • Unity Profiler的使用

    选中Development Build、Autoconnect Profiler和Script Debugging三个选项,如下图所示。 点击Build And Run按钮,将会编…

    Linux 2023年6月7日
    082
  • 【Javaweb】JSP标准标签库

    JSTL 1.什么是JSTL 2.版本 3.标签函数库 4.优点 JSTL基本概念 标签(Tag) 标签库(Tag library) 标签库描述文件(Tag Library Des…

    Linux 2023年6月14日
    0118
  • Linux文本处理相关命令

    一、文本处理命令 Linux sort命令用于将文本文件内容加以排序。 sort 可针对文本文件的内容,以行为单位来排序。 语法格式如下: sort [参数]…[文件] 相关参…

    Linux 2023年5月27日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球