【数据库】redis主从复制、哨兵模式、集群高可用

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 文章目录前言一、工作原理二、主从复制的作用

一、工作原理

  • slave服务器向master服务器发送请求连接命令
  • master节点进行rdb持久化,同时of将新的修改命令缓存到数据文件中
  • master给slave服务器发送数据文件,slave将数据保存到磁盘,加载到内存执行
  • 注:slave节点故障后,只需要重新连接即可

二、主从复制的作用

  • 数据冗余:实现数据热备份、提供数据冗余功能
  • 故障切换:主节点故障,从节点变为主节点提供服务(缺点需要手动切换,哨兵/集群可解决该缺点)
  • 哨兵模式:实现故障自动切换
  • 集群高可用:实现读写分离,分摊服务器压力,且故障自动切换

三、主从安装流程

3.0 架构

作用 IP地址 安装服务
主服务器 192.168.13.10 redis
从服务器 192.168.13.20 redis

3.1 主服务器

systemctl stop firewalld.service
setenforce 0
yum install gcc gcc-c++ make -y
tar zxvf redis-5.0.7.tar.gz
cd redis-5.0.7/
make -j 2 && make PREFIX=/usr/local/redis install
cd utils/
./install_server.sh
  四次回车后。输入:/usr/local/redis/bin/redis-server回车
