redis 集群三种模式以及安装部署

一、redis 集群三种模式简介

模式一:主从复制,是redis高可用的基础,实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。
缺陷:故障恢复无法自动化、写操作无法负载均衡、存储能力受到单机的限制。
模式二:哨兵模式,基于主从复制模式,实现了自动化的故障恢复
缺陷:写操作无法负载均衡、存储能力受到单机的限制。
模式三:cluster集群模式,通过Redis集群解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

二、redis 集群三种模式原理

2.1 主从复制

第一步:slave服务器向master服务器发送sync_command命令,请求同步数据
第二步:master接收到sync_command后使用fork函数派生一个子进程(此过程会阻塞子进程),用于生成RDB文件,并且把客户端执行的写命令保存在缓冲区中,再保存到aof文件中
第三步:master RDB持久化完成之后,将生成的RDB和AOF文件发送给slave
第四步:slave恢复RDB和AOF文件中的数据
第五步:master持续性的将客户端写入的命令以一定的规则同步给slave

2.2 哨兵模式

哨兵模式主要功能:
① 集群监控:负责监控Redis 主 和 备 进程是否正常工作
② 消息通知:如果某个Redis实例有故障,那么哨兵负责发送消息作为告警通知给管理员
③ 故障转移:如果 主节点 挂掉了,会自动转移到 备节点 上
④ 配置中心:如果故障转移发生了,通知客户端新的master地址

实现步骤:
步骤一:在所有哨兵节点上配置master节点
步骤二:哨兵节点会和配置的主节点建立起两条连接①命令连接、②订阅连接
步骤三:哨兵会通过命令连接周期性(间隔10秒)发送一次info命令,通过info命令,主节点会返回自己的run_id和自己的从节点信息;哨兵通过获取的从节点信息,也会对从节点建立起两条连接:命令连接 和 订阅连接,执行相同的操作。
步骤四:主从节点通过命令连接向哨兵服务器的hello频道发送一条消息,内容包括自己的ip端口、run_id、配置等,用于后续投票使用
步骤五:哨兵集群通过订阅连接对哨兵服务器的hello频道进行监听,所有向该频道发送的消息都能被所有哨兵服务器接受到
步骤六:哨兵集群中每一台哨兵都解析监听到的消息,进行分析提取,就可以知道还有那些别的哨兵服务节点也在监听这些主从节点了,更新结构体将这些哨兵节点记录下来
步骤七:哨兵集群中每一台哨兵都向观察到的其他的哨兵节点建立命令连接(用于投票),没有订阅连接

哨兵模式下的故障迁移

  • 主观下线:哨兵(Sentinel)节点会每秒一次的频率向建立了命令连接的主节点发送PING命令,如果在down-after-milliseconds毫秒内没有做出有效响应包括(PONG/LOADING/MASTERDOWN),哨兵就会将该主节点在本结构体中的状态标记为SRI_S_DOWN主观下线
  • 客观下线:当一个哨兵节点发现主节点处于主观下线状态是,会向其他的哨兵节点发出询问,该节点是不是已经主观下线了。如果超过配置参数quorum个节点认为是主观下线时,该哨兵节点就会将自己维护的结构体中该主节点标记为SRI_O_DOWN客观下线。询问命令sentinel is-master-down-by-addr
  • master选举:在认为主节点客观下线的情况下,哨兵节点之间会发起一次选举,命令为:sentinel is-master-down-by-addr 只是run_id这次会将自己的run_id带进去,希望接受者将自己设置为主节点。如果超过半数以上的节点返回将该节点标记为leacer的情况下,将由该leader对故障进行迁移

2.3 cluster 集群模式

核心:数据分区,也就是分布式方式存储数据,一方面突破了 Redis 单机内存大小的限制,存储容量大大增加,另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力
高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似),当任意节点发送故障时,集群仍然可以对外提供服务
数据分片:Redis 集群引入了哈希槽的概念,有 16384 个哈希槽(编号 0~16383)集群的每个节点负责一部分哈希槽(平均分配到每个节点),每个 Key 通过 CRC16 校验后对 16384 取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作

