ps:若主宕机了,从会一直等待(后面会用 哨兵解决这个问题)


首先启动redis服务,包括主库与从库

Redis挂了怎么办 redis主挂了之后的处理流程_端口号

各个服务器上的redis服务均启动正常,那么接下来就是模拟redis主库宕机了

shutdown表示关闭redis服务 
exit表示退出redis连接


Redis挂了怎么办 redis主挂了之后的处理流程_redis_02

那么接下来就是查看各个redis从库的角色以及连接状态了

Redis挂了怎么办 redis主挂了之后的处理流程_端口号_03


我们可以看到,在从库中还是可以拿到数据的,说明redis主库挂了并不会影响redis从库的运行。但是看到master_line_status为down的时候,就知道这个时候的主库是挂了的,因为一开始的状态是up

那么如果redis主库的服务有重新启动了呢?redis从库会不会再次连接上主库?


Redis挂了怎么办 redis主挂了之后的处理流程_Redis挂了怎么办_04

首先启动redis主库,然后写入数据,这个时候发现从库的master_line_status的连接状态都是up了,并且可以取到在redis主库中写入的数据

那么这样子是不是很不好啊,假如是电商网站,然后突然间redis主库挂了,那么这个时候就只有redis从库服务在运行了。但是redis从库是只读的是不是就无法写入数据了,那么客户就无法下订单了。那么有没有什么方法,就是在redis主服务挂了之后我再从redis从库服务中挑选出一个比较优秀的来接替主库的位置

方案一:使用命令的方式


那么接下来呢我们就学习一个新的命令



slaveof no one


Redis挂了怎么办 redis主挂了之后的处理流程_数据_05




可以看到,命令执行之后,就立刻趁机上位了,那么另外一台从库是不是也要换一个新的老大啊


Redis挂了怎么办 redis主挂了之后的处理流程_Redis挂了怎么办_06

但是这个时候原来的redis主库有杀回来了呢?这个时候是不是另外两个就是有两个redis主库的服务了,但是原来的从库并不会回到这个主库上去,而是后面那两台自立规则。那么这个时候是不是很不好啊,我们想要的是只有一个redis主库服务,那么有没有什么解决方法呢?

那么接下来就是终极的解决方案



方案二:哨兵模式

哨兵模式是反客为主的自动版,能够jiankong 后台主机是否故障,如果故障了根据投票数自动将从库转换为主库

首先恢复原来的一主N从的环境


Redis挂了怎么办 redis主挂了之后的处理流程_端口号_07


接下来就是配置了

Redis挂了怎么办 redis主挂了之后的处理流程_数据_08

编辑sentinel.conf文件, sentinel monitor 被监控数据库名字(自己起名字) 127.0.0.1 6379 1【上面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多少后成为主机】 

Redis挂了怎么办 redis主挂了之后的处理流程_数据_09


接下来就是启动哨兵进行监控了,命令

redis-sentinel sentinel.conf



Redis挂了怎么办 redis主挂了之后的处理流程_Redis挂了怎么办_10



那么这个时候就是哨兵开始监控了

首先模拟主库宕机,关闭主库,并且观察哨兵输出的日志并且两个从库角色的变化

Redis挂了怎么办 redis主挂了之后的处理流程_数据_11

(这里需要等待片刻才可看到结果)大家可以看到,端口号为6381的redis从库立马变成了主库,而且端口号为6380的redis从库就跟着端口号为6381混了。

那么问题来了,如果原来的老大回来了呢,6381会不会让位呢?

Redis挂了怎么办 redis主挂了之后的处理流程_数据_12

(这里也许等待片刻)那么结果是原来的redis服务就变成从库了,连接着现在的端口号为6381的主库了。

哨兵模式的缺点:由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。


ps:java 该如何实现呢?后面继续