Redis Cluster

redis:集群配置

て烟熏妆下的殇ゞ 提交于 2021-01-08 18:53:07
一、redis集群相关 1.概念:redis集群是通过数据分区提供可用性的,这样即使一部分节点失效也可以继续处理请求。 2.原理:集群使用数据分片实现,一个redis集群包括16384个哈希槽,数据库中的每一个键都属于这16384中的一个,使用公式为 CRC16(key) % 16384,这个公式决定key属于哪一个槽。 比如说一个集群3个节点,A处理0-5500号的哈希槽,B处5501-11000的哈希槽,C处理11001-16384号哈希槽。 操作: 增加节点D:把ABC中一些哈希槽给D就行了 删除节点C:把C的哈希槽移动给别人,删除了C就好了。 3.主从 每个节点都有1-N个复制品,其中有一个为主节点,其余的为从,上面的例子中一旦B挂了,那么集群就挂了,没人处理5500-11000,那么B这边搞个主从,B1,B2就可以了,这样挂了一个主的从也能顶上去。但是B1,B2都挂了的话B还是挂了,集群一样会挂掉。 二、redis集群配置 接下来搭建redis集群,至少有3个才能搭建集群。 我们构建 redis-cluster 集群可以通过 redis-trib.rb 工具来完成。redis-trib.rb 是redis官方提供的一个集群管理工具,集成在redis安装包的 src 目录下。redis-trib.rb 封装了redis提供的集群命令,使用简单、便捷。redis-trib

Redis常见集群方案

时光总嘲笑我的痴心妄想 提交于 2021-01-08 18:52:33
戳蓝字「TopCoder」关注我们哦! 编者注: 笔者整理了一份【Redis不完全指南】,包含了很多详细的知识点和Redis经典面试题,可关注「TopCoder」公众号,发送 Redis 来获取~ 随着Redis中保存数据越来越多,单个Redis节点已不堪负重,需要引入Redis集群方案,Redis常见集群方案有: client分片方案、基于代理方案、redis cluster方案。 基于代理的方案一般也是基于分片或者redis cluster方案,不过对于client端来说是无感知的。 从本质上来说,这三种实现方案都是以分片为实现基础: 分片是分割数据到多个redis实例的过程,差别是分片动作发生在client端、代理端还是redis server端。 通过分片,通过利用多台机器内存/存储的和值,来构造更大的数据存储,这一思想在分布式中使用较为广泛,比如分库分表、ES路由等。 client分片方案 client分片是由客户端决定key写入或者读取的节点,包括jedis在内的一些客户端,实现了客户端分片机制。 客户端分片原理图如下: client分片方案简单性能较高,分片方案对redis server端无感知,每个redis实例是独立的。 缺点是不支持动态增删节点,redis高可用需要redis本身机制来保证,比如redis sentinel

Raft中的领导选取

时光怂恿深爱的人放手 提交于 2021-01-08 18:35:00
Raft 是一种用来管理日志复制的一致性算法。为了提高理解性,Raft 将一致性算法分为了几个部分,例如领导选取(leader selection),日志复制(log replication)和安全性(safety),同时它使用了更强的一致性来减少了必须需要考虑的状态。 本文我们主要介绍领导领导选取部分的内容。 备注:这里的一致性是强一致性。 1.服务器状态 每台服务器一定会处于三种状态: 领导者、 候选人、 追随者,如下图所示。 介绍如下: 追随者只响应其他服务器的请求。 如果追随者没有收到任何消息,它会成为一个候选人并且开始一次选举。 收到大多数服务器投票的候选人会成为新的领导人。 领导人在它们宕机之前会一直保持领导人的状态。 2.任期(Term) Raft 算法将时间划分成为任意不同长度的任期(term),任期用连续的数字进行表示。 每一个任期的开始都是一次选举(election),一个或多个候选人会试图成为领导人。如果一个候选人赢得了选举,它就会在该任期的剩余时间担任领导人。 在某些情况下,选票会被瓜分,有可能没有选出领导人,那么,将会开始另一个任期,并且立刻开始下一次选举。 Raft 算法保证在给定的一个任期最多只有一个领导人。 3.raft的leader选举过程 1)何时发起选举 集群开始时,所有服务器都是follower,当服务器在指定的时间之内没有收到