ln -s /usr/local/redis/bin/* /usr/local/bin/
vim /etc/redis/6379.conf
  70行:bind 192.168.13.10
  137行:daemonize yes
  172行:logfile /var/log/redis_6379.log
  264行:dir /var/lib/redis/6379
  700行:appendonly yes
/etc/init.d/redis_6379 restart

3.2 从服务器

systemctl stop firewalld.service
setenforce 0
yum install gcc gcc-c++ make -y
tar zxvf redis-5.0.7.tar.gz
cd redis-5.0.7/
make -j 2 && make PREFIX=/usr/local/redis install
cd utils/
./install_server.sh
  四次回车后。输入:/usr/local/redis/bin/redis-server回车
ln -s /usr/local/redis/bin/* /usr/local/bin/
vim /etc/redis/6379.conf
  70行:bind 192.168.13.10
  137行:daemonize yes
  172行:logfile /var/log/redis_6379.log
  264行:dir /var/lib/redis/6379
  700行:appendonly yes
  287行:replicaof 192.168.13.10 6379
/etc/init.d/redis_6379 restart
#另外一台从服务器重复此操作即可

四、哨兵模式

4.1 构成

  • 哨兵节点:端口号:26379;作用:监控、故障转移、通知用户故障转移
  • 数据节点:端口号:6379;为客户端提供服务

4.2 优劣

  • 优势:主故障时会自动进行故障切换
  • 劣势:①写操作无法进行负载均衡;②存储能力受单机性能影响;③从节点故障无法自动故障切换

4.3 原理

  • 哨兵节点定期监控主/从/其他哨兵节点(每秒发送心跳ping命令向其他主/从/哨兵进行心跳检查)
  • 根据心跳命令的返回码进行主观判断(宕机:主观下线),超过指定数量或者半数认为主服务器主观下线时,则判定主节点为客观下线
  • 哨兵节点通过raft算法,选出一个leader哨兵,用于负责故障转移
  • 缺陷:从/哨兵节点故障,无法自动进行故障切换

4.4 故障转移优先规则

  • 首先过滤掉不健康的从节点
  • 选择配置文件中,故障转移优先级高的从节点
  • 其次选择数据复制最全的从节点
  • 判定条件:优先级、数据完整性

4.5 搭建哨兵模式

  • 以主从复制为基础

4.5.1 架构

作用 IP地址 安装服务
主服务器 192.168.13.10 redis
从服务器1 192.168.13.20 redis
从服务器2 192.168.13.30 redis

4.5.2 流程

vim /opt/redis-5.0.7/sentinel.conf
  17行:protected-mode no
  21行:port 26379
  26行:daemonize yes
  31行:pidfile /var/run/redis-sentinel.pid
  36行:logfile "/var/log/sentinel.log"
  65行:dir "/var/lib/redis/6379"
  84行:sentinel monitor mymaster 192.168.13.10 6379 2
  113行:sentinel down-after-milliseconds mymaster 30000
  146行:sentinel failover-timeout mymaster 180000
scp sentinel.conf 192.168.13.20:`pwd`
scp sentinel.conf 192.168.13.30:`pwd`
cd /opt/redis-5.0.7
redis-sentinel sentinel.conf &
#在另外两台从服务器启动哨兵服务,完成哨兵模式
redis-cli -p 26379 info sentinel
#查看哨兵模式是否搭建成功,如下为成功
  master0:name=mymaster,status=ok,address=192.168.13.10:6379,slaves=2,sentinels=3

五、集群搭建

5.1 作用

  • 核心功能:将数据进行分片存储
  • 其余功能:突破redis单机内存限制,故障自动切换,横向扩展服务器能力

5.2 数据分片原理

  • 引用哈希槽概念,每组节点负责一部分哈希槽
  • 对每组数据的key键通过crc16算法得出一个数字,决定对应的哈希槽
  • 哈希槽总数:16384

5.3 集群模式搭建

  • 以主从复制为基础
  • 由于电脑性能有限,因此在一台服务器上模拟运行6个redis服务
systemctl stop firewalld.service
setenforce 0
yum install gcc gcc-c++ make -y
tar zxvf redis-5.0.7.tar.gz
cd redis-5.0.7/
make -j 2 && make PREFIX=/usr/local/redis install
cd utils/
./install_server.sh
  四次回车后。输入:/usr/local/redis/bin/redis-server回车
ln -s /usr/local/redis/bin/* /usr/local/bin/
/etc/init.d/redis_6379 restart
mkdir -p /etc/redis/redis-cluster/redis600{1..6}
for i in {1..6};do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done
vim /etc/redis/redis-cluster/redis6001/redis.conf
  69行:#bind 127.0.0.1
  88行:protected-mode no
  92行:port 6001
  832行:cluster-enabled yes
  840行:cluster-config-file nodes-6001.conf
  846行:cluster-node-timeout 15000
  699行:appendonly yes
for i in {2..6};do
\cp -f /etc/redis/redis-cluster/redis6001/redis.conf /etc/redis/redis-cluster/redis600$i/
done
for i in {2..6};do
sed -i "92c port 600$i" /etc/redis/redis-cluster/redis600$i/redis.conf
sed -i "840c cluster-config-file nodes-600${i}.conf" /etc/redis/redis-cluster/redis600$i/redis.conf
done
for i in {1..6};do
cd /etc/redis/redis-cluster/redis600$i
./redis-server redis.conf
done
redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
  yes
#集群搭建完毕

集群测试

六、思维导图

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
2月前
|
监控 NoSQL Redis
看完这篇就能弄懂Redis的集群的原理了
看完这篇就能弄懂Redis的集群的原理了
79 0
|
9天前
|
监控 NoSQL 算法
Redis Sentinel(哨兵)详解
Redis Sentinel(哨兵)详解
|
1月前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
27天前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
105 2
|
2月前
|
运维 监控 NoSQL
【Redis】哨兵(Sentinel)原理与实战全解~炒鸡简单啊
Redis 的哨兵模式(Sentinel)是一种用于实现高可用性的机制。它通过监控主节点和从节点,并在主节点故障时自动进行切换,确保集群持续提供服务。哨兵模式包括主节点、从节点和哨兵实例,具备监控、通知、自动故障转移等功能,能显著提高系统的稳定性和可靠性。本文详细介绍了哨兵模式的组成、功能、工作机制以及其优势和局限性,并提供了单实例的安装和配置步骤,包括系统优化、安装、配置、启停管理和性能监控等。此外,还介绍了如何配置主从复制和哨兵,确保在故障时能够自动切换并恢复服务。
|
2月前
|
网络协议 NoSQL 网络安全
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
|
2月前
|
存储 监控 关系型数据库
在Linux中,如何设计一个高可用数据库系统?
在Linux中,如何设计一个高可用数据库系统?
|
9天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
43 6
|
7天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
38 3
Mysql(4)—数据库索引