Redis集群(三十七)

部署搭建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.0
  80 protected-mode no
  84 port 6379
 128 daemonize yes

Redis集群(三十七)_第1张图片

 

    从

为避免与主配置文件发生冲突,且不方便启动,这里将从配置文件cp至/opt下(空目录,方便查询即可,任意目录均可)

cp /etc/redis.conf /opt/redis-6380.conf

Redis集群(三十七)_第2张图片

           修改配置文件

  61 bind 0.0.0.0
  80 protected-mode no
  84 port 6379
 128 daemonize yes
 266   slaveof 192.168.11.111 6379

查看监听

netstat -anptu | grep redis

Redis集群(三十七)_第3张图片

  (六)验证

    使用redis-cli命令行登录redis服务器,输入role指令查看状态

redis-cli -p 6379

Redis集群(三十七)_第4张图片

     在master节点上,录入数据,在slave节点上查看到对应数据即可

redis-cli -p 6379

Redis集群(三十七)_第5张图片

redis-cli -p 6380

 Redis集群(三十七)_第6张图片

  主从复制相对来说配置较为简单,主要是配置文件不能配置错误。

二、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.0
 21  port 26379
 69 sentinel monitor mymaster 192.168.11.111 6379 2
#插入命令内容,让程序可以在后台运行
 70 daemonize  yes

Redis集群(三十七)_第7张图片

 

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

Redis集群(三十七)_第8张图片

 服务太多,暂截一部分 o-0!

(六)验证

1、查看日志文件

cat /var/log/redis/sentinel.log

Redis集群(三十七)_第9张图片

2、查看监听、查看进程

现在主为6379号端口,杀死进程(停止)

netstat -anptu | grep redis

Redis集群(三十七)_第10张图片

kill 37941

    此时主6379已经被杀掉

2.1、哨兵配置文件会自动修改监听的master节点地址为新的master节点地址

2.2、停止master后,slave会通过选举产生新的master(查看日志文件)

cat /var/log/redis/sentinel.log

Redis集群(三十七)_第11张图片

2.3、以前停掉的master重新启动不会更改当前哨兵模式选出的master 

redis-server /etc/redis.conf 
netstat -anptu | grep redis

Redis集群(三十七)_第12张图片

cat /var/log/redis/sentinel.log

Redis集群(三十七)_第13张图片

2.4、主从进行读写验证:

 Redis集群(三十七)_第14张图片

 错误解析:

(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

Redis集群(三十七)_第15张图片

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 6379port 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/redisdir /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

Redis集群(三十七)_第16张图片

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             #集群节点超时时间

Redis集群(三十七)_第17张图片

 

 

 

vim redis2-6380.conf

Redis集群(三十七)_第18张图片

 

Redis集群(三十七)_第19张图片

5.创建持久化对应目录
mkdir /var/lib/redis/redis1-6379
mkdir /var/lib/redis/redis2-6380

Redis集群(三十七)_第20张图片

6.设置完毕后启动服务
redis-server /etc/redis/redis1-6379.conf
redis-server /etc/redis/redis2-6380.conf

 

7.查看监听验证
netstat -anptu | grep redis

 ss -anl | grep 63

Redis集群(三十七)_第21张图片

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

Redis集群(三十七)_第22张图片

 需要修改的内容如下: (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     #pid

dir /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.112

protected-mode no

port 6380

daemonize yes

pidfile /var/run/redis_6380.pid

dir /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     #pid

dir /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

Redis集群(三十七)_第23张图片

查看命令:

cluster nodes

Redis集群(三十七)_第24张图片

查看所有群集节点

cluster info

Redis集群(三十七)_第25张图片 

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集群(三十七)_第26张图片

 命令解析:
 

这是一组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

Redis集群(三十七)_第27张图片

 Redi3为Redis1的从

 Redis5为Redis4的从

 Redis2为Redis6的从

2.4、查看集群状态

CLUSTER INFO

 Redis集群(三十七)_第28张图片

 内容解析:

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集群(三十七)_第29张图片

此时我们回到 “从” 进行查看验证

redis-cli -h 192.168.11.111 -p 6380

Redis集群(三十七)_第30张图片

总结

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高可用性解决方案,可以根据实际需求选择合适的方案。

你可能感兴趣的:(云计算运维学习,redis,java,数据库,服务器,云计算)