redis之哨兵模式
一、什么是哨兵模式
反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。
二、实现哨兵模式
我们还是使用6379,6380,6381机器来演示。
主机:6379
从机:6380,6381
2.1 创建sentinel.conf文件
在/usr/local/redis/conf下创建一个名为sentinel.conf的文件,并写入内容
sentinel monitor 被监控数据库名字(自己起一个名字) 127.0.0.1 6379 1
上面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多的redis成为主机
注意:这里要监控的是主机
2.2 启动哨兵
这是我的目录:
bin下面就是redis的一些启动脚本。
config下是我copy出来的redis配置文件和刚刚创建的sentinel.conf
到config目录下执行命令启动哨兵:
../bin/redis-sentinel sentinel.conf(注意:这里的命令根据不同的redis安装目录也是会不相同的。)
好的,如果看到以上打印出得图就是启动成功。可以看到已经在监控6379了,而且还找到了6379的从机器6380和6381。
2.3 哨兵测试
2.3.1 原有的master挂了,会怎么样?
手动让6379挂掉,看下哨兵会怎么处理。
模拟6379宕机:(手动让6379宕掉)
稍等一会,看到哨兵日志:
这里已经检测到6379主机宕机,那么就会投票选出一个主机,这里可以看到的是选出的主机是6380。
6380:
6381:
以上截图已经可以看到,6380已经成了主机,而且6381已经改变了关联的主机,改成选举出来的6380了。
总结出:如果主机挂掉了,那么会在从机上投票选举出主机,并且修改剩余的从机关联到新的主机中。
2.3.2 如果之前的master重启回来,会不会双master冲突?
重新启动6379端口的redis,查看它的信息,看一看是什么情况:
可以看到6379变成了slave,主机是6380。
而且启动6379时,哨兵打印出了一条日志:
意思:将从机6379关联到6380上。
总结:之前的master重新启动后,并不会冲突,会以从机的身份来关联主机。
注意:一组sentinel能同时监控多个Master
2.4 复制的缺点
2.4.1 复制的延迟
由于所有的写操作都是先在master上操作,然后同步更新到slave上,所以从master同步到slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,slave机器数量的增加也会使这个问题更加严重。