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)

大家都在看

  • linux系统编码修改

    查看当前系统默认采用的字符集locale 查看系统当前编码echo $LANG如果输出为:en_US.UTF-8 英文zh_CN.UTF-8 中文 查看系统是否安装中文字符集loc…

    Linux 2023年6月6日
    096
  • JS实现整个DIV里的字号整体放大或缩小

    JS实现对DIV里内容的字体方法或缩小 html代码 只写主要代码,样式可以自己写 <div class="content_sms"> &#x8FD…

    Linux 2023年6月7日
    088
  • php uniapp 支付宝app支付,前后端实战源码

    uniapp端,前端代码 app.php端代码 Original: https://www.cnblogs.com/xiaofengzheng/p/16457966.htmlAut…

    Linux 2023年6月7日
    084
  • 查询windows日志

    系统日志可以用来查看系统的一些信息,比如警告、错误、验证、开关机等。 打开系统日志 按下快捷键 win+R,输入 eventvwr.exe,并点击确定 查询开关机记录 点击左侧 W…

    Linux 2023年6月8日
    0114
  • redis的另一个分支 keydb

    今天无意间发现了redis还有一个分支keydb 是多线程的,貌似在机器内核多的情况下效果比redis效果好 执行这些命令 在这之前先把redis关掉 sudo systemctl…

    Linux 2023年5月28日
    082
  • centos7 删除grub2 开头的所有文件后故障修复

    环境:centos7 mini故障原因:删除根目录,/boot以及/boot/efi下递归查找到的所有grub2 开头的文件现象:无法正常开机,开机显示下图 解法(该解法过程中照片…

    Linux 2023年6月6日
    0140
  • docker部署安装Nginx

    docker部署安装Nginx 前言 Nginx是一个高性能的HTTP和反向代理web服务器,同事也提供了IMAP/POP3/SMTP服务。特点: 轻量级的Web服务器/反向代理服…

    Linux 2023年6月6日
    093
  • Linux用户和用户组

    Linux用户和用户组 1.添加新的用户 (用户ID从500开始,0-99系统管理级别、100-499系统预留) useradd 选项 用户名 参数说明 选项: -c commen…

    Linux 2023年6月11日
    098
  • Linux ARM中断控制器注册(4)【转】

    本文以S5PV210芯片为参照,S5PV210的中断控制器采用了ARM VIC(Vectored Interrupt Controller,PL192 ,ARM PrimeCell…

    Linux 2023年6月8日
    086
  • IDEA远程部署项目到Docker

    最近在写东西部署到服务器,结构是springboot工程配合docker部署。但是每次部署都3个步骤: 部署次数一多,我就怀疑人生了。就在找有没有IDEA远程部署Docker的方案…

    Linux 2023年6月7日
    086
  • CPU架构对redis的性能影响

    CPU架构对redis的性能影响 主流CPU架构 一个CPU处理器中通常有多个运行核心,每一个运行核心称为一个物理核,每个物理核都可以运行应用程序。每个物理核都拥有 私有的一级缓存…

    Linux 2023年5月28日
    0110
  • JavaScript 做的网页版扫雷小游戏

    闲来无事做了个网页版扫雷小游戏,基本实现了扫雷客户端的全部功能。但是感觉面向对象用的还不是很好,有待优化。 游戏地址:http://twgdh.com/saolei/index.h…

    Linux 2023年6月13日
    0117
  • 操作系统实现-中断及任务调度

    博客网址:www.shicoder.top微信:18223081347欢迎加群聊天 :452380935 这一次我们来对内核进行完善,主要包括全局描述符的加载、任务调度、中断等 全…

    Linux 2023年6月13日
    089
  • 宝塔配置vnc+wine实现Q群机器人

    图形界面必备 X Window System yum -y groupinstall "X Window System" 安装epel源 yum -y inst…

    Linux 2023年5月27日
    0100
  • Jquery如何使用animation动画效果改变背景色

    一、问题引入 1. jquery的animate动画虽然强大,但是无法使用其进行背景色(background-color)的动画效果变化,因为animate动画效果只能动态改变数值…

    Linux 2023年6月14日
    0218
  • 【小记】腾讯云 Linux 虚拟机如何正确修改 hosts 文件

    如果直接修改 /etc/hosts 文件,重启后设置会丢失还原,原因是腾讯云虚拟机默认使用了 Cloud-Init 进行初始化操作。 参见:https://cloud.tencen…

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