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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试基础篇——MySQL

MySQL 1、数据库技术概述 数据库database&#xff1a;存放和管理各种数据的仓库&#xff0c;操作的对象主要是【数据data】&#xff0c;科学的组织和存储数据&#xff0c;高效的获取和处理数据SQL&#xff1a;结构化查询语言&#xff0c;专为**关系型数据库而建立的操作语言&…

ORB-SLAM2第二节---双目地图初始化

比起单目初始化&#xff0c;而双目实现地图的初始化非常简单&#xff0c;只需要一帧&#xff08;左右目图像&#xff09;即可完成初始化。 行特征点统计。考虑用图像金字塔尺度作为偏移量&#xff0c;在当前点上下正负偏移量&#xff08;r)内的纵坐标值都认为是匹配点可能存在…

【MySQL】并发执行事务可能存在的问题, 事务的四种隔离级别

文章目录 前言一、并发执行事务可能存在的问题1, 脏读问题2, 不可重复读3, 幻读 二、MySQL 的四种隔离级别1, READ UNCOMMITTED 读未提交2, READ COMMITTED 读已提交3, REPEATABLE READ 可重复读 (MySQL 的默认事务隔离级别)4, SERIALIZABLE 串行化 总结 前言 各位读者好, 我是…

web会话跟踪以及JWT响应拦截机制

目录 JWT 会话跟踪 token 响应拦截器 http是无状态的&#xff0c;登录成功后&#xff0c;客户端就与服务器断开连接&#xff0c;之后再向后端发送请求时&#xff0c;后端需要知道前端是哪个用户在进行操作。 JWT Json web token (JWT), 是为了在网络应用环境间传递声明而…

WebAPIs 第三天

DOM 事件进阶 事件流事件委托其他事件元素尺寸与位置 一.事件流 事件流与两个阶段说明事件捕获事件冒泡阻止冒泡解绑事件 1.1 事件流与两个阶段说明 ① 事件流&#xff1a;指的是事件完整执行过程中的流动路径 ② 事件流分为捕获阶段和冒泡阶段 1.2 事件捕获 从DOM根元素…

探讨uniapp的生命周期问题

在uniapp中,生命周期函数分为应用生命周期函数、页面生命周期函数和组件生命周期函数. 1应用声明周期 应用生命周期函数只能在 App.vue 中监听有效&#xff0c;在其他页监听无效。 onLaunch&#xff1a;当uni-app 初始化完成时触发&#xff08;全局只触发一次&#xff09;on…

AI 绘画Stable Diffusion 研究(七) 一文读懂 Stable Diffusion 工作原理

大家好&#xff0c;我是风雨无阻。 本文适合人群&#xff1a; 想要了解AI绘图基本原理的朋友。 对Stable Diffusion AI绘图感兴趣的朋友。 本期内容&#xff1a; Stable Diffusion 能做什么 什么是扩散模型 扩散模型实现原理 Stable Diffusion 潜扩散模型 Stable Diffu…

VMware Workstation中安装了Windows7系统但是VMware Tools选项为灰色及无法安装的解决方法

一、问题描述 当我们在使用VMware Workstation安装好了Windows7系统后;该安装好的Windows7系统并不能自动适配WMware的界面,只能在中间显示很小的一部分内容;此时我们就需要给Windows7系统安装VMware Tools工具; 问题一:WMware中的【安装VMware Tools】选项则是灰色的无法…

邻接表创建无向表(C++ 代码)

#include<iostream>//邻接表创建无向表 #define MVNum 100 using namespace std; typedef char VerTexType; typedef struct Arcnode//边节点 {int adjvex;//该边所指向的顶点的位置struct Arcnode* nextarc;//指向下一条边的指针 }Arcnode; typedef struct vnode//顶点节…

【瑞吉外卖】Linux学习

Linux常用命令 Linux命令初体验 Linux的命令都是由一个或几个单词的缩写构成的 命令对应英文作用lslist查看当前目录下的内容pwdprint work directory查看当前所在目录cd [目录名]change directory切换目录touch [文件名]touch如果文件不存在&#xff0c;新建文件mkdir [目录…

