Redis笔记(7)

166 阅读4分钟

这是我参与8月更文挑战的第29天,活动详情查看:8月更文挑战; 注意:

相信细心的同学会发现原来的Master(191)恢复成Slave后,他的同步状态不OK,状态为master_link_status:down,这是为什么呢?

这是因为我们只设置了192和193的masterauth,这是用于同步master的数据,但是191一开始是master是不受影响的,当master转变为slave后,由于他没有设置masterauth,所以他不能从新的master同步数据,随之导致info replication的时候,同步状态为down,所以只需要修改redis.conf中的masterauth为jacquesh即可。

一般master数据无法同步给slave的方案检查为如下:

  1. 网络通信问题,要保证互相ping通,内网互通。
  2. 关闭防火墙,对应的端口开放(虚拟机中建议永久关闭防火墙,云服务器的话需要保证内网互通)。
  3. 统一所有的密码,通过逐台检查机器以防某个节点被遗漏。

查看相关信息

# 查看jacquesh-master下的master节点信息
sentinel master jacquesh-master
​
# 查看jacquesh-master下的slaves节点信息
sentinel slaves jacquesh-master
​
# 查看jacquesh-master下的哨兵节点信息
sentinel sentinels jacquesh-master

SpringBoot 集成Redis哨兵

配置

spring:
  redis:
    database: 1
    password: jacquesh
    sentinel:
      master: jacquesh-master
      nodes: 192.168.1.191:26379,192.168.1.192:26379,192.168.1.193:26379

redis集群

构建Redis集群,需要至少3个节点作为master,以此组成一个高可用的集群,此外每个master都需要配备一个slave,所以整个集群需要6个节点,这也是最经典的Redis集群,也可以称之为三主三从,容错性更佳。所以在搭建的时候需要有6台虚拟机。请各自准备6台虚拟机,可以通过克隆去构建,使用单实例的Redis 去克隆即可 。

特点

  1. 每个节点知道彼此之间的关系,也会知道自己的角色,当然他们也会知道自己存在与一个集群环境中,他们彼此之间可以交互和通信,比如ping pong。那么这些关系都会保存到某个配置文件中,每个节点都有,这个我们在搭建的时候会做配置的。
  2. 客户端要和集群建立连接的话,只需要和其中一个建立关系就行。
  3. 某个节点挂了,也是通过超过半数的节点来进行的检测,客观下线后主从切换,和我们之前在哨兵模式中提到的是一个道理。
  4. Redis中存在很多的插槽,又可以称之为槽节点,用于存储数据,这个先不管,后面再说。

注意:

  1. 集群也可以在单服务器构建,称之为伪集群,但是生产环境肯定是真的,所以建议用6台。
  2. 克隆后务必关闭Redis。

redis.conf 配置

# 开启集群模式
cluster-enabled yes
# 每一个节点需要有一个配置文件,需要6份。每个节点处于集群的角色都需要告知其他所有节点,彼此知道,这个文件用于存储集群模式下的集群状态等信息,这个文件是由redis自己维护,我们不用管。如果你要重新创建集群,那么把这个文件删了就行
cluster-config-file nodes-201.conf
# 超时时间,超时则认为master宕机,随后主备切换
cluster-node-timeout 5000
# 开启AOF
appendonly yes

启动6个redis实例

  1. 启动6台
  2. 如果启动过程出错,把rdb等文件删除清空

创建集群

#####
# 注意1:如果你使用的是redis3.x版本,需要使用redis-trib.rb来构建集群,最新版使用C语言来构建了,这个要注意
# 注意2:以下为新版的redis构建方式
###### 创建集群,主节点和从节点比例为1,1-3为主,4-6为从,1和4,2和5,3和6分别对应为主从关系,这也是最经典用的最多的集群模式
redis-cli --cluster create ip1:port1 ip2:port2 ip3:port3 ip4:port4 ip5:port5 ip6:port6 --cluster-replicas 1

slots:槽,用于装数据,主节点有,从节点没有

检查集群信息

redis-cli --cluster check 192.168.25.64:6380

Springboot配置集成redis集群

redis:
  port: 6379
  password: jacquesh
  cluster:
    nodes: 192.168.1.201:6379,192.168.1.202:6379,192.168.1.203:6379,192.168.1.204:6379,192.168.1.205:6379,192.168.1.206:6379