写点什么

Redis 多机

作者:武师叔
  • 2022 年 8 月 14 日
    辽宁
  • 本文字数:1425 字

    阅读完需:约 5 分钟

Redis 多机

集群

当数据量过大时,单个 Redis 数据库就无法存放。我们需要多个 Redis 数据库组成集群(cluster),去分别存放不同的数据


  1. key-value 数据进行存入时,会根据 key 的哈希值对 16384 取模,放入相应的槽(slot)存放。这 16384 个槽会分发给各个存储空间。

  2. 各个存储空间之间会相互通信,并记录所有编号的槽都存储在哪个存储空间:保证最多访问 Redis 两次可以命中。


配置文件


cluster enabled yes                            # 开启集群cluster-config-file nodes-6379.conf            # 集群配置文件(默认为 nodes.conf)Copy to clipboardErrorCopied
复制代码


集群指令


  • 通过 redis-cli 打开 Redis 集群中的数据库,输入指令去插入不属于这个存储空间的键值,会返回错误。

  • 通过 redis-cli -c 打开 Redis 集群中的数据库,会自动将插入数据指令转发到相应的存储空间。

主从复制

如果数据只交给一个 Redis 服务器处理,那么可能面临两大问题:


  1. 服务器同时处理过多读写操作,超过服务器负载。

  2. 一旦服务器宕机,就会导致服务异常中断。


为了避免这两个问题,我们必须引入多个 Redis 服务器来保存相同数据,并采用主从复制结构:一个主服务器 Master 对应多个从服务器 Slave 。


  1. 读写分离:Master 负责写入数据;Slave 则会自动同步数据,并负责读取数据。起到均衡负载的作用。

  2. 数据冗余:即使某个 Slave 故障,由于其他 Slave 已保存了这些数据,并不会导致服务中断。

容错机制

  • 主从之间使用心跳建立连接。 Slave 每秒 ping 一次,汇报自己的偏移量、获取最新的指令。Master 默认每 10s ping 一次 Slave, 检查 slave 是否在线:如果 Slave 多数掉线或者高延迟,Master 停止写和数据同步功能,保障数据稳定性。

  • 在分布式系统里还会部署多个 Redis 服务器作为哨兵(除端口号外完全相同),不提供数据服务,只负责监控主从机制的运行:如果发现 Master 宕机,哨兵将通知所有机器,使 Master 下线并开启投票机制选用一个 Slave 担任 Master 。

配置连接

Master 和 Slave 通过以下过程建立连接。



相比于输入指令,我们一般直接修改 conf 文件夹内的配置文件,由机器自动建立连接。


# Master requirepass 123456                # 连接主服务器需要密码(可选)
# Slaveslaveof 127.0.0.1 6379 # 根据套接字自动连接主服务器masterauth 123456 # 主服务器密码Copy to clipboardErrorCopied
复制代码

数据同步

Slave 会定期复制 Master 的持久化文件,以保证数据同步。



复制缓冲区:一个先入先出队列,用来存储 AOF 形式指令。由偏移量记录当前执行到的位置。


  • 如果开启 AOF ,在创建时就会开启复制缓冲区。(偏移量记录自己执行到的位置)

  • 如果使用 RDB ,在成为 Master 时会开启复制缓冲区。(Master 可以含有多个偏移量,记录不同 Slave 读取到的位置。)


如果 Slave 过多,数据同步也会导致 Master 负载过高。因此 Slave 也可以兼职 Master,向下级 Slave 提供服务。但层次太多会导致数据延迟,慎用。


  1. 数据同步阶段应避免流量高峰期,防止影响业务正常执行;也不要多个从服务器同时同步数据。

  2. 缓冲区应该足够大,否则一旦发生数据溢出会反复进行全量复制。


# Masterrepl-backlog-size 2mb                 # 修改缓冲区大小(默认 1mb)
# Slaveslave-serve-stale-data no # 不允许同步数据时读数据Copy to clipboardErrorCopied
复制代码

命令传播

服务器每次启动都会随机生成一个运行 ID(40 位 16 进制字符) ,Master 和 Slave 之间正是依靠 Master 的运行 ID 相互识别。

发布于: 刚刚阅读数: 3
用户头像

武师叔

关注

每天丰富自己,去过自己想要的生活! 2022.04.28 加入

一个喜欢最新技术,研发的人工智能专业的大二学生,用自己的代码做一些有意义的事情! 目前大二结束有去大厂研发岗实习的计划,每天丰富自己的技术,去过自己想要的实习生活。

评论

发布
暂无评论
Redis 多机_8月月更_武师叔_InfoQ写作社区