软件测试基础篇——LAMP环境搭建

LAMP 1、Linux系统的其他命令 find命令&#xff1a;在目录下查找文件 ​ 格式一&#xff1a;find 路径 参数 文件名 ​ 路径&#xff1a;如果没有指定路径&#xff0c;默认是在当前目录下 ​ 参数&#xff1a;-name 根据文件名来查找&#xff0c;区分大小写&#xff1b; -…

【多模态】25、ViLT | 轻量级多模态预训练模型(ICML2021)

文章目录 一、背景二、ViLT 方法三、效果3.1 数据集3.2 分类任务 VQA 和 NLVR23.3 Image Retrieval 论文&#xff1a;ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision 代码&#xff1a;https://github.com/dandelin/vilt 出处&#xff1a;…

JVM相关知识

文章目录 JMM主内存与工作内存工作内存与主内存的交互的8种方法JVM内存结构运行时数据区 类加载机制类加载器类加载分类获取类加载器的途径双亲委派机制双亲委派的机制的弊端是什么?怎么打破双亲委派机制代码热替换、模块热部署自定义类加载器对类加载器的引用 String底层stri…

sentinel核心流程源码解析

sentinel的处理槽(ProcessorSlot) 可以说&#xff0c;sentinel实现的各种功能就是由各处理槽完成的 ,ProcessorSlot定义了四个方法&#xff1a; 当进入该处理槽时触发该方法 处理完 entry方法之后触发该方法 退出该处理槽时触发该方法 exit方法处理完成时触发该方法 sentinel的…

枚举缓存工具

此文章为笔记&#xff0c;为阅读其他文章的感受、补充、记录、练习、汇总&#xff0c;非原创&#xff0c;感谢每个知识分享者。 文章目录 1. 背景2. 枚举缓存3. 样例展示4. 性能对比5. 总结 本文通过几种样例展示如何高效优雅的使用java枚举消除冗余代码。 1. 背景 枚举在系统…

一文读懂HTML

文章目录 HTML的历史HTML的作用HTML的基本语言 HTML的历史 HTML&#xff08;HyperText Markup Language&#xff09;的历史可以追溯到20世纪90年代早期&#xff0c;它是互联网发展的重要里程碑之一。以下是HTML的历史概述&#xff1a; 早期阶段&#xff08;1980年代末 - 1990年…

创新引领城市进化:人工智能和大数据塑造智慧城市新面貌

人工智能和大数据等前沿技术正以惊人的速度融入智慧城市的方方面面&#xff0c;为城市的发展注入了强大的智慧和活力。这些技术的应用不仅令城市管理更高效、居民生活更便捷&#xff0c;还为可持续发展和创新奠定了坚实的基础。 在智慧城市中&#xff0c;人工智能技术正成为城市…

Unity使用C# Protobuf源码

目录 第一步&#xff1a;下载源码 第二步&#xff1a;运行C#构建文件 第三步&#xff1a;处理报错&#xff08;如果你已安装对应的SDK则不会报错&#xff09; 第四步&#xff1a;复制库文件到你的工程 第一步&#xff1a;下载源码 protobuf github源码https://github.com/p…

《甲午》观后感——GPT-3.5所写

《甲午》是一部令人深思的纪录片&#xff0c;通过生动的画面和真实的故事&#xff0c;向观众展示了中国历史上的一段重要时期。观看这部纪录片&#xff0c;我深受触动&#xff0c;对历史的认识也得到了深化。 首先&#xff0c;这部纪录片通过精心搜集的历史资料和珍贵的影像资料…

Xamarin.Android实现手写板的功能

目录 1、背景说明2、实现效果3、代码实现3.1 整体思路3.2 核心绘画类-PaintView.cs3.3 对话框类-WritePadDialog.cs3.4 前端实现类-MainActivity3.5 布局文件3.5.1 write_pad.xml3.5.2 activity_main布局文件 4、知识总结5、代码下载6、参考资料 1、背景说明 在实际使用过程中…