部署搭建Redis主从复制、哨兵模式、集群部署
目录
一、Redis主从复制
(一)概念
(二)作用
(三)缺点
(四)流程
(五)搭建
二、Redis哨兵模式
(一)概念
(二)作用
(三)缺点
(四)结构
(五)搭建
1、编辑哨兵模式主(6379)配置文件
2、编辑哨兵模式从(6380)配置文件
3、编辑哨兵模式从(6381)配置文件
4、启动配置文件和哨兵配置文件
5、查看监听验证服务是否正常启动
(六)验证
1、查看日志文件
2、查看监听、查看进程
2.1、哨兵配置文件会自动修改监听的master节点地址为新的master节点地址
2.2、停止master后,slave会通过选举产生新的master(查看日志文件)
2.3、以前停掉的master重新启动不会更改当前哨兵模式选出的master
2.4、主从进行读写验证:
三、Redis集群
(一)概述
(二)原理
(三)架构细节
(四)选举过程
(五)集群搭建
1、配置
1.1、Redis-server_1 配置如下:
1.创建Redis目录
2.将配置文件拷贝到创建目录下并重命名
3.进入创建目录下查看
4.更改配置文件
5.创建持久化对应目录
6.设置完毕后启动服务
7.查看监听验证
1.2、Redis-server_2 配置 :
1.3、Redis-server_3 配置:
2、构建集群
2.1、将其他节点加入集群
2.2、分配slot(哈希槽)
2.3、建立主从关系
2.4、查看集群状态
3、重置集群命令
总结
1、主从复制的优势在于:
2、哨兵模式的优势在于:
3、集群三位一体的优势在于:
一、Redis主从复制
(一)概念
Redis主从复制是指在Redis数据库中,通过配置一个或多个从服务器(slave)来复制主服务器(master)的数据。主服务器负责处理写操作,而从服务器复制主服务器的数据并处理读操作。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。
Redis主从复制是Redis数据库的核心特性之一,用于实现数据的备份、读写分离和故障恢复。通过配置一个或多个从服务器,可以将主服务器上的数据复制到从服务器上,实现数据的冗余备份,并可以将读操作分摊到从服务器上,提高系统的性能和可扩展性。然而,主从复制也有一些缺点,如数据延迟和单点故障等,需要在实际应用中进行权衡和解决。
(二)作用
数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
高可用:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
(三)缺点
写操作无法负载均衡;
存储能力受到单机的限制。
数据延迟:主从复制是异步的,从服务器的数据复制可能存在一定的延迟,造成从服务器上的数据不是实时的。
单点故障:如果主服务器发生故障,从服务器中的数据可能会落后主服务器的最新数据状态,可能会造成数据的丢失。
配置和管理复杂性:主从复制涉及到Redis服务器之间的配置和管理,需要考虑网络连接、同步机制等复杂性。
(四)流程
第一步:若启动一个Slave机器进程,则它会向Master机器发送一个“sync command”命令,请求同步连接。
第二步:无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。
第三步:后台进程完成缓存操作之后,Maste机器就会向Slave机器发送数据文件,Slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。
第四步:Master机器收到Slave端机器的连接后,将其完整的数据文件发送给Slave端机器,如果Mater同时收到多个Slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的Slave端机器,确保所有的Slave端机器都正常。
(五)搭建
vim /etc/redis.conf
主(192.168.11.111)
修改配置文件
61 bind 0.0.0.080 protected-mode no84 port 6379128 daemonize yes
从
为避免与主配置文件发生冲突,且不方便启动,这里将从配置文件cp至/opt下(空目录,方便查询即可,任意目录均可)
cp /etc/redis.conf /opt/redis-6380.conf
修改配置文件
61 bind 0.0.0.080 protected-mode no84 port 6379128 daemonize yes266 slaveof 192.168.11.111 6379
查看监听
netstat -anptu | grep redis
(六)验证
使用redis-cli命令行登录redis服务器,输入role指令查看状态
redis-cli -p 6379
在master节点上,录入数据,在slave节点上查看到对应数据即可
redis-cli -p 6379
redis-cli -p 6380
主从复制相对来说配置较为简单,主要是配置文件不能配置错误。
二、Redis哨兵模式
(一)概念
Redis哨兵模式是一种分布式架构模式,用于监控和管理Redis集群中的主从切换。在哨兵模式中,有一个或多个哨兵进程(Sentinel)运行在独立的服务器上,用于对主从结构中的每台服务器进行监控,它们会定期检查Redis主节点和从节点的可用性,当出现故障时通过投票机制选择新的 Master 并将所有 Slave 连接到新的 Master。并在主节点不可用时自动将某个从节点选举为新的主节点。所以整个运行哨兵的集群的数量不得少于3个节点。
(二)作用
监控:哨兵定期检查Redis实例的状态,包括主从节点是否正常运行、网络连接是否正常等。
自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。以此来保证Redis服务的高可用性。
通知(提醒):哨兵可以将集群状态的改变信息传递给客户端,以便及时调整客户端的连接。
(三)缺点
写操作无法负载均衡
存储能力受到单机的限制
哨兵无法对从节点进行自动故障转移,在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。
哨兵节点是单点故障:如果哨兵节点本身出现故障,整个集群的自动故障转移功能会受影响。
性能开销:由于哨兵需要定期检查Redis实例的状态,可能会对系统的性能产生一定的开销。
配置复杂性:哨兵模式的配置相对复杂,需要配置哨兵的IP地址和端口,并且需要在客户端配置哨兵的地址,增加了系统的维护成本。
(四)结构
哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。
数据节点:主节点和从节点都是数据节点。
(五)搭建
1、编辑哨兵模式主(6379)配置文件
vim /etc/redis-sentinel.conf
15 bind 0.0.0.021 port 2637969 sentinel monitor mymaster 192.168.11.111 6379 2
#插入命令内容,让程序可以在后台运行70 daemonize yes
2、编辑哨兵模式从(6380)配置文件
cp /etc/redis-sentinel.conf /opt/redis-sentinel-6380.conf
vim redis-sentinel-6380.conf
只需在配置文件中更改监听端口号即可
3、编辑哨兵模式从(6381)配置文件
cp /etc/redis-sentinel.conf /opt/redis-sentinel-6381.conf
vim redis-sentinel-6381.conf
只需在配置文件中更改监听端口号即可
Ps:除上述cp命令外还可以使用以下命令进行输入,一次拷贝完成,再去更改配置文件内容
for i in 80 81;do cp /etc/redis-sentinel.conf /opt/redis-sentinel-63${i}.conf;done
命令解析:
这是一个在Linux命令行下执行的for循环语句,用于将/etc/redis-sentinel.conf文件复制到/opt目录下,并根据变量i的值生成不同的配置文件名。
具体解释如下:
- for i in 80 81:定义一个循环变量i,其值分别为80和81,表示循环两次。
- do:表示循环体开始。
- cp /etc/redis-sentinel.conf /opt/redis-sentinel-63${i}.conf:在每次循环中执行的命令,将/etc/redis-sentinel.conf文件复制到/opt目录下,并生成以"redis-sentinel-63"开头,后面跟着循环变量i的值和".conf"后缀的文件名。
- done:表示循环体结束。
因此,执行这段代码后,将会生成两个文件,分别是/opt/redis-sentinel-6380.conf和/opt/redis-sentinel-6381.conf,它们都是/etc/redis-sentinel.conf文件的副本,并且文件名中的数字部分分别为80和81。
4、启动配置文件和哨兵配置文件
redis-sentinel 配置文件路径
redis-server /etc/redis.conf
redis-server /opt/redis-6380.conf
redis-server /opt/redis-6381.conf
redis-sentinel /etc/redis-sentinel.conf
redis-sentinel /opt/redis-sentinel-6380.conf
redis-sentinel /opt/redis-sentinel-6381.conf
5、查看监听验证服务是否正常启动
netstat -anptu | grep redis
服务太多,暂截一部分 o-0!
(六)验证
1、查看日志文件
cat /var/log/redis/sentinel.log
2、查看监听、查看进程
现在主为6379号端口,杀死进程(停止)
netstat -anptu | grep redis
kill 37941
此时主6379已经被杀掉
2.1、哨兵配置文件会自动修改监听的master节点地址为新的master节点地址
2.2、停止master后,slave会通过选举产生新的master(查看日志文件)
cat /var/log/redis/sentinel.log
2.3、以前停掉的master重新启动不会更改当前哨兵模式选出的master
redis-server /etc/redis.conf
netstat -anptu | grep redis
cat /var/log/redis/sentinel.log
2.4、主从进行读写验证:
错误解析:
(error) READONLY You can't write against a read only slave.
这句话是在讨论数据库主从复制的情况下,其中一个从库被设置为只读。"READONLY You can't write against a read only slave." 的意思是不能对一个只读的从库进行写操作。也就是说,只读从库只能用于读取数据,不能修改数据。
三、Redis集群
(一)概述
Redis3.0版本以上开始支持cluster,采用的是hashslot(hash槽),可以将多个Redis实例整合在一起,形成一个群集,也就是将数据分散到群集的多台机器上。
(二)原理
Redis Cluster是一个无中心的结构,每个节点都保存数据和整个群集的状态。每个节点都会保存其他节点的信息,知道其他节点所负责的槽,并且会与其他节点定时发送心跳信息,能够及时感知群集中异常的节点。
(三)架构细节
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
(2)节点的失效(fail)在群集中超过半数的主(master)节点检测失效时才生效。
(3)客户端与 redis 节点直连,不需要中间代理(proxy)层,客户端不需要连接群集所有节点,连接群集中任何一个可用节点即可。
(4)redis-cluster 把所有的物理节点映射到【0-16383】slot 上,cluster 负责维护 node<->slot<->key。
(四)选举过程
选举过程是群集中所有master参与,如果半数以上master节点与当前 master 节点通信超时(cluster—node—timeout),认为当前 master 节点挂掉。以下两种情况为整个群集不可用(cluster_state:fail),当群集不可用时,所有对群集的操作都不可用,收到((error)CLUSTEFDOWN The cluster is down)错误。
如果群集任意 master挂掉,且当前 master 没有 slave,则群集进入 fail状态,也可以理解成群集的slot映射【0 ~16383】不完整时进入fail状态。
如果群集中超过半数的master挂掉,无论是否有slave,群集都进入 fail状态。
默认情况下,每个群集的节点都使用两个TCP端口.一个是6379,一个是16379;6379服务于客户端的连接,16379 用于群集总线,即使用二进制协议的节点到节点通信通道。节点使用群集总线进行故障检测、配置更新、故障转移授权等。如果开启了防火墙,需要开放这两个端口。
(五)集群搭建
实验环境:
1、关闭防火墙、关闭SELinux,配置静态IP
2、模拟搭建Redis集群部署,这里我们是启用三台虚拟机,均使用yum安装Redis
Redis-server_1 IP地址:192.168.11.111
主:redis1-6379.conf
从:redis2-6380.conf
Redis-server_2 IP地址:192.168.11.112
主:redis3-6379.conf
从:redis4-6380.conf
Redis-server_2 IP地址:192.168.11.113
主:redis5-6379.conf
从:redis6-6380.conf
3、主从关系
主:redis1为master1、redis4为master2、master6为master3
从:redis3为redis1的slave
redis5为redis4的slave
redis2为redis6的slave
1、配置
ps:
批量创建目录命令
mkdir /var/lib/redis/{redis-6379,redis-6380}
查看进程号(脚本)
netstat -anptu | awk '/redis-server/{print $7}'
如果是在同一台虚拟机设置服务器可以这样进行操作:
mkdir /etc/redis cp /etc/redis.conf /etc/redis/6379.conf cd /etc/redis
for i in {0..4};do cp ./6379.conf ./638${i}.conf;done
命令解析:
for i in {0..4}; do cp ./6379.conf ./638${i}.conf; done
:定义一个循环,i
的取值范围是从0到4,每次循环都执行一次复制操作。
cp ./6379.conf ./638${i}.conf
:复制文件./6379.conf
并重命名为./638${i}.conf
,${i}
会被代换为循环中的当前值。这段代码的作用是复制./6379.conf
文件为./6380.conf
、./6381.conf
、./6382.conf
、./6383.conf
、./6384.conf
五个文件。for i in {0..4};do sed -i "s/port 6379/port 638${i}/" ./638${i}.conf;done
命令解析:
for i in {0..4}; do sed -i "s/port 6379/port 638${i}/" ./638${i}.conf; done
:定义一个循环,i
的取值范围是从0到4,每次循环都执行一次替换操作。
sed -i "s/port 6379/port 638${i}/" ./638${i}.conf
:使用sed命令替换文件./638${i}.conf
中的字符串port 6379
为port 638${i}
,${i}
会被代换为循环中的当前值。这段代码的作用是将每个
./638${i}.conf
文件中的端口号从6379替换为对应的6380、6381、6382、6383、6384。sed -i "s/dir \/var\/lib\/redis/dir \/var\/lib\/redis\/6379/" ./6379.conf
命令解析:
sed -i "s/dir \/var\/lib\/redis/dir \/var\/lib\/redis\/6379/" ./6379.conf
:使用sed命令替换文件./6379.conf
中的字符串dir /var/lib/redis
为dir /var/lib/redis/6379/
。这段代码的作用是将
./6379.conf
文件中的存储路径修改为/var/lib/redis/6379/
。综合起来,这段代码的功能是批量复制和修改Redis配置文件,复制后的文件名为6380.conf、6381.conf、6382.conf、6383.conf、6384.conf,对应的端口号和存储路径也被修改。
循环启动(6384位置可以为更多,但前提是存在于同一台主机上的不同端口,且配置文件名未发生变化 [ 如配置文件名为6379.conf,以此类推 ] )
命令解析:for((i=6379;i<=6384;i++));do redis-server /etc/redis/${i}.conf;done
for((i=6379;i<=6384;i++))
:定义一个循环,i
从6379开始,每次递增1,直到i
小于等于6384为止。
do
:循环开始的标记。
redis-server /etc/redis/${i}.conf
:执行redis-server命令来启动Redis服务器,${i}
是一个变量,会被代换为循环中的当前值。
done
:循环结束的标记。执行这段代码会循环地启动 Redis 服务器,从6379到6384共6个实例。每个实例使用不同的配置文件(
${i}.conf
)启动,这些配置文件很可能包含不同的端口号、存储路径等设置。
1.1、Redis-server_1 配置如下:
1.创建Redis目录
2.将配置文件拷贝到创建目录下并重命名
3.进入创建目录下查看
mkdir /etc/redis
cp /etc/redis.conf /etc/redis/redis1-6379.conf
cp /etc/redis.conf /etc/redis/redis2-6380.conf
cd /etc/redis
ls
4.更改配置文件
vim redis1-6379.conf
bind 192.168.11.111 #设为本机IP地址
protected-mode no #关闭保护模式
port 6379 #监听端口
daemonize yes #允许后台运行
pidfile /var/run/redis_6379.pid #PID
dir /var/lib/redis/redis1-6379/ #目录存放位置
cluster-enabled yes #启用集群
cluster-config-file nodes-6379.conf #集群配置文件
cluster-node-timeout 15000 #集群节点超时时间
vim redis2-6380.conf
5.创建持久化对应目录
mkdir /var/lib/redis/redis1-6379
mkdir /var/lib/redis/redis2-6380
6.设置完毕后启动服务
redis-server /etc/redis/redis1-6379.conf
redis-server /etc/redis/redis2-6380.conf
7.查看监听验证
netstat -anptu | grep redis
ss -anl | grep 63
1.2、Redis-server_2 配置 :
mkdir /etc/redis
cp /etc/redis.conf /etc/redis/redis3-6379.conf
cp /etc/redis.conf /etc/redis/redis4-6380.conf
cd /etc/redis
ls
需要修改的内容如下: (ps:Redis-server1 配置已截图,在此不在过多标注)
vim redis3-6379.conf
bind 192.168.11.112 #本机地址protected-mode no #保护模式port 6379 #监听地址daemonize yes #允许后台运行pidfile /var/run/redis_6379.pid #piddir /var/lib/redis/redis3-6379/ #存放目录cluster-enabled yes #启用集群cluster-config-file nodes-6379.conf #集群配置文件cluster-node-timeout 15000 #集群节点超时时间
vim redis4-6380.conf
bind 192.168.11.112protected-mode noport 6380daemonize yespidfile /var/run/redis_6380.piddir /var/lib/redis/redis4-6380/cluster-enabled yes cluster-config-file nodes-6380.conf cluster-node-timeout 15000
创建PID对应目录
mkdir /var/lib/redis/redis3-6379
mkdir /var/lib/redis/redis4-6380
启动服务
redis-server /etc/redis/redis3-6379.conf
redis-server /etc/redis/redis4-6380.conf
查看监听
netstat -anptu | grep redis
1.3、Redis-server_3 配置:
mkdir /etc/redis
cp /etc/redis.conf /etc/redis/redis5-6379.conf
cp /etc/redis.conf /etc/redis/redis6-6380.conf
cd /etc/redis
ls
需要修改的内容如下: (ps:Redis-server1 配置已截图,在此不在过多标注)
vim redis5-6379.conf
bind 192.168.11.113 #本机地址protected-mode no #保护模式port 6379 #监听地址daemonize yes #允许后台运行pidfile /var/run/redis_6379.pid #piddir /var/lib/redis/redis5-6379/ #存放目录cluster-enabled yes #启用集群cluster-config-file nodes-6379.conf #集群配置文件cluster-node-timeout 15000 #集群节点超时时间
vim redis6-6380.conf
bind 192.168.11.113 protected-mode no port 6380 daemonize yes pidfile /var/run/redis_6380.pid dir /var/lib/redis/redis6-6380/ cluster-enabled yes cluster-config-file nodes-6380.conf cluster-node-timeout 15000
创建PID对应目录
mkdir /var/lib/redis/redis5-6379
mkdir /var/lib/redis/redis6-6380
启动服务
redis-server /etc/redis/redis5-6379.conf
redis-server /etc/redis/redis6-6380.conf
查看监听
netstat -anptu | grep redis
2、构建集群
ps:以下操作需要登录某个节点的redis数据库
redis-cli -h 192.168.11.111
注:以192.168.11.111的6379号节点为使用,将下述节点加入集群中。此时所有节点均为master,需要进行更改
2.1、将其他节点加入集群
CLUSTER MEET 192.168.11.111 6380
CLUSTER MEET 192.168.11.112 6379
CLUSTER MEET 192.168.11.112 6380
CLUSTER MEET 192.168.11.113 6379
CLUSTER MEET 192.168.11.113 6380
查看命令:
cluster nodes
查看所有群集节点
cluster info
2.2、分配slot(哈希槽)
注:这步操作最好在数据库外面进行操作,不要进入数据库进行操作
redis-cli -h 192.168.11.111 -p 6379 cluster addslots {0..5461}
redis-cli -h 192.168.11.112 -p 6380 cluster addslots {5462..10922}
redis-cli -h 192.168.11.113 -p 6380 cluster addslots {10923..16383}
命令解析:
这是一组redis-cli命令,用于在Redis集群中分配槽位。
redis-cli -h 192.168.11.111 -p 6379 cluster addslots {0..5461}
:这条命令将槽位从0到5461添加到在IP地址为192.168.11.111,端口为6379的Redis节点上。redis-cli -h 192.168.11.112 -p 6380 cluster addslots {5462..10922}
:这条命令将槽位从5462到10922添加到在IP地址为192.168.11.112,端口为6380的Redis节点上。redis-cli -h 192.168.11.113 -p 6380 cluster addslots {10923..16383}
:这条命令将槽位从10923到16383添加到在IP地址为192.168.11.113,端口为6380的Redis节点上。这些命令的目的是将整个槽位范围(0到16383)分布在Redis集群的不同节点上,以实现数据的分片和负载均衡。每个节点负责处理一部分槽位的数据操作。
注:大家一定要特别注意,分配哈希槽的这个步骤千万不要弄错了,不然建议重做,恢复快照,初始化的那种重做!!!
2.3、建立主从关系
注:这步操作需要结合上面制作的图进行操作,谁为谁的主,谁是从。
redis-cli -h 192.168.11.112 -p 6379 cluster replicate 822993c7bf8ef9aff6763ab677a7284e3a7e4de7
命令解析:
redis-cli -h 192.168.11.112 -p 6379 cluster replicate 822993c7bf8ef9aff6763ab677a7284e3a7e4de7
是一个Redis集群命令,用于设置指定节点的主从关系。
redis-cli
: Redis命令行工具。-h 192.168.11.112
: 指定Redis节点的主机地址为192.168.11.112。-p 6379
: 指定Redis节点的端口号为6379。cluster replicate
: 这是一个Redis集群命令,用于设置节点的主从关系。822993c7bf8ef9aff6763ab677a7284e3a7e4de7
: 这是节点的ID(也称为节点的哈希槽)。该节点将成为该节点的主节点的从节点。这个命令的作用是将具有ID为822993c7bf8ef9aff6763ab677a7284e3a7e4de7的节点作为从属节点,其主节点将是该节点的当前主节点。该命令用于创建Redis集群中的主从复制关系,并实现数据的冗余备份和高可用性。主节点负责处理写操作和复制数据给从节点,而从节点负责接收主节点的复制数据和处理读操作。
redis-cli -h 192.168.11.113 -p 6379 cluster replicate e9a5f6fb17f5f87b125e9be7b4ac06105001db35
redis-cli -h 192.168.11.111 -p 6380 cluster replicate 67e6145cfa9a0aeaf3419e22b5fd5a4b6a5af84d
查看验证:
redis-cli -h 192.168.11.111
CLUSTER NODES
Redi3为Redis1的从
Redis5为Redis4的从
Redis2为Redis6的从
2.4、查看集群状态
CLUSTER INFO
内容解析:
cluster_state:ok - 表示集群状态正常
cluster_slots_assigned:16384 - 表示集群中总共有16384个槽位
cluster_slots_ok:16384 - 表示所有槽位都正常分配给了集群节点
cluster_slots_pfail:0 - 表示没有槽位因为节点故障而无法访问
cluster_slots_fail:0 - 表示没有槽位因为其他原因而无法访问
cluster_known_nodes:6 - 表示集群中已知的节点数量为6个
cluster_size:3 - 表示集群中当前活跃的节点数量为3个
cluster_current_epoch:5 - 表示集群当前的纪元(epoch)为5
cluster_my_epoch:3 - 表示当前节点自己的纪元(epoch)为3
cluster_stats_messages_sent:7519 - 表示当前节点发送的消息数量为7519条 cluster_stats_messages_received:7519 - 表示当前节点接收到的消息数量为7519条
3、重置集群命令
cluster reset
注:上述设置主从关系时千万不能输入错误,不然只能使用命令重置集群,重新进行操作。
数据的key不能相同
创建内容进行验证
set zn 123
这里会显示报错,因为该数据库的哈希槽被分配到192.168.11.113的6380端口上了,此时我们在192.168.11.113的6380端口上创建内容即可成功创建
我们分配的哈希槽范围为:
{0..5461}
{5462..10922}
{10923..16383}注:11002为哈希槽的值,已经大于上述给定的分配范围,哈希槽的算法完全随机,因为随机是最快的,检索内容存放相对较慢,计算机讲求的是效率。
此时我们回到 “从” 进行查看验证
redis-cli -h 192.168.11.111 -p 6380
总结
Redis主从复制是一种数据备份和高可用性的解决方案,通过将一个Redis实例作为主节点(Master),其他Redis实例作为从节点(Slave),实现数据的异步复制。主节点负责处理客户端的写操作,并将写操作同步到所有从节点,从节点负责处理客户端的读操作。
1、主从复制的优势在于:
1)数据备份:主节点将数据同步到从节点,保证数据不会丢失。在主节点发生故障时,可以将从节点升级为主节点,实现快速的故障恢复。
2)提高读性能:从节点可以处理客户端的读操作,分担主节点的负载,提高系统的读性能。
3)扩展性:可以通过增加从节点来水平扩展系统的读能力。
哨兵模式是在主从复制的基础上添加了哨兵节点,用于监控和管理Redis的主从关系。哨兵节点会周期性地检查主节点的健康状态,当主节点发生故障时,自动将一个从节点升级为新的主节点,并将其他从节点切换到新的主节点上,实现高可用性。
2、哨兵模式的优势在于:
1)自动故障转移:当主节点发生故障时,哨兵节点可以自动将从节点升级为主节点,实现快速的故障转移,提高系统的可用性。
2)监控和管理:哨兵节点可以监控Redis的健康状态,及时发现主节点故障,并进行故障转移操作。同时,可以进行配置管理、故障诊断等操作。
3)集群管理:哨兵节点可以管理多个Redis实例,实现集群管理的功能。
集群三位一体是Redis官方提供的一种分布式解决方案,它将数据分散存储在多个Redis实例上,通过在客户端和Redis节点之间进行分片映射,实现数据的分布式存储和访问。集群三位一体由三个组件组成:客户端代理、路由节点和数据节点。
3、集群三位一体的优势在于:
1)分布式存储:数据根据一致性哈希算法分散存储在多个Redis实例上,提高了存储容量和吞吐量。
2)高可用性:集群中的每个数据节点都有多个副本,当某个数据节点发生故障时,系统可以从其他副本中获取数据,保证数据的可用性。
3)扩展性:可以通过增加数据节点来水平扩展系统的存储容量和吞吐量。
Redis主从复制、哨兵模式和集群三位一体是三种不同的Redis高可用性解决方案,可以根据实际需求选择合适的方案。