Redis集群配置

Redis集群实现Redis的水平扩展通过启动N个Redis节点,每个节点存储总数据的1/N。
集群通过阻塞提供一定程度的可用性,即使集群中的某些节点发生故障或无法通信,集群也可以继续处理请求命令。
集群中所有Redis节点相互互连(PING-PONG机制),内部使用二进制协议来优化传输速度和带宽。
Redis集群内置了16384个哈希槽,当需要将key值放入Redis集群时,Redis首先使用crc16算法对key计算结果,然后将剩余结果计算到16384,这样每个key对应编号为0-16383之间的哈希槽,Redis会根据节点数量大致均等地将哈希槽映射到不同的节点。
Redis集群的高可用体现在以下几个方面:1、集群中某个节点的主节点宕机后,其从节点会自动提升为主节点,集群继续提供服务2、当节点下所有Redis宕机集群关闭后,集群将不可用3.当某个节点故障恢复时,集群会自动恢复正常4.即使一半集群宕机,集群仍可正常运行只要哈希槽完好无损,仍然可以正常工作。
Redis集群资源配置示例如下:CentOSLinux系统版本7.3.1611(Core),部署4个Redis节点,端口号分别为6379、6380、6381、6382。
Redis集群配置步骤包括:安装依赖(使用yum安装ruby​​​​​和rebygems),安装Redis和Ruby接口(使用gems安装redis),安装并启动Ruby版本,更改修改redis.conf,将配置复制到另一个节点,启动Redis实例,打开防火墙,创建集群,验证集群,关闭集群。
使用Redis集群时,需要注意以下问题:1、Redis集群总线端口为Redis客户端端口加10000。
例如客户端通信端口为6379,则集群总线端口为16379;。
配置防火墙时,必须将集群总线端口和客户端端口启用对应的永久端口规则。
验证集群搭建成功的方法包括:通过redis-cli连接集群主节点,执行命令查看集群信息、节点列表、节点状态、键槽、槽内键值对数量等。
关闭集群时,需要在每个节点上执行shutdown命令。
添加主节点或从节点涉及启动节点、向集群添加节点以及设置哈希槽,而删除节点则涉及删除从节点和主节点。

缓存-redis三种模式搭建和运行原理

标签:redis缓存主从哨兵集群

本文简单介绍了Linux下redis的三种模式的安装部署以及数据存储的总结。
希望我们能够互相交流,互相提高。

对于Centos7,安装redis之前需要安装一些常用工具:

关闭防火墙

正式安装redis

中redismaketest时会出现一系列异常,解决办法如下:

使用redis-server启动redis。
做一些实验是没有意义的。

将redis作为系统守护进程运行,每次系统启动时,redis进程都会一起启动。
操作如下:

RDB和AOF都是redis的一种数据持久化机制。
持久性是为了避免发生灾难性系统故障时系统数据丢失。
我们一般将数据存储在本地磁盘上,并定期将数据上传到云服务器上。
RDB是redis的快照,通过redis.conf中的save配置来设置,如save601000:

AOF以appendonly方式存储数据。
开启AOF模式后,redis内存中存储的所有数据都会进入到oscache中,然后默认每秒执行一次fsync,并追加到appendonly.aof文件中。
一般我们在redis.conf中配置如下指令:

生产环境中我们通常会开启AOF和RDB模式。
一般来说,redis服务挂掉后重新启动时,会优先处理aof中的文件。

当启动一个从节点时,它会向主节点发送一个PSYNC命令。
如果这是从节点重新连接到主节点,那么主节点只会将丢失的数据复制到从节点;否则,如果是slavenode第一次连接masternode时,会触发fullresynchronization;当启动fullresynchronization时,master将启动一个后台线程并开始生成RDB快照文件。
同时,所有从客户端接收到的写命令都会被缓存在内存中。
RDB文件生成后,master会将RDB发送给slave。
从机会先将其写入本地磁盘,然后再从本地磁盘加载到内存中。
然后master会将内存中缓存的写命令发送给slave,slave也会同步数据。
如果slavenode和masternode之间出现网络故障,连接断开,会自动重新连接。
如果master发现多个slavenode正在重新连接,它只会启动一次rdbsave操作,并为所有slavenode提供一份数据副本。

从redis2.8开始,支持主从复制断点续传。
如果主从复制过程中网络连接断开,您可以从上次复制的位置继续复制。
而不是从头开始复制。

主节点将在内存中存储积压的数据。
master和slave都会保存一个replicaoffset和一个masterid。
偏移量存储在积压中。
如果Master和Slave之间的网络连接断开,Slave会要求Master从最后一个副本偏移量开始继续复制。
然而,如果没有找到相应的偏移量,则会执行重新同步。

master直接在内存中创建rdb,然后发送给slave。
它不会在本地存储磁盘。
您可以进行以下配置:

从机不会使密钥过期,只会等待。
主密钥过期。
如果master使某个key过期或者通过LRU消除某个key,则会模拟del命令并发送给slave。

在redis.conf配置文件中,上述参数表示至少需要3个从节点才能连接主节点,数据主站和每个从站之间的同步延迟不能超过10秒。
一旦上述设置不匹配,master将不再提供相应的服务。

实现sdown的条件非常简单。
如果sentinelpingmaster并且超过is-master-down-after-milliseconds指定的毫秒数,则主观上认为master宕机了。
sdown到odown转换的条件非常简单。
如果某个哨兵在指定时间内收到了quor,um指定数量的其他哨兵也认为master是sdown,那么就认为是odown。
客观上,master宕机了。

每次哨兵想要在主备之间切换时,首先需要有法定数量的哨兵认为它宕机了。
,然后选举一个从机来进行切换。
这个slave也必须得到多数哨兵的授权,才能正式执行切换;

(2)SENTINELRESET*,在所有哨兵上执行,清除所有master状态(3)SENTINELMASTERmastername,在所有哨兵上执行,检查所有sentinal对的数量是否达成一致

让master移除一个已经下线的slave:SENTINELRESETmastername并在所有上执行

redis的集群模式是为了解决系统的水平扩展和海量数据的存储。
如果你的数据量很大的话,可以使用rediscluster。
rediscluster可以支持N个redismaster,一台master上可以挂载多个slave。
一般来说,我们会安装一到两个奴隶。
master挂掉后,会主动切换到slave,或者当master上的所有slave都挂掉的时候。
当它被删除后,集群会从其他master上找到冗余的slave并将它们挂载到这个master上,实现系统的高可用性。

将上述配置文件的6个放在/etc/redis中,分别是:7001.conf、7002.conf、7003.conf、7004.conf、7005.conf、7006.conf

在每个启动脚本中,修改对应的端口号

--replicas:表示每个master有多少个slave有

redis-trib.rbcheck192.168.31.187:7001检查状态

3.1添加新master

以上相同配置完成后,设置要启动的启动脚本;然后使用以下命令启动节点添加:

3.2重新分片过去的一些数据

3.3添加节点作为slave

3.4删除节点