Redis集群(三十七)

news2024/11/24 1:22:18

部署搭建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

 

    从

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

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

           修改配置文件

  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-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.0
 21  port 26379
 69 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 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

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     #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

查看命令:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/873900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单体版ruoyi代码生成增删改查

目录 拉取代码 打开代码&#xff0c;新建一个模块&#xff0c;模块放我们的项目后台数据库的curd代码。 我们的新模块引入ruoyi的通用模块 ruoyi的adm引入我们的项目依赖&#xff0c;引用我们的模型、service、mapper 将我们的模块注入父项目 打开ruoyi-adm配置MyBatis&…

UDS的DID(Data identification)

引言 DID是UDS中的一个重要概念&#xff0c;它代表着特定的数据标识符。DID用于标识和获取ECU中的特定参数数据&#xff0c;如传感器数据、状态信息等。通过使用DID&#xff0c;诊断工具可以准确地获取所需的数据&#xff0c;从而帮助诊断人员更好地了解车辆的状态和性能。 D…

芯片工程师求职题目之CPU篇(3)

1. 什么是cache(缓存)&#xff1f;它的工作原理是什么&#xff1f; Cache是少量的快速内存。它位于主存储器和中央处理器之间。每当CPU请求memory位置的内容时&#xff0c;首先检查cache中是否有此数据。如果数据存在于cache中&#xff0c;CPU直接从cache中获得数据。这是更快…

必备工具:Postman Newman 详解

目录 Postman Newman 是什么&#xff1f; Postman Newman 的作用 如何使用 Postman Newman&#xff1f; 第一步&#xff1a;安装 Node.js 第二步&#xff1a;全局安装 Newman 第三步&#xff1a;导出集合或环境变量为 JSON 格式 第四步&#xff1a;使用 Newman 运行测试…

IDEA部署配置Maven项目教程,IDEA配置Tomcat(2019.3.3)

一、前言 当涉及到软件开发和项目管理时&#xff0c;使用一个可靠的构建工具是非常重要的。Maven是一个广泛使用的构建工具&#xff0c;它为Java项目提供了一种简化的构建过程和依赖管理。 在本文中&#xff0c;我们将探讨如何部署Maven并开始使用它来构建您的项目。我们将介绍…

快递管理系统springboot 寄件物流仓库java jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 快递管理系统springboot 系统有1权限&#xff1a;管…