python 操作redis集群

∥☆過路亽.° 提交于 2021-01-07 09:43:10
一、连接redis集群 python的redis库是不支持集群操作的, 推荐库:redis-py-cluster ,一直在维护。还有一个rediscluster库,看GitHub上已经很久没更新了。 安装 pip3 install redis-py-cluster 连接redis集群 # !/usr/bin/env python # coding: utf-8 from rediscluster import StrictRedisCluster class RedisCluster(object): # 连接redis集群 def __init__ (self,conn_list): self.conn_list = conn_list # 连接列表 def connect(self): """ 连接redis集群 :return: object """ try : # 非密码连接redis集群 # redisconn = StrictRedisCluster(startup_nodes=self.conn_list) # 使用密码连接redis集群 redisconn = StrictRedisCluster(startup_nodes=self.conn_list, password= ' 123456 ' ) return redisconn except

Redis Cluster

我怕爱的太早我们不能终老 提交于 2021-01-07 04:26:24
Redis Cluster介绍 Redis Cluster为Redis官方提供的一种分布式集群解决方案。它支持在线节点增加和减少。 集群中的节点角色可能是主,也可能是从,但需要保证每个主节点都要有对应的从节点, 这样保证了其高可用。 Redis Cluster采用了分布式系统的分片(分区)的思路,每个主节点为一个分片,这样也就意味着 存储的数据是分散在所有分片中的。当增加节点或删除主节点时,原存储在某个主节点中的数据 会自动再次分配到其他主节点。 如图,各节点间是相互通信的,通信端口为各节点Redis服务端口+10000,这个端口是固定的,所以注意防火墙设置, 节点之间通过二进制协议通信,这样的目的是减少带宽消耗。 在Redis Cluster中有一个概念slot,我们翻译为槽。Slot数量是固定的,为16384个。这些slot会均匀地分布到各个 节点上。另外Redis的键和值会根据hash算法存储在对应的slot中。简单讲,对于一个键值对,存的时候在哪里是通过 hash算法算出来的,那么取得时候也会算一下,知道值在哪个slot上。根据slot编号再到对应的节点上去取。 Redis Cluster无法保证数据的强一致性,这是因为当数据存储时,只要在主节点上存好了,就会告诉客户端存好了, 如果等所有从节点上都同步完再跟客户端确认,那么会有很大的延迟,这个对于客户端来讲是无法容忍的

Redis系列(二):Redis高可用集群

守給你的承諾、 提交于 2021-01-04 13:04:00
一、集群模式   Redis集群是一个由多个主从(主从在 Redis系列(四): Redis持久化和主从复制原理 中详细介绍,这里先有个概念 )节点组成的高可用集群,它具有复制、高可用和分片等特性 二、集群部署 1、环境   3台主机分别是:   192.168.160.146   192.168.160.152   192.168.160.153   每台服务器1主1从,共3主3从   相关安装包存储路径:/usr/local/redis-5.0.2 2、部署    ① Redis安装详见 Redis系列(一):Redis简介    ② 进入redis-5.0.2 cd /usr/local/redis-5.0.2    ③ 创建集群配置文件夹 mkdir redis-cluster    ④ (1)cd redis-cluster (2) mkdir 7001 和 mkdir 7002    ⑤ (1)cp /usr/local/redis-5.0.2/redis.conf 7001/ (2) cd 7001    ⑥ 编辑redis配置文件 vim redis.conf 修改内容如下: daemonize yes port 7001 dir /usr/local/redis-5.0.2/redis-cluster/7001/ 这里只是demo

redis-cluster client容灾(高可用)方案

橙三吉。 提交于 2021-01-03 15:45:25
这个涉及到redis的集群方案,无论是什么方案 都逃不过节点挂掉,高可用的处理。 一般有2种,重连和等待新主节点 提权。 一般来说节点宕机后 大量数据需要重新加载到内存 因此恢复时间比较长(甚至达到几分钟),因此高可用方案,几乎只考虑后者了。、 新的主节点提权,slot切换为连接新主节点继续服务。这里就分析redis-cluster的官方方案了。基于该方案,一般配置是1主2从,该slot一共3个节点供高可用。MOVED error也要一并处理,防止连接到的是从节点, redis集群规范 http://redisdoc.com/topic/cluster-spec.html 来源: oschina 链接: https://my.oschina.net/u/1391394/blog/2245764

加强版Redis,又一款国产高性能KV存储数据库开源了!

杀马特。学长 韩版系。学妹 提交于 2021-01-03 11:00:12
项目简介 Tendis是腾讯互娱CROS DBA团队 & 腾讯云数据库团队自主设计和研发的分布式高性能KV存储数据库,兼容Redis核心数据结构与接口。 可提供大容量、低成本、强持久化的数据库能力,适用于兼容Redis协议、需要大容量且较高访问性能的温冷数据存储场景。 Tendis目前已经被应用到腾讯内、外部大型项目中。 集群架构 Tendis使用去中心化集群架构,每个数据节点都拥有全部的路由信息,用户可以访问集群中的任意节点,并且通过redis的move协议,最终路由到正确的节点。 每个Tendis节点维护各自的slot数据,任意两个master节点之间的slot不重复,master节点之间支持基于slot的数据搬迁,主备节点之间通过binlog实现数据复制。 所有节点之间通过gossip协议进行通讯,类似于redis cluster的分布式实现,所有节点通过gossip协议通讯,可指定hashtag来控制数据分布和访问,使用和运维成本极低。 适用场景 兼容Redis协议,需要大容量且较高访问性能的温冷数据存储场景 适合成本为主要考虑因素,业务数据有高持久化要求的业务场景 解决原生Redis固有的fork问题而预留部分内存问题 主要特性 兼容Redis协议 完全兼容redis协议,支持redis主要数据结构和接口,兼容大部分原生Redis命令。 持久化存储

mac进行redis5.0单机集群笔记

≡放荡痞女 提交于 2020-12-29 11:41:31
https://zhuanlan.zhihu.com/p/106605652 Redis Cluster 呼唤集群 为什么呼唤? 1.并发量 redis 官方提供数据并发数10万/每秒 如果需要更高的并发量就需要另外方案了,集群 2.数据量 分布式的简单理解:加机器 应对:大并发量,大数据量 数据分布 顺序分区: 对数据集均分存储到各个节点 哈希分区 计算hash值然后取余数 hash(key)/节点数(例如节点取模的方式) 节点取余 如果节点需要增加,在进行迁移的时候比较耗空间,建议采取翻倍扩容的方式。 比如3个节点迁移,可以通过扩容到6个节点,扩容之后的数据只有50%进行了迁移。 一致性哈希 将token(0-2^32)顺时间对节点进行均分。 如果有节点插入,只会影响到相邻的节点,其他的节点不受影响。 虚拟槽分区 Redis Cluster的分区方式 两者的对比 搭建集群 节点之间是互相通信的 Redis Cluster架构 节点 cluster-enable:yes meet 节点之间消息共享 指派槽 redis指定槽的数据为16384。 key访问的时候,会做hash计算,然后取余数,找到对应在哪个范围的槽 找到对应的节点。 复制 安装 下面的安装方式代码不是很严谨,主要是为了了解Redis Cluster的结构。需要注意节点的端口和一些参数的设置。 1.配置开启节点

多机部署redis5.0集群环境

拟墨画扇 提交于 2020-12-29 11:41:01
redis5.0集群部署 一、集群介绍 Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation)。 Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低 Redis 集群的性能, 并导致不可预测的行为。 Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。 Redis 集群提供了以下两个好处: 将数据自动切分(split)到多个节点的能力。 当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。 二、Redis 集群数据共享 Redis 集群使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现: 一个 Redis 集群包含 16384 个哈希槽(hash slot), 数据库中的每个键都属于这 16384 个哈希槽的其中一个, 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。 集群中的每个节点负责处理一部分哈希槽。 举个例子,