Redis集群部署

2021-04-28  本文已影响0人  突击手平头哥

Redis集群部署

Redis集群有多种部署模式,包括主从模式、哨兵模式、集群模式


主从模式

  主从模式可以是一主一从或者一主多从,主从模式并不是分布式分片存储,而是每一台设备都拥有全部的数据;
  实际的运行中都是直接连接到主机上工作,备机通常只是做个数据备份而已。

主从模式配置

主机

masterauth pass

  主机只需要设置一个密码,从机需要此密码用来连接主机

从机

# 主节点的地址
slaveof 127.0.0.1 6379
# 主节点的密码
masterauth master-password
# 设置从机仅可读
slave-read-only yes

主从模式的特点

哨兵模式

  哨兵模式下的Redis节点部署实际上和主从模式一致,只是多了哨兵节点,哨兵节点也可以看作是某种意义上的Redis节点;
  哨兵节点的作用就是监控主节点的健康,哨兵模式和主从模式唯一的区别就是:主节点挂掉后会自动将从机升级为主机工作

哨兵模式配置

哨兵模式下主从节点的配置、部署不变,配置上只是要加上哨兵节点的配置而已

配置

#配置端口
port 6379
#以守护进程模式启动
daemonize yes
#pid的存放文件
pidfile /var/run/sentinel.pid
#日志文件名
logfile "sentinel.log"
#存放备份文件以及日志等文件的目录
dir "/opt/sentinel/data"

# 监听主节点,mymaster是主节点的名字(自己取的),哨兵是可以监听多个主节点的
# 2表示至少需要两个或两个以上的哨兵认为主机挂掉后才是挂掉
sentinel monitor mymaster 192.168.11.128 6379 2
# Redis服务器的密码
sentinel auth-pass mymaster 123456

#30秒ping不通主节点的信息,主观认为master宕机
sentinel down-after-milliseconds mymaster 30000
#故障转移后重新主从复制,1表示串行,>1并行
sentinel parallel-syncs mymaster 1
#故障转移开始,三分钟内没有完成,则认为转移失败
sentinel failover-timeout mymaster 180000

启动哨兵

redis-sentinel sentinel.conf

哨兵模式的工作

  哨兵模式下的主从节点的工作状态并没有改变,只是主从可能会自动切换;所以应该正常工作流程应该是先连接到哨兵节点查询主从节点地址,再直接连到节点上开始执行命令。

  哨兵节点实际上就是Redis的一个服务器实例,使用redis-cli直连就可以

SENTINEL masters
# 查询所有监控的主节点
SENTINEL slaves mymaster
# 查询mymaster这个主节点的从机
SENTINEL get-master-addr-by-name mymaster
# 查询mymaster的地址

  在查询到地址之后的处理就和Redis主从模式完全一致

集群模式

集群模式是真正的分布式部署,Redis采用一致性HASH将数据分片存储到各个Redis节点中;

哨兵模式的特点

哨兵模式的配置

集群配置

#配置端口
port 6379
#以守护进程模式启动
daemonize yes
#pid的存放文件
pidfile /var/run/redis.pid
#日志文件名
logfile "redis.log"
#存放备份文件以及日志等文件的目录
dir "/opt/redis/data"

cluster-enabled yes                     #开启集群
cluster-config-file nodes-6379.conf     #集群配置信息文件,由Redis自行更新,不用手动配置。
cluster-node-timeout 15000              #节点互连超时时间,毫秒为单位


cluster-slave-validity-factor 10        #在进行故障转移的时候全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了导致数据过于陈旧,不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。判断方法是:比较slave断开连接的时间和(node-timeout * slave-validity-factor)+ repl-ping-slave-period如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移

cluster-migration-barrier 1             #master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数被设为2,那么只有当一个主节点拥有2个可工作的从节点时,它的一个从节点才会尝试迁移。

cluster-require-full-coverage yes       #集群所有节点状态为ok才提供服务。建议设置为no,可以在slot没有全部分配的时提供服务

  所有的节点全部按此配置即可

启动服务

redis-server redis.conf

  启动Redis节点,主备的关系由集群控制,这里只需要启动节点即可

redis-cli -a 123456 --cluster create 127.0.0.1:7001 ... 127.0.0.1:7006 --cluster-replicas 1
# -a 指定密码
# create 后指定6个节点的地址
# --cluster-replicas 指定主节点要有几个从节点

  创建一个6个节点的集群,每个主节点都要有一个从节点

redis-cli -c -h 127.0.0.1 -p 7001 -a 123456                  # -c,使用集群方式登录

  连接到集群当中去

CLUSTER NODES                   # 查看节点信息
CLUSTER MEET 127.0.0.1 7007     # 动态添加节点

CLUSTER FORGET 1a1c7f02fce87530bd5abdfc98df1cffce4f1767
# 从集群中删除节点,FORGET后带的ID可以从CLUSTER NODES的结果中看到



\color{red}{2021年4月28日23点28分,这里只做了简单的说明,后续补充一些图片和说明,有时间再分析一下实现机制}

上一篇下一篇

猜你喜欢

热点阅读