• Lnmp架构之Redis服务


    1、redis部署

    停掉mysql服务

    如果在纯净的环境下,make的时候需要安装gcc和make

    redis服务常用命令

    2、redis主从同步

    复制文件发送到接收主机server2,server3

    server2,server3接收到文件后,和11master端一样的配置方法

    3、redis主从复制

    设置11为master,12,13为slave

    在12上

    其他slave节点以此类推

    此时在master端11上

    slave角色只能读,并没有修改的权限

    在master端

    在slave端会同步内容

    4、Redis高可用

    redis主从切换

    redis 主从原理:基于rdb 快照实现。

    在执行主从的时候,slave和master要先做一个认证,发起一个同步请求,master会执行一个bgsave(异步模式)/save(阻塞模式),异步模式的时候,bgsave会做一个rdb快照,然后把rdb快照发给slave,slave会做一个动作,清掉slave端所有的数据(flushall),然后slave会再次加载快照;

    快照做完之后,还会有变更数据,所以放在缓存里面,然后接下来会用replicationfeedslave()增量函数 一条一条发给slave,然后再给slave端做同步,因此,redis主从是基于rdb快照格式出现的。

    redis和mysql的二进制日志的差别是其数据类型不同。

    redis主从基于rdb快照格式实现

    一主多从的架构中,redis里自带高可用切换

    2表示必须要两个节点说master出故障了才能发起故障切换;

    当第一个节点发现master出现故障会进入一种主观下线状态,当第二个节点发现master出现故障 会再次进入一种主观下线状态;

    两次的主观下线会触发一次客观下线,这个时候master会开始真正进行主从切换,三个节点就设置为2,两个节点就设置为1

    拷贝修改后的文件到其他节点

    注:必须在启动前拷贝过去,启动后文件会发生改变,拷贝过去会报错

    其他主机直接启动服务,无需更改配置文件(哨兵模式)

    此时,再开启一个终端11并关闭master

    当master出问题时,redis集群会自动切换master

    当原来的master再次启动后,会以slave的身份加入集群

    在切换的时候可能会出现的问题:

    客户端到master没什么问题,master 到slave端的网络如果出现故障,这个时候集群就会以为master出现问题,把master踢出去,选举出新的master;

    当网络又恢复正常,原来的master会同步当前集群的配置,把自己变成slave,接入到新的master;

    然而客户端到master是好的,这个时候,客户端会持续往master里写入数据,这些写入的数据就会因此而丢失。

    解决方法:

    必需保证后端有两个slave可以写;

    添加 min-slave-to-write=2 到配置文件,保证在主从切换的时候 客户端不要给master里面写 ,如果master发现都连不上两个slave 就不要往里面写入数据了,避免数据丢失。

    5、Redis集群

    无中心化设计:每个节点都可以接入集群,不管是主从都可以进行读写,在接入集群之后都可以做调度,做重定向。但是,它的整合度太高,二次开发成本太高。

    自动生成集群脚本(会在当前的目录里生成对应的配置文件和数据)

    启动自动生成脚本

    查看帮助命令(redis-cli --help)

    获取集群状态

    获取集群详细信息

    redis-cli --cluster作用:将16384个存储数据的哈希槽均摊到三个master上进行存储,每个节点都会分配到一定的哈希槽。

    连接集群

    关闭redis,集群中对应的master和slave就会自动切换

    down掉30002

    此时,数据保存在30005上不会丢失

    再次启动脚本,被down掉的30002会重新恢复,并且恢复后会成为slave

    导致集群不可用的情况:

    (1)16384个哈希槽不完整时,集群不可用

    (2)同一个集群的半数master同时挂掉时,集群不可用

    再添加两个redis实例

    在线添加集群节点

    添加master节点

    新的master节点没有hash槽

    添加slave节点

    给新增的master节点迁移hash槽

    新增节点完成

    注:在删除某个master节点时,要先将该节点上的哈希槽迁移到别的maser节点,否则会导致哈希槽不完整,从而导致集群不可用。

  • 相关阅读:
    re/regex:正则表达式(持续更新ing...)
    vue 基于vue-cli3 发布npm 插件
    MySQL系列-语法说明以及基本操作(二)
    宇视 EZView客户端是否支持接收VMS平台的报警
    RAID2.0优势
    最佳实践| 一文读懂《MongoDB 使用规范及最佳实践》原理
    【MySQL】多表查询
    Springcloud----Nacos配置中心
    从现在开始:让AI写代码,你只负责敲tab键
    春运“火车票难买”,用微信小程序抢到票的用户都笑了
  • 原文地址:https://blog.csdn.net/m0_65366762/article/details/133244658