205、仿真-51单片机直流数字电流表多档位切换Proteus仿真设计(程序+Proteus仿真+原理图+流程图+元器件清单+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、原理图 五、程序源码 资料包括&#xff1a; 方案选择 单片机的选择 方案一&#xff1a;STM32系列单片机控制&#xff0c;该型号单片机为LQFP44封装&#xff0c;内部资源…

Apache JMeter:完全指南

Apache JMeter 是一款开源的性能测试工具&#xff0c;可以用于测试 Web 应用程序、FTP 服务器、数据库等各种类型的服务器。本文将以 JMeter 5.5 为例介绍 JMeter 的使用方法。 下载和安装 由于 JMeter 是使用 Java 开发的&#xff0c;因此在运行之前必须先安装 JDK。您可以在…

【Python常用函数】一文让你彻底掌握Python中的toad.quality函数

任何事情都是由量变到质变的过程&#xff0c;学习Python也不例外。只有把一个语言中的常用函数了如指掌了&#xff0c;才能在处理问题的过程中得心应手&#xff0c;快速地找到最优方案。本文和你一起来探索Python中的toad.quality函数&#xff0c;让你以最短的时间明白这个函数…

Multi-object navigation in real environments using hybrid policies 论文阅读

论文信息 题目&#xff1a;Multi-object navigation in real environments using hybrid policies 作者&#xff1a;Assem Sadek, Guillaume Bono 来源&#xff1a;CVPR 时间&#xff1a;2023 Abstract 机器人技术中的导航问题通常是通过 SLAM 和规划的结合来解决的。 最近…

Michael.W基于Foundry精读Openzeppelin第25期——IERC1820Registry.sol

Michael.W基于Foundry精读Openzeppelin第25期——IERC1820Registry.sol 0. 版本1. IERC1820Registry.sol2. 官方实现合约代码解读2.1 ERC1820Registry 0. 版本 [openzeppelin]&#xff1a;v4.8.3&#xff0c;[forge-std]&#xff1a;v1.5.6 1. IERC1820Registry.sol Github:…

【Linux初阶】system V - 共享内存

文章目录 前言一、共享内存初识1.共享内存的原理2.理解共享内存3.共享的内存的概念 二、共享内存函数1.shmget函数2.shmat函数3.shmdt函数4.shmctl函数 三、共享内存的查看方法及其特征四、共享内存的代码实现五、共享内存优缺点分析1.共享内存的优点2.共享内存的缺点 六、共享…

uni-app弹窗列表滚动, 弹框下面的内容也跟随滚动解决方案

滑动弹窗里的列表&#xff0c;弹框下面的内容也会跟着滑动&#xff0c;导致弹窗中的列表不能正常滚动 1.弹窗组件代码&#xff0c;需要在最外层的view中加入touchmove.stop.prevent"moveHandle"&#xff0c;且弹窗中需要滚动的列表要使用scroll-view标签包裹起来&…

学生课堂行为识别教学质量评估 yolov7

学生课堂行为识别教学质量评估系统利用教室安装的摄像头&#xff0c;学生课堂行为识别教学质量评估系统对学生的表情状态、课堂表现和互动行为进行全面监测。对学生的参与度、专注度、互动质量等进行评估&#xff0c;为教师提供有关教学效果的实时反馈。可以为教师提供个性化的…

深谙封装之道:requests再封装,更完美的请求函数

这集我们来讲一个requests的封装函数。 作为一个程序员&#xff0c;我们经常会追求代码的复用性&#xff0c;所以就很多三方库&#xff0c;让我们不重复造轮子。但三方库也不是一步到位的&#xff0c;真正要完成目标还是要动动手的&#xff0c;把工具组装起来。相信每个人都封…

win10在vmware15中安装macos10.13系统

第一步、安装vmware版本信息如下 第二步、下载unlocker-main和darwin.iso放到安装文件夹 第三步、管理员身份运行win-install.cmd 第四步、运行vmware新建虚拟机 第五步、启动新创建的虚拟机macOS 10.13并选择语言 第六步、选择磁盘工具抹掉磁盘 第七步、格式化完成后退出磁盘工…

dialogbot:开箱即用的对话机器人解决方案,涵盖问答型对话、任务型对话和聊天型对话等多种场景,为您提供全方位的对话交互体验。

dialogbot&#xff1a;开箱即用的对话机器人解决方案&#xff0c;涵盖问答型对话、任务型对话和聊天型对话等多种场景&#xff0c;支持网络检索问答、领域知识问答、任务引导问答和闲聊问答&#xff0c;为您提供全方位的对话交互体验。 人机对话系统一直是AI的重要方向&#xf…

二叉搜索树K和KV结构模拟

一 什么是二叉搜索树 这个的结构特性非常重要&#xff0c;是后面函数实现的结构基础&#xff0c;二叉搜索树的特性是每个根节点都比自己的左树任一节点大&#xff0c;比自己的右树任一节点小。 例如这个图&#xff0c; 41是根节点&#xff0c;要比左树大&#xff0c;比右树小&…

数据结构-队列的实现(C语言版)

前言 队列是一种特殊的线性表&#xff0c;它只允许在一端对数据进行插入操作&#xff0c;在另一端对数据进行删除操作的特殊线性表&#xff0c;队列具有先进先出的&#xff08;FIFO&#xff09;的 特性&#xff0c;进行插入操作的一端称为队尾&#xff0c;进行删除操作的一端称…

关于Android Studio Http Proxy设置

对敌人最大的蔑视就是沉默。--鹿丸 我们使用Android Studio 开始构建的时候会有卡顿的情况&#xff0c;甚至死机&#xff0c;也就是所谓的【android studio】构建卡住问题&#xff0c;如果依赖库类都是国内的&#xff0c;检查是否开启了代理 这个地方选择下面的自动代理 国内…