redis 集群的三种模式

redis 集群的三种模式

通过持久化功能,Redis 保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。

但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失。为了避免单点故障,通常的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。

1. 主从复制

主数据库进行读写操作,当写操作导致数据变化时会自动将数据同步从数据库; 从数据库只能进行读操作

主从复制问题:当 master down,需要手动将一台 slave 使用 slaveof no one 提升为 master 要实现自动,就需要redis哨兵。

配置

主节点无需配置

从节点 在 conf 文件中开启 slaveof 或 在启动的时候使用 redis-server --port 6380 --slaveof

如果主节点故障挂掉,在从节点命令行执行 saveof NO ONE 切换主节点

实现原理步骤
  • 从服务器启动的时候,会向主服务器发送 SYNC 命令

  • 主服务器收到 SYNC 命令后,执行 BGSAVE 命令,在后台生成 RDB 文件,使用缓冲区记录从现在开始执行的所有的写命令。

  • 当主服务器的 BGSAVE 命令执行完毕后,主服务器后将 BGSAVE 命令生成的 RDB 文件发送给从服务器,从服务器接收并载入这个 RDB 文件,将自己的数据库状态更新至主服务器执行 BGSAV E命令时的数据库状态。

  • 主服务器将记录在缓冲区里面的所有写命令发送给从服务器,从服务器执行这些写命令,将自己的数据库状态更新至主服务器数据库当前所处的状态。

  • 之后,主服务器每收到1个命令就同步发送给从。当出现断开重连后,2.8之后的版本会将断线期间的命令传给从数据库。增量复制

2. 哨兵模式

因为主从复制模式当主节点挂掉之后,需要手动介入将从节点更新为主节点,难以实现自动化。

哨兵的作用就是监控 redis 主、从数据库是否正常运行,主出现故障自动将从数据库转换为主数据库。

配置 一主二从
  • 主节点 redis-server --port 6379

  • 从节点 redis-server --port 6380

  • 从节点 redis-server --port 6381

  • 在从节点 conf 文件中开启 slaveof , 如果主节点开启了密码认证,需在从节点设置主节点的密码 masterauth

  • 在每个节点下新建 sentinel.conf 文件,文件内容如下


    #当前Sentinel服务运行的端口(端口不可重复)
    port 26379

	#哨兵监听的主服务器(最后一位为从节点的数量)
	sentinel monitor mymaster 127.0.0.1 6379 2

	#1s内mymaster无响应,则认为mymaster宕机了
	sentinel down-after-milliseconds mymaster 1000

	#如果主节点配置了密码,需要密码认证
	sentinel auth-pass mymaster 123456

	#如果10秒后,mysater仍没启动过来,则启动failover
	sentinel failover-timeout mymaster 10000

	#执行故障转移时, 最多有1个从服务器同时对新的主服务器进行同步
	sentinel parallel-syncs mymaster 1	

注:
配置哨兵监控一个系统时,只需要配置其监控主数据库即可,哨兵会自动发现所有复制该主数据库的从数据库

这样哨兵就能监控主6379和从6380、6381,一旦6379挂掉,哨兵就会在2个从中选择一个作为主,根据优先级选,如果一样就选个id小的,当6379再起来就作为从存在。

3. 集群模式

即使使用哨兵,redis 每个实例也是全量存储,每个 redis 存储的内容都是完整的数据,浪费内存且有木桶效应。为了最大化利用内存,可以采用集群,就是分布式存储。即每台 redis 存储不同的内容。
集群至少需要3主3从,且每个实例使用不同的配置文件,主从不用配置,集群会自己选。

使用集群,只需要将每个数据库节点的 cluster-enable 配置打开即可。每个集群中至少需要三个主数据库才能正常运行。

修改每个实例的配置文件:

cluster-enabled yes  --开启集群

cluster-config-file nodes-6382.conf --集群配置文件名,

每个实例配置的要不同,redis会根据文件名自动新建

集群的运行:

redis安装目录的src执行./redis-trib.rb create --replicas 1 

127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 

127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值