Redis-主从复制与哨兵机制

723 阅读2分钟

主从复制

作用

主从复制架构仅仅用来解决数据的冗余备份,从节点仅仅用来同步数据,但是它不能写数据

问题

无法解决master节点出现故障的自动故障转移

架构图

image.png

搭建流程

1.准备3台机器并修改配置文件(同一台机器也可以模式操作 使用不同的配置文件即可)
master
    port 6379
    bind 0.0.0.0
slave1
    port 6380
    bind 0.0.0.0
    slaveof masterip masterport
slave2
    port 6381
    bind 0.0.0.0
    slaveof masterip masterport

image.png

2.启动3台机器进行测试
./redis-server /root/master/redis.conf
./redis-server /root/slave1/redis.conf
./redis-server /root/slave2/redis.conf

哨兵机制

介绍

Sentinel是Redis的高可用解决方案:有一个或多个Sentinel实例组成的Sentinel系统可以监视任意多主服务器,以及这些主服务器下的从服务器,并在被监视的主服务器进入下线状态时(利用心跳机制),自动将下线主服务器属下的某个从服务器升级为新的主服务器。简单的说哨兵就是带有自动故障转移功能的主从架构。一组哨兵服务可以监视N多个主从架构。

问题:

1.单节点并发压力问题 2.单节点内存和磁盘物理上线

哨兵架构原理图

image.png

搭建哨兵架构

1.在主节点上创建哨兵配置
在Master对应的redis.conf同级目录下创建sentinel.conf文件 注意:配置文件名字必须是这个
2.配置哨兵 在sentinel.conf文件中填入内容:
sentinel monitor 被监控数据库名字(自己起一个)ip port 1
后面的1表示哨兵的个数
3.启动哨兵模式进行测试
redis-sentinel /root/sentinel/sentinel.conf
补充说明:redis-sentinel这个脚本文件可以从redis的源码目录中获取,启动哨兵必须先启动主从,
这个后面的数字2,是指当有两个及以上的sentinel服务检测到master宕机,才会去执行主从切换的功能。

使用SpringBoot来连接哨兵模式

# redis sentinel 配置
# master书写是使用哨兵监听的那个名称
spring.redis.sentinel.master=mymaster

# 连接的不再是一个具体redis主机,书写的是多个哨兵节点
spring.redis.sentinel.nodes=192.168.202.206:26379

注意:如果连接过程中出现如下错误:RedisConnectionException: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2)

解决方案:在哨兵的配置文件中加入bind 0.0.0.0 开启远程连接权限

image.png