从零开始的Redis学习 | 4_Redis主从复制、集群

B站视频传送门

1. 主从复制

  • 主从复制,就是主机数据更新后根据配置和策略,自动同步到备机的 master/slaver 机制,Master 以写为主,Slave 以读为主。

1.1 用处

  • 读写分离,性能扩展
  • 容灾快速回复

1.2 Redis主从复制(Windows版本操作)

以windows服务形式提供服务(搭建一个简单的主从复制 M:6379;s:6380、6381)。

根据这篇文章操作:Windows下Redies安装并设置成本地服务

  • 这样本地就有 redis服务了(作为主服务),然后将解压后的 redis 复制两份,分别为 redis6380、redis6381(作为从服务)。

#在各自文件夹下打开(别忘了用管理员)设置服务名
redis-server.exe --service-install redis.windows.conf --loglevel verbose --service-name Redis6380

redis-server.exe --service-install redis.windows.conf --loglevel verbose --service-name Redis6381
  • 然后修改端口和配置主从即可,在两个复制的文件夹下打开 redis.windows.conf(配从不配主,只修改从服务配置)

    #分别将端口修改为
    port 6380
    port 6381
    #分别配置主服务器 
    slaveof 127.0.0.1 6379
    
  • 打开服务查看是否开启

  • 打开Redis可视化工具并连接(这里用的是RedisDesktopManager)

  • 测试方式:直接连接redis6379,写入一个string,看看redis6380和redis6381是否有该值。

    如图:主服务写入

打开两个从服务,可以看到都写入了。

主从复制演示就结束了。

1.3 复制原理

  • 每次从机联通后,都会给主机发送sync指令。
  • 主机立刻进行存盘操作,发送 RDB 文件,给从机。
  • 从机收到 RDB 文件后,进行全盘加载。
  • 之后每次主机的写操作,都会立刻发送给从机,从机执行相同的命令。

1.4 主从复制之薪火相传

  • 上一个 slave 可以是下一个 slave 的 Master,slave同样可以接受其他slave的连接和同步请求,那么该slave为了链条中下一个的master,可以有效减轻master的写压力,去中心化降低风险。
  • 用 slaveof <ip> <port>
  • 中途变更转向:会清除之前的数据,重新建立拷贝最新的。
  • 风险是一旦某个 slave 宕机,后面的 slave 都没法备份。

1.5 哨兵模式(sentinel)

  • 反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。

1.5.1 配置哨兵(Windows下)
  • 调整为一主二仆模式

  • 自定义的 /redis 目录下新建 sentinel.conf 文件

  • 在配置文件中填写内容:

    sentinel monitor mymaster 127.0.0.1 6379 1
    
  • 其中 mymaster 为监控对象起的服务器名称,1为至少有多少个哨兵同意迁移的数量。

  • 先启动 redis 的主从服务器(windows版本看上面的操作,因为之前设置成了服务,直接启动三个服务就行。)

  • 从上面看到 master(6379),slave(6380、6381)都启动了,然后在redis目录下cmd进入,执行命令。这样我们的哨兵就启动了。

    redis-server.exe sentinel.conf --sentinel
    

  • 然后把主服务器宕机,可以看见 slave 6380 就变成了 master。

1.5.2 故障恢复过程
  • 新主登基

    从下线的主服务的所有从服务里面挑选一个从服务,将其转成主服务。

    选择条件依次为:

    1、选择优先级靠前的(优先级在 redis.conf 中 slave-priority 100)。

    2、选择偏移量最大的(偏移量是指获得原主数据最多的)。

    3、选择runid最小的从服务(每个redis实例启动后都会随机生成一个 40位的 runid)。

  • 群仆俯首

    挑选出新的主服务之后,sentinel 向原主服务的从服务发送 slaveof 新主服务的命令,复制新 master

  • 旧主俯首

    当已下线的服务重新上线时,sentinel 会向其发送 slaveof 命令让其成为新的主从。

2. 集群

  • Redis 集群实现了对 Redis 的水平扩容,即启动 N 个 redis节点,将整个数据库分部存储在这N个节点中,每个节点存储总数据的1/N。
  • Redis 集群通过分区(partition)来提供一定程度的可用性(avaliability):即使集群中有一部分失效或者无法进行通讯,集群也可以继续处理命令请求。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值