三、redis 安装及三种模式的实验

3.1 redis 安装

安装依赖包,下载redis源码包,并解压安装

yum -y install gcc gcc-c++ make
wget -P /opt http://download.redis.io/releases/redis-5.0.9.tar.gz //下载
cd /opt && tar -xzvf redis-5.0.9.tar.gz //解压
cd redis-5.0.9
make && make PREFIX=/usr/local/redis install //安装
cd utils/ && ./install_server.sh //配置项设置,一直回车直到出现(Please select the redis executable path [])之后,手动输入:/usr/local/redis/bin/redis-server(我手残,直接复制的)
ln -s /usr/local/redis/bin/* /usr/local/bin/ //执行的命令优化
netstat -napt | grep 6379 //检查redis是否启动

3.2 redis 主从同步

实验环境:
master服务器:192.168.177.130
slave1服务器:192.168.177.120
slave2服务器:192.168.177.113
步骤一:三台redis服务器关闭防火墙、selinux、安装ntp并且同步时钟

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
yun -y install ntp
ntpdate ntp.aliyun.com

步骤二:修改master配置文件

vim /etc/redis/6379.conf
//定位70行,修改监听地址为:0.0.0.0
70 bind 0.0.0.0
//定位137行,开启守护进程
137 daemonize yes
//定位172行,指定日志文件目录
172 logfile "/var/log/redis_6379.log"
//定位264行,指定工作目录
264 dir "/var/lib/redis/6379"
//定位700行,开启AOF持久化
700 appendonly yes

:wq //保存退出之后重启redis服务器
service redis_6379 restart 

步骤三:修改slave1、slave2配置文件(配置相同)
配置与master基本相同,唯一不同的是slave上需要指定同步的master的IP+端口

vim /etc/redis/6379.conf
//定位70行,修改监听地址为:0.0.0.0
70 bind 0.0.0.0
//定位137行,开启守护进程
137 daemonize yes
//定位172行,指定日志文件目录
172 logfile "/var/log/redis_6379.log"
//定位264行,指定工作目录
264 dir "/var/lib/redis/6379"
//定位288行,指定需要同步的master服务器的IP+端口
288 replicaof 192.168.177.130 6379
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Docker部署Redis集群的三主三从架构是一个常见的高可用解决方案,它利用了Redis的主从复制机制,使得数据可以在多个节点之间备份和同步。以下是步骤: 1. **安装Docker**:首先确保你的机器上已经安装了Docker。 2. **创建镜像**:你可以基于官方的Redis镜像(`redis:latest`)创建自己的镜像,并配置为支持主从模式。例如,在Dockerfile中添加环境变量如`REPLICATION_MODE=master`或`slave`。 3. **启动服务**: - 主节点(Master):在每个主机上运行三个容器,设置其中一个为主节点,其余两个作为副本。使用`docker run --name node1 -d redis:latest REPLICATION_MODE=master`等命令启动容器,记得调整主机名以区分不同节点。 - 从节点(Slave):其他三个容器分别设置为从节点,连接到主节点并开始同步数据。 4. **网络配置**:使用Docker网络将所有节点连接起来,保证它们可以通过网络通信。可以使用默认桥接网络,也可以自定义网络。 5. **监控与管理**:推荐使用像`docker-compose`这样的工具来管理和配置容器,这样可以更方便地定义服务之间的依赖以及环境变量。 6. **负载均衡**:为了进一步提高可用性和容错性,可以考虑外部的负载均衡器或使用Redis哨兵(Sentinel)来监控主节点的健康状况,并自动故障转移。 7. **验证集群**:在部署后,通过客户端测试各个节点的读写性能是否正常,确认集群已成功建立并能有效工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值