主从和集群配置
主从架构
主节点负责读和写, 从节点只负责读
从节点配置:
replicaof 主节点IP 主节点端口号
进入
Redis
客户端之后, 就可以查看主从的配置信息
哨兵
如果主节点突然挂掉后(即单点故障), 这个时候就需要用到哨兵机制
在开启
Redis
的同时, 还会再次开启一个哨兵, 当主节点Redis
挂掉之后, 主节点的哨兵会结合从节点的哨兵进行一次投票, 在剩余的从节点中选出来一个Redis
节点来当主节点配置如下:
配置文件名字是
sentinel.conf
# 表示哨兵在后台启动 daemonize yes # 指定 master 节点的 IP 和端口号(在主节点的 sentinel.conf 中配置下面内容) sentinel monitor master节点名称(自己起的) localhost master节点的端口号 从节点的个数 # 指定 master 节点的 IP 和端口号(在从节点的 sentinel.conf 中配置下面内容) sentinel monitor master节点名称(自己起的) master节点的IP master节点的端口号 从节点的个数 # 哨兵每隔多久监听一次 Redis 架构, 单位是毫秒 sentinel down-after-milliseconds 上面起的 master 节点的名称 30000
启动哨兵
redis-sentinel 哨兵的配置文件
集群
Redis
集群在保证主从+哨兵的基本功能之外, 还能够提升Redis
存储数据的能力-Redis
集群是无中心的, 即没有主从Redis
集群之间有一个ping-pang
机制, 即Redis1
给Redis2
发了一个ping
, 那么Redis2
会给Redis1
返回一个pang
Redis
集群的节点数量必须是2n+1
个, 因为会有一个投票机制, 例如:当
Redis1
给Redis2
发送消息后, 没有收到Redis2
的回复, 此时Redis1
并不知道到底是自己挂掉还是Redis2
挂掉这个时候,
Redis1
会去找Redis3
, 让Redis3
再联系一下Redis2
, 看一下到底是谁的问题正因为这个投票机制, 所以集群节点的个数就必须是奇数个, 不能是偶数
Redis
集群中默认分配了 16384 个hash
槽, 在存储数据的时候, 会对key
进行crc16
算法, 并对 16384 进行取余, 根据最终的结果, 将key
和value
放到对应的节点中每一个
Redis
集群都维护着相应的hash
槽为了保证数据的安全性, 集群的每一个节点, 都会有一个从节点, 这个从节点并不做读操作, 当集群的节点进行了写操作后, 他们对应的从节点也会进行相应的写操作, 当集群的节点挂掉后, 对应的从节点会立即上位
可以单独针对集群中的某一个节点搭建主从架构从而来进一步提高查询效率
当集群中超过半数的节点挂掉后, 整个
Redis
集群就会挂掉
- 在
Redis
中的配置如下:# 指定端口号 port 端口号 # 开启 Redis 集群 cluster-enabled yes # 集群的信息文件 (文件名可以自定义) cluster-config-file nodes-6379.conf # 集群的对外IP地址 cluster-announce-ip IP地址, 可以写虚拟机的IP # 集群对外的port cluster-announce-port 端口号,即上面指定的端口号 # 集群的总线端口号 cluster-announce-bus-port 一般是 1 + 上面指定的端口号
- 启动
Redis
服务之后, 随便进入一个Redis
客户端, 用以下命令进入:redis-cli --cluster create 所有节点的ip:端口号(每个节点之间用空格隔开) --cluster-replicas 1 (最后的1表示的意思是每一个节点后面有一个从节点)
Redis
集群在启动的时候, 一定要保证Redis
中没有任何持久化数据
推荐文章: