数据库应用:Redis主从复制、哨兵、cluster集群

news2024/11/18 17:27:03

目录

一、理论

1.Redis高可用

2.Redis主从复制

3.部署Redis主从复制

4.Redis哨兵模式

5.部署Redis哨兵模式

6.Redis集群模式

7.部署Redis集群

二、实验

1.部署Redis主从复制

2.部署Redis哨兵模式

3.部署Redis集群

三、问题

1.开启Redis群集失败

四、总结


 

 

一、理论

1.Redis高可用

(1)概念

在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。

1ccfca220e954b149be6e0733f5b1b7a.png

 但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离、快速容灾技术),还需要考虑数据容量的扩展、数据安全不会丢失等。

(2)Redis的高可用技术

在Redis中,实现高可用的技术主要包括持久化、主从复制、哨兵和cluster集群,下面分别说明它们的作用,以及解决了什么样的问题。

①持久化: 持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。

②持主从复制: 主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份(和同步),以及对于读操作的负载均衡和简单的故障恢复。

缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。

③哨兵: 在主从复制的基础上,哨兵实现了自动化的故障恢复。(主挂了,找一个从成为新的主,哨兵节点进行监控)

缺陷:写操作无法负载均衡;存储能力受到单机的限制。


④ Cluster集群: 通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。(6台起步,成双成对,3主3从)

持久化技术已在前一篇文章中进行介绍( Redis 高可用之持久化 ),本文将具体主从复制、哨兵、Cluster集群三种高可用技术。
 

2.Redis主从复制

(1)概念

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
(2) 主从复制的作用

表1 主从复制的作用

作用描述
数据冗余主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
故障恢复当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
负载均衡在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
高可用基石除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

8d32bb8097be400596fc9dc64bba892a.png

 122f665721984162b03625a524274ca9.png

 (2)主从复制流程

① 若启动一个slave机器进程,则它会向Master机器发送一个sync command命令,请求同步连接。

② 无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中.

③ 后台进程完成缓存操作之后,Master机器就会向slave机器发送数据文件,slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给slave端机器。若slave出现故障导致宕机,则恢复正常后会自动重新连接。

④ Master机器收到slave端机器的连接后,将其完整的数据文件发送给slave端机器,如果Mater同时收到多个slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的slave端机器,确保所有的slave端机器都正常。

 

3.部署Redis主从复制

(1)环境

表2 Redis主从复制环境

主从虚机IP地址
mastercentos7-1192.168.204.40
slave1centos7-2192.168..204.41
slave2centos7-3192.168.204.42

(2)部署

#关闭防火墙
systemctl stop firewalld
setenforce 0
#安装环境依赖包,下载编译工具
yum install -y gcc gcc-c++ make
​
#上传软件包并解压
cd /opt/
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
#开2核编译安装,指定安装路径为/usr/local/redis
make -j2 && make PREFIX=/usr/local/redis install
#由于Redis源码包中直接提供了Makefile 文件,所以在解压完软件包后,不用先执行./configure 进行配置,可直接执行make与make install命令进行安装。
​
#执行软件包提供的install_server.sh 脚本文件,设置Redis服务所需要的相关配置文件
cd /opt/redis-5.0.7/utils
./install_server.sh
.......#一直回车
Please select the redis executable path [] /usr/local/redis/bin/redis-server
#这里默认为/usr/local/bin/redis-server,需要手动修改为/usr/local/redis/bin/redis-server,注意要一次性正确输入
​
 ---------------------- 虚线内是注释 ----------------------------------------------------
 Selected config:
 Port: 6379                                      #默认侦听端口为6379
 Config file: /etc/redis/6379.conf               #配置文件路径
 Log file: /var/log/redis_6379.log               #日志文件路径
 Data dir : /var/lib/redis/6379                  #数据文件路径
 Executable: /usr/local/redis/bin/redis-server   #可执行文件路径
 Cli Executable : /usr/local/bin/redis-cli       #客户端命令工具
 -----------------------------------------------------------------------------------
​
#当install_server.sh 脚本运行完毕,Redis 服务就已经启动,默认监听端口为6379
netstat -natp | grep redis
​
#把redis的可执行程序文件放入路径环境变量的目录中,便于系统识别
ln -s /usr/local/redis/bin/* /usr/local/bin/
​
#Redis服务控制
/etc/init.d/redis_6379 stop     #停止
/etc/init.d/redis_6379 start    #启动
/etc/init.d/redis_6379 restart  #重启
/etc/init.d/redis_6379 status   #查看状态

(3)修改master节点的配置文件

vim /etc/redis/6379.conf 
 bind 0.0.0.0                      #70行,修改监听地址为0.0.0.0(生产环境中需要填写物理网卡的IP)
 daemonize yes                     #137行,开启守护进程,后台启动 
 logfile /var/log/redis_6379.log   #172行,指定日志文件存放目录
 dir /var/lib/redis/6379           #264行,指定工作目录
 appendonly yes                    #700行,开启AOF持久化功能
​
/etc/init.d/redis_6379 restart     #重启redis服务

(4)修改slave节点的配置文件

修改slave1的配置文件,之后scp传给slave2。

#修改slave1的配置文件
vim /etc/redis/6379.conf 
 bind 0.0.0.0                        #70行,修改监听地址为0.0.0.0(生产环境中需要填写物理网卡的IP)
 daemonize yes                       #137行,开启守护进程,后台启动
 logfile /var/log/redis_6379.log     #172行,指定日志文件目录
 dir /var/lib/redis/6379             #264行,指定工作目录
 replicaof 192.168.204.40 6379       #288行,指定要同步的Master节点的IP和端口
 appendonly yes                      #700行,修改为yes,开启AOF持久化功能
​
#将配置文件传给slave2
scp /etc/redis/6379.conf 192.168.204.42:/etc/redis/
​
/etc/init.d/redis_6379 restart  #重启redis
netstat -natp | grep redis      #查看主从服务器是否已建立连接

(5)验证主从效果

1)主节点查看日志,并插入一条数据。

#主节点查看日志
[root@localhost utils]# tail /var/log/redis_6379.log 
......
* Synchronization with replica 192.168.204.41:6379 succeeded
......
 * Synchronization with replica 192.168.204.42:6379 succeeded
​
#主节点插入一条数据
[root@localhost utils]# redis-cli
127.0.0.1:6379> set name david
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"david"

2)从节点查看数据是否同步成功。

[root@localhost utils]# redis-cli     #slave1查看数据同步成功  
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"david"
​
[root@localhost utils]# redis-cli     #slave2查看数据同步成功  
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"david"

 

 

4.Redis哨兵模式

(1)概念

主从切换技术的方法是:当服务器宕机后,需要手动一台从机切换为主机,这需要人工干预,不仅费时费力而且还会造成一段时间内服务不可用。为了解决主从复制的缺点,就有了哨兵机制。

aa655ae9185b41b993276995acbb02ef.png

(2)哨兵模式的作用

①监控 哨兵会不断地检查主节点和从节点是否运作正常。

②自动故障转移 当主节点不能正常工作时,哨兵会开始自动故障转移操,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。

③通知(提醒) 哨兵可以将故障转移的结果发送给客户端。

 

97f9aceb49fbda2991f0b793c409c5ee.jpeg

 (3) 哨兵结构

①哨兵节点 哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点不存储数据。

②数据节点 主节点和从节点都是数据节点。

(4)故障转移机制

① 由哨兵节点定期监控发现主节点是否出现了故障

每个哨兵节点每隔1秒会问主节点、从节点及其它哨兵节点发送一次ping命令做一次心检测。如果主节点在一定时间范围内不回复或者是回复一个错误消息,那么这个哨兵就会认为这个主节点主观下线了(单方面的)。当超过半数哨兵节点认为该主节点主观下线了,这样就客观下线了。

② 当主节点出现故障,此时哨兵节点会通过Raft算法(选举算法)实现选举机制共同选举出一个哨兵节点为leader,来负责处理主节点的故障转移和通知。所以整个运行哨兵的集群的数量不得少于3个节点。

③ 由leader哨兵节点执行故障转移,过程如下:

将某一个从节点升级为新的主节点,让其它从节点指向新的主节点;
若原主节点恢复也变成从节点,并指向新的主节点;
通知客户端主节点已经更换。
需要特别注意的是,客观下线是主节点才有的概念;如果从节点和哨兵节点发生故障,被哨兵主观下线后,不会再有后续的客观下线和故障转移操作
 

(5)主节点的选举

① 过滤掉不健康的(己下线的),没有回复哨兵ping响应的从节点。

② 选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)

③ 选择复制偏移量最大,也就是复制最完整的从节点。

哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式。

 

5.部署Redis哨兵模式

(1)环境

表3 Redis哨兵模式

节点虚拟机IP地址
mastercentos7-1192.198.192.10
slave1centos7-2192.168.192.11
slave2centos7-3192.168.192.12
Sentinel-1centos7-4192.168.192.13
Sentinel-2centos7-5192.168.192.14
Sentinel-3centos7-6192.168.192.15

生产环境中使用对应数量节点的服务器作为哨兵节点,实验环境中如果电脑性能不够可以把哨兵搭建在原虚机上。

(2)所有节点安装Redis

参考上文

(3)master和slave部署Redis主从复制

参考上文

(4)修改哨兵节点的配置文件sentinel.conf(所有哨兵节点操作)

修改Sentinel-1的配置文件,之后scp传给另外2个哨兵节点。

vim /opt/redis-5.0.7/sentinel.conf
......
protected-mode no                #17行,取消注释,关闭保护模式
port 26379                       #21行,Redis哨兵默认的监听端口
daemonize yes                    #26行,指定sentinel为后台启动
logfile "/var/log/sentinel.log"  #36行,指定日志文件存放路径
dir "/var/lib/redis/6379"        #65行,指定数据库存放路径
sentinel monitor mymaster 192.168.192.10 6379 2  #84行,修改
#指定该哨兵节点监控192.168.192.10:6379这个主节点,该主节点的名称是mymaster。
#最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
​
sentinel down-after-milliseconds mymaster 3000  #113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000  #146行,同一个sentinel对同一个master两次failover之间的间隔时间(180秒)
​
#传给两外2个哨兵节点
scp /opt/redis-5.0.7/sentinel.conf  192.168.204.44:/opt/redis-5.0.7/
scp /opt/redis-5.0.7/sentinel.conf  192.168.204.45:/opt/redis-5.0.7/

(5)启动哨兵模式(所有哨兵节点操作)

#在哨兵节点查看
[root@localhost ~]# redis-cli -p 26379 info Sentinel
# Sentinel
sentinel_masters:1     #一台主节点
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.204.40:6379,slaves=2,sentinels=3
#可以看到主节点地址,2台从节点,3台哨兵

(6)模拟故障

#在Master 上查看redis-server进程号:
[root@localhost ~]# ps -ef | grep redis

#杀死 Master 节点上redis-server的进程号
[root@localhost ~]# kill -9 37739        #Master节点上redis-server的进程号
[root@localhost ~]# netstat -natp | grep redis
​
#在哨兵上查看日志,验证master是否切换至从服务器
[root@localhost redis-5.0.7]# tail -f /var/log/sentinel.log
​
#在哨兵上查看主节点是否切换成功
[root@localhost ~]# redis-cli -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.204.41:6379,slaves=2,sentinels=3

 

6.Redis集群模式

(1)概念

集群,即Redis Cluster,是Redis3.0开始引入的分布式存储方案。

集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。

(2)集群的作用

① 数据分区: 数据分区(或称数据分片)是集群最核心的功能。

1)集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
2)Redis单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave和bgrewriteaof的fork操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。
② 高可用: 集群支持主从复制和主节点的自动故障转移(与哨兵类似);当任一节点发生故障时,集群仍然可以对外提供服务。

36e7718cdb67458f97ad7a9c9fb86f43.png

 (3)Redis集群的数据分片
Redis集群引入了哈希槽的概念。

Redis集群有16384个哈希槽(编号0-16383)。

集群的每个节点负责一部分哈希槽。

每个Key通过CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。
6b2961817b5a4bd4b1ad832b5a5127d1.png

 a826a0e07e5d4703a81bf29bd599e0de.png

 

(4)集群模式的主从复制模型

①集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。
②为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为主节点继续服务。当B和B1都失败后,集群将不可用。

 

7.部署Redis集群

(1)环境

6台服务器,3主3从。

节点IP安装redis
master1192.168.204.40redis-5.0.7.tar.gz
slave1192.168.204.43redis-5.0.7.tar.gz
master2192.168.204.41redis-5.0.7.tar.gz
slave2192.168.204.44redis-5.0.7.tar.gz
master3192.168.204.42redis-5.0.7.tar.gz
slave3192.168.204.45redis-5.0.7.tar.gz

(2)所有节点安装Redis

参考上文

(3)开启集群功能

修改任意一台服务器配置文件,再通过scp命令传给其他主机。

cd /opt/redis-5.0.7/
vim redis.conf
......
bind 192.168.204.40                       #69行,修改为监听自己的物理网卡IP
protected-mode no                         #88行,修改为no,关闭保护模式
port 6379                                 #92行,redis默认监听端口
daemonize yes                             #136行,开启守护进程,以独立进程启动
appendonly yes                            #699行,修改为yes,开启AOF持久化
cluster-enabled yes                       #832行,取消注释,开启群集功能
cluster-config-file nodes-6379.conf       #840行,取消注释,群集名称文件设置
cluster-node-timeout 15000                #846行,取消注释,群集超时时间设置
​
​
#将文件传给另外5个节点,之后每个节点要修改监听地址为自己的IP
[root@localhost redis-5.0.7]# scp redis.conf 192.168.204.41:`pwd`
[root@localhost redis-5.0.7]# scp redis.conf 192.168.204.42:`pwd`
[root@localhost redis-5.0.7]# scp redis.conf 192.168.204.43:`pwd`
[root@localhost redis-5.0.7]# scp redis.conf 192.168.204.44:`pwd`
[root@localhost redis-5.0.7]# scp redis.conf 192.168.204.45:`pwd`

(4)所有节点启动redis服务

cd /opt/redis-5.0.7/
redis-server redis.conf   #启动redis节点

(5)启动集群

在任意一个节点启动集群即可。

redis-cli --cluster create 192.168.204.40:6379 192.168.204.41:6379 192.168.204.42:6379 192.168.204.43:6379 192.168.204.44:6379 192.168.204.45:6379 --cluster-replicas 1
#六个主机分为三组,三主三从,前面的做主节点后面的做从节点下免交互的时候需要输入yes才可以创建 "-replicas 1"表示每个主节点有一个从节点
#前三台为Master,后三台为Slave

(6)测试集群

#加-c参数,节点之间就可以互相跳转  
redis-cli -h 192.168.204.40 -p 6379 -c 
#查看节点的哈希槽编号范围
cluster slots    
#赋值
set name yuji
#查看键的哈希槽编号  
cluster keyslot 键名
​
​
[root@localhost ~]# redis-cli -h 192.168.204.40 -p 6379 -c
192.168.192.10:6379> cluster slots      #查看节点的哈希槽编号范围
1) 1) (integer) 5461        #第一对主从的哈希槽编号范围
   2) (integer) 10922
   3) 1) "192.168.204.41"   #主节点
      2) (integer) 6379
      3) "67585ccc6c2878837731694b949a9006dd02d02a"
   4) 1) "192.168.204.45"   #从节点
      2) (integer) 6379
      3) "9c3d18ae3514712efa923a5f9ef764ac39a1d170"
2) 1) (integer) 10923       #第二对主从的哈希槽编号范围
   2) (integer) 16383
   3) 1) "192.168.204.42"   #主节点
      2) (integer) 6379
      3) "e3e1c125daddaa8f48f5a92cbc9408a25b91a19c"
   4) 1) "192.168.204.43"   #从节点
      2) (integer) 6379
      3) "c5f46df178487cb326be2500875b40868d9874a6"
3) 1) (integer) 0           #第三对主从的哈希槽编号范围
   2) (integer) 5460
   3) 1) "192.168.204.40"   #主节点
      2) (integer) 6379
      3) "9ef7a01923f304023ef85516aedfbe5f9de216b4"
   4) 1) "192.168.204.44"   #从节点 
      2) (integer) 6379
      3) "930c3f117f7a35a100fd199377602545e2378a0b"
192.168.204.40:6379> 
​
​
#在10节点新建name键,会自动跳转到11节点进行存放     
192.168.204.40:6379> set name mao
-> Redirected to slot [5798] located at 192.168.204.41:6379
OK
192.168.192.11:6379> cluster keyslot name    #查看name键的哈希槽编号
(integer) 5798
192.168.192.11:6379> quit       #退出数据库
[root@localhost ~]# redis-cli -h 192.168.204.40 -p 6379 -c     #重新登录10节点
192.168.192.10:6379> keys *     #10节点中没有name键
(empty list or set)
192.168.192.10:6379> get name    #查看name键的值,会根据键的哈希槽编号自动跳转到11节点进行获取
-> Redirected to slot [5798] located at 192.168.192.11:6379
"mao"
192.168.121.20:6379>            #已跳转到11节点

 

 

二、实验

1.部署Redis主从复制

(1)修改master节点的配置文件

35f176c6c973430cb90410842e3bc7dc.png 

5f818f2caf7f4471b85b7d081cd62933.png 52bb7b1d659e4bccb5783ee7f55133a3.png 40d66abce1c54e74b487f2c8409ebc45.png 2f7e49ff95b74968895556c062980b13.png dedc10ea79204438ad9032870fde88d2.png

 

(2)修改slave1节点的配置文件

8dde57d2fed747d38bcc83fc11304b50.png

d589b076b72c408282ecb07e3ec0a7e6.png

(3)修改slave2节点的配置文件

63a1d0e6ff694a209d1e2193c04a0747.png

423c046c538c46e1b229517041537edc.png

(4)验证主从效果

①主节点查看日志

eb6014c584fe4f55b296bc323dd65d37.png

 ②并插入一条数据。

e30f96c5605143e9ae951a755c7bd249.png

c24ff45c1a714ffea8bbdab5a25510fd.png

 ③从节点1查看 数据是否同步成功

fd419d636edd47aa9df194e1da87a02a.png

④从节点2查看数据是否同步成功

fb660b7616354312962e971cb36a6c93.png

 

2.部署Redis哨兵模式

(1)修改哨兵节点的配置文件sentinel.conf(所有哨兵节点操作)

119e051afd2e45cf9a2fefb86a838649.png

7056e2ca1eaf452c84fc25f8b20bbea8.png f1029059b4f44bae80a09b209c128f8e.png

c1bf7a280974473587cc489eca9344ce.png

f1129ef0e1bc4e3ca5ef3fe7ae22b2cf.png 92495cb77bd6410caf4138c58509f510.png 21c68b1400484b1ebdd149b5aae2720c.png 

(2)启动哨兵

9e7b39392df6405cb794e21827b29158.png 4efa4c8eb2e1428aae9f717c9d8fb1d3.png 58075f804fc8406d894c815660b952f0.png

(3)查看哨兵信息

7ed5d45b144e46958cde925e77033be5.png

 (4)模拟故障

 1e05e8eee0094989ba11602c4fab8588.png f41a3d3d5dd34a538d0de5cf92abed7c.png

(5)在哨兵上查看日志,验证master是否切换至从服务器

1f004eee4c9c44d5b1752895a242736f.png

(6)在哨兵上查看主节点是否切换成功

 

7e557410c79740649fa927235f64df01.png

 

3.部署Redis集群

(1) 开启集群功能

70730e7c1a6e4fbd8e98a93a62a4d3d9.png

230ded81252d4ffabd52579bfa024f6a.png ee7f0cb4800e4fee95c343dce059a31d.png 181bb28f218846f8a611e01fbf74ed99.png

3efe7d408a1d4227975d35e203a350fa.png 85a11b4a492e420fb7bf1a00f41d9bdd.png a78ec7d39a04466e8508f223534b93c4.png

7e014ce21ddd4718ad6c32aaf173ceff.png

 

(2)之后每个节点要修改监听地址为自己的IP

16a61640fd914b938d628bcfe58ea8f1.png

969cdec352ff4f6f9462a3c8207d208a.pngf4deac6abbc544b586e03c5e8fd8b59b.png 9b8927c1f95c413c88cb3b8489f96d9e.png 82affbfe67d443a09be4af75c2e8c5bf.png

(3) 所有节点启动redis服务

master1

1d32259bab434c128b20a6ba792e16c2.pngmaster2e47256e864d64f6787bf50b2e6156566.pngmaster3

232423d52cfd44a78bd409b672fed996.pngslave1 4652e89d74c94bd6ae5fcac334c29a99.png

slave2

187fdd8bf6ad423ea3f5388b526819af.png

slave3

7baaddb6107d4f0eb4b16ea720b01c26.png

(4)启动集群

在任意一个节点启动集群即可。

0575f289fedc4689a7708d322a092ea4.png

启动成功

a34e4e04969d4e86906ad5c662d9f36c.png

(5)测试集群

查看节点的哈希槽编号范围c5f1b482dd9e47a69471d9988fd5631e.png

 在10节点新建name键,会自动跳转到11节点进行存放

373c5dc6b1794d03a997ad3239baa7d9.png

 查看name键的哈希槽编号;查看name键的值,会根据键的哈希槽编号自动跳转到11节点进行获取c33453eb85394152ba5c6aa030edcf8e.png

 

 

三、问题

1.开启Redis群集失败

(1)报错

8b4d04ec0250425ba4f3ea6f1c77a2ac.png

(2)原因分析

 ① 检查端口是否开启成功
 ② 查看配置文件redis.conf群集设置是否开启

(3)解决方法

先查看端口,一开始我看到第一条记录,以为没问题,但其实有问题(监听的地址)

b2d1d20fccd94287b7ba2cb2cdd8909b.png

 然后查看配置文件redis.conf,也没什么问题,然后我再网上也查了,都是说这里的群集服务配置中cluster-enabled不是yes。

b83a7d575ba94b9a8f932260cc0bbddf.png

 75ee79fe9888498b9b394f9d99da0578.png

当第二次查看服务端口时,看到这里监听地址是0.0.0.0,感觉有点不对劲,还有/usr/local/redis/bin/redis-server地址也不是我刚创建的,发现在部署redis服务的时候使用脚本安装,脚本里是使用默认的服务目录启动。

349c32172e374702ac9c5e75eb4be63f.png

 找到问题了,我们将之前开的服务关闭,再开启集群

5fd3a819e63c4b10bf0b242bd36dd744.png

 再次启动成功

564b2b7fd4674eed9ed7d9794850a1f0.png

 a889493ee1f3453a9701ee2c3f710714.png

 (4)如遇到端口无法连接

添加6379端口映射

iptables -I INPUT -ptcp --dport 6379 -j ACCEPT

 

四、总结

三种模式需要注意修改不同的配置文件。

主从复制:

#配置文件
vim /etc/redis/6379.conf

#停止
/etc/init.d/redis_6379 stop   
 
#启动
/etc/init.d/redis_6379 start 

#重启
/etc/init.d/redis_6379 restart 

#查看状态
/etc/init.d/redis_6379 status   

哨兵模式:

#配置文件
vim /opt/redis-5.0.7/sentinel.conf

#节点启动哨兵
/opt/redis-5.0.7/redis-sentinel sentinel.conf &

#查看哨兵信息
redis-cli -p 26379 info Sentinel

cluster集群:

#配置文件
​​​​​​​vim /opt/redis-5.0.7/redis.conf

#节点启动redis服务
/opt/redis-5.0.7/redis-server redis.conf

#在任意一个节点启动集群
redis-cli --cluster create 192.168.204.40:6379 192.168.204.41:6379 192.168.204.42:6379 192.168.204.43:6379 192.168.204.44:6379 192.168.204.45:6379 --cluster-replicas 1

 

 

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

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

相关文章

HTML5+CSS3+JS小实例:翻滚吧乔巴自定义滑块控件

实例:翻滚吧乔巴自定义滑块控件 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" cont…

Docker 安装 Nacos

简介 Nacos 是一个轻量级的服务发现、配置管理和服务管理平台&#xff0c;它支持多种语言&#xff08;Java、Go、Node.js 等&#xff09;和多种协议&#xff08;HTTP、gRPC、DNS 等&#xff09;&#xff0c;能够帮助开发者构建微服务体系结构&#xff0c;简化了应用程序在不同…

入门前端监控

背景 前端监控是指通过一系列手段对Web页面或应用程序进行实时监控和数据采集&#xff0c;以了解页面或应用程序的性能状况、用户行为等等&#xff0c;并及时发现和解决潜在的问题。一个完整的前端监控平台可以包括&#xff1a;数据收集与上报、数据整理与存储、数据展示这里仅…

去重排序2——set

题目描述 输入 个正整数 ​ &#xff0c;按照从大到小的顺序输出不重复的数。 输入格式 第一行一个整数 n 。 第二行 个用空格隔开的正整数 ​ 。 输出格式 每行一个正整数&#xff0c;为从大到小排序后的不重复的数。 样例 #1 样例输入 #1 8 1 3 4 2 2 2 3 1样例输出 #1 4 3…

Linux Mint 21.2 “Victoria “现已可供下载

导读Linux Mint 21.2 “Victoria “发行版今天出现在该项目全球稳定镜像上&#xff0c;这意味着开发者将很快发布官方公告&#xff0c;通知想要下载最新Linux Mint版本的用户。 Linux Mint 21.2从2023年6月21日开始进行公开测试&#xff0c;这给了开发者足够的时间来修复剩余的…

redis(11):springboot中使用redis

1 创建springboot项目 2 创建pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:/…

同样是测试点工,他凭啥薪资比我高?

如果别人在功能测试方面薪资比你高那是因为做得比你好&#xff0c;别人功能测试做的比你好可能有以下几个原因&#xff1a; 测试策略和方法&#xff1a;别人可能采用了更有效的测试策略和方法&#xff0c;能够更全面地覆盖功能的各个方面。他们可能有更深入的测试计划和设计&a…

【云驻共创】CodeArts Repo ---高效代码协同开发之旅

目录 一、代码托管发展史 1.1 第一代 1.2 第二代 1.3 第三代 二、CodeArts Repo 介绍 二、CodeArts Repo 功能架构 2.1 研发协同 2.2 代码管理功能 2.3 代码存储特性 三、CodeArts Repo 技术能力 三、华为云代码托管技术发展历程 四、CodeAr…

《重构的时机和方法》一本值得程序员都认真读的书

写在前面 《重构的时机和方法》是一本关于软件开发中重构技术的书籍。它以独特的风格和内容优势&#xff0c;为读者提供了全面而易于理解的指导&#xff0c;帮助他们在实际项目中应用重构技术&#xff0c;提高代码质量和开发效率。这本书由两个不同风格的部分组成&#xff0c;…

前端面试题-浏览器相关

1 cookie和localSrorage、session、indexDB 的区别 从上表可以看到&#xff0c; cookie 已经不建议⽤于存储。如果没有⼤量数据存储需求的话&#xff0c;可以使⽤ localStorage 和 sessionStorage 。对于不怎么改变的数据尽量使⽤ localStorage 存储&#xff0c;否则可以⽤ se…

java项目之人事管理系统(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的人事管理系统。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&…

【力扣每日一题】2023.7.24 宝石与石头

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码运行结果&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 给我们一个字符串表示宝石的类型&#xff0c;再给我们一个字符串表示我们已经拥有的石头&#xff0c;问我们在石头中能找到多少宝…

一文助你快速提高嵌入式软件的代码质量【下】

一文助你快速提高嵌入式软件的代码质量 文章目录 一文助你快速提高嵌入式软件的代码质量&#x1f468;‍&#x1f3eb;前言1️⃣写直观的代码2️⃣写无懈可击的代码3️⃣正确处理错误4️⃣正确处理null指针5️⃣防止过度工程&#x1f647;文末小结 &#x1f468;‍&#x1f3eb…

Python 快速简单搭建HTTP本地服务器,内网通过浏览器访问

1 下载python https://www.python.org/downloads/ 2 安装python&#xff0c;安装时候选择把path加入电脑环境变量 3 由于python内建了简单http服务包&#xff0c;因此对于python来说&#xff0c;只需输入一行命令&#xff0c;就能轻松打开http服务。当然&#xff0c;要运行网页…

C++之栈和堆申请内存(一百六十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【复习16-18天】【我们一起60天准备考研算法面试(大全)-第二十四天 24/60】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

【复习42-44题】【每天40分钟,我们一起用50天刷完 (剑指Offer)】第三十四天 34/50

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

消息队列(一)-- RabbitMQ入门(1)

初识 RabbitMQ 核心思想&#xff1a;接收并转发消息。可以把它想象成一个邮局。 producer&#xff1a;生产者 queue&#xff1a;队列 consumer&#xff1a;消费者什么是消息队列 MQ&#xff08;Message Queue&#xff09;&#xff1a;本质是队列&#xff0c;FIFO先入先出&…

数字IC必学之《SKILL语法用户手册》建议收藏!

熟悉我的同学都知道&#xff0c;一直以来&#xff0c;我都会为大家分享IC各个岗位的学习资料。前端、后端、验证、版图等等&#xff0c;为大家分享了很多。当然也有一些IC入行需要学习的一些语言资料。去年在各个平台更新了一篇关于SKILL的资料&#xff1a; 《Skill入门教程》…

常用API学习07(Java)

Date 在jdk1.8之前,java中的日期和时间是一类的&#xff0c;从1.8之后对日期和时间体系重新做了规划&#xff0c;划分出一个新的包 - java.time包&#xff0c;这个包中包含了日期、时间、时区、日历、单位。 Date&#xff0c;是java中最老的日期和时间类&#xff0c;后续退出…