Redis 高可用 - 哨兵模式配置
![Redis高可用-哨兵模式配置](https://static001.geekbang.org/infoq/4f/4fdfe3e89f0dcac2c07cbb7e7d6ce9e1.png)
一、 Redis下载
我们以windows环境为例,下载地址
https://github.com/MicrosoftArchive/redis/releases
![](https://static001.geekbang.org/infoq/4a/4a4b2aa46db7ee87b70a53f74309a043.png)
Zip的免安装版,下载解压即可,解压之后如下图
![](https://static001.geekbang.org/infoq/3f/3fb00cba8f9245af5126acb2c0d6c66a.png)
二、 管理工具下载
https://redisdesktop.com/download
该款工具名叫RedisDesktopManager
这里有windows、也有mac等,根据需要下载即可
三、 单机模式
![](https://static001.geekbang.org/infoq/3f/3fb00cba8f9245af5126acb2c0d6c66a.png)
如使用默认配置,直接双击上图红色exe即可,
如是linux环境的话,命令应该也是redis-server
默认端口是6379,默认是没有密码的,默认只能本机连接访问,因为默认是绑定了127.0.0.1
以下章节将介绍,修改端口、密码、允许远程访问
四、 端口号修改
打开配置文件redis.windows.conf,如下图
![](https://static001.geekbang.org/infoq/2f/2f20473c4a3e76071ffcaa517f11f19a.png)
打开该文件,找到下图红色的地方,这里写的6379就是端口号
![](https://static001.geekbang.org/infoq/4c/4c199586911f4bbc50827cef904a5b7b.png)
将6379改为你想要的端口号,
然后在该文件夹下创建一个文件,如名为run6379.cmd,如下图
![](https://static001.geekbang.org/infoq/55/552c39daa4aea9721885f2d8b9abb70a.png)
在文件6379.cmd里写入一行命令
redis-server redis.windows.conf
如下图,即这个文件就是我们的新的启动脚本了
![](https://static001.geekbang.org/infoq/1f/1fec4aaee51bfb8a1521fa82269e2285.png)
以后启动,直接双击这个启动脚本即可,出现下图即可,红色的是你指定的端口号
![](https://static001.geekbang.org/infoq/6a/6a899e8b01f9f988d573c6880f8b5a15.png)
五、 设置密码
一般开发环境我们很少设置密码,生产一般会设置密码,
同样是redis.windows.conf文件,搜索requirepass找到下图
![](https://static001.geekbang.org/infoq/79/79e6008d3259fba574e48647cd5f7aeb.png)
这里是被注释掉的
例如我们改成下图,那么密码就是aaaa
![](https://static001.geekbang.org/infoq/ea/ea64436592bb01a8cb694087f0361587.png)
同样启动命名用redis-server redis.windows.conf
六、 允许远程访问
同样是redis.windows.conf文件,搜索bind 127.0.0.1
![](https://static001.geekbang.org/infoq/4b/4b9c2c6ed45ff3cb8965d7fcaacdab2e.png)
把这行注释掉,如下图
![](https://static001.geekbang.org/infoq/34/3430c27267c055a2709849684a1cc64f.png)
同样启动命名用redis-server redis.windows.conf
七、 高可用步骤一
该步骤是启动多台redis服务,一主多从
1. 启动master
用启动命名redis-server redis.windows.conf启动一个redis实例,该实例比如端口是6379,那么这个实例就是我们的master了
2. 配置slave
复制一份redis.windows.conf,比如重命名为redis.windows.conf-6479
修改redis.windows.conf-6479里的端口号,改为6479
并且找到
![](https://static001.geekbang.org/infoq/45/457b570002e46bbe0da803db1acff165.png)
在该行下写入
slaveof 127.0.0.1 6379
请注意空格,如下图
![](https://static001.geekbang.org/infoq/4b/4b9e9cedf75c70511779caabab257b00.png)
顾名思义,意思就是该6479实例,是主机127.0.0.1下6379实例的从属
改了这两处配置之后,启动该从的实例,命名如下
redis-server redis.windows.conf-6479
如下图,说明配置成功
![](https://static001.geekbang.org/infoq/da/da7c87d4f5fe74bac99d09aa3cb3ecb6.png)
依照上述步骤,我们可以再复制redis.windows.conf-6479,命名为redis.windows.conf-6579,并修改redis.windows.conf-6579里的端口改为6579,并用启动命名redis-server redis.windows.conf-6579启动6579的实例,这样就成了一主多从的模式
3. 验证主从是否生效
用工具连接上这三个实例,比如我们在6379的主添加一个key,看下6479和6579两个从是否有同样的key生成,还有就是在6379的主删除一个key或者修改一个key,看两个从是否同步删除或更新。
查看状态:
windows
![](https://static001.geekbang.org/infoq/11/11ff292fb05ce7042216acb94f636214.png)
LINUX
![](https://static001.geekbang.org/infoq/68/68e1b34975d66238efe44619430607ae.png)
八、 高可用步骤二
1. 配置哨兵
新建文件
sentinel.conf-26379
sentinel.conf-26479
sentinel.conf-26579
分别写入以下5行配置,注意端口号分别是26379、26479、26579
别的一样
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
#如果redis配置了密码,那这里必须配置认证,否则不能自动切换
sentinel auth-pass mymaster 123456
配置说明:
1. port :当前Sentinel服务运行的端口
2. sentinel monitor mymaster 127.0.0.1 6379 2
Sentinel去监视一个名为mymaster的主redis实例,这个主实例的IP地址为本机地址127.0.0.1,端口号为6379,而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
3. sentinel down-after-milliseconds mymaster 60000
指定了Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行
5. sentinel failover-timeout mymaster 180000如果在该时间(ms)内未能完成failover操作,则认为该failover失败
4. sentinel parallel-syncs mymaster 1
指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
2. 启动三个哨兵
命令是
redis-server sentinel.conf-26379 --sentinel
redis-server sentinel.conf-26479 --sentinel
redis-server sentinel.conf-26579 --sentinel
问题:
https://blog.csdn.net/liuchuanhong1/article/details/73844499?utm_source=blogxgwz8
3. 哨兵大致的原理图
![](https://static001.geekbang.org/infoq/46/46d3c3c2680bda8f70397fbbcbfd2279.png)
![](https://static001.geekbang.org/infoq/30/30d7238957807622308a9755f60a67ef.png)
意思大致就是主实例挂了之后,会将一个从实例提升为主实例,从而实现高可用
九、 项目中redis配置修改
默认单实例配置,如下图
![](https://static001.geekbang.org/infoq/d0/d0ff3227c4cd04d651615cf5a4b422cc.png)
哨兵模式,配置如下图
![](https://static001.geekbang.org/infoq/73/7382f59aeebf483615cdf10e061f86ad.png)
其中spring.redis.sentinel.master=mymaster
这个值mymaster是第八章第1节配置哨兵的时候,那几行配置里起的名字
十、 参考
http://bbs.redis.cn/forum.php?mod=viewthread&tid=715
http://redisdoc.com/topic/sentinel.html
https://www.cnblogs.com/LiZhiW/p/4851631.html
本文基本是windows环境的讲解,linux基本套路也差不多,就是启动参数加配置文件
建议:配置好了之后,尽量都做成启动脚本,直接启动脚本即可,这样更方便,脚本制作也很简单,参考第四章,windows做成.cmd文件即可,linux做成.sh文件
经过本人验证过的,整理于2020年4月30日 14:00 ,未经过本人允许,禁止转载,感谢尊重原创!
尊重原创VX:18658112168 交流 欢迎点赞留言哦!
版权声明: 本文为 InfoQ 作者【for】的原创文章。
原文链接:【http://xie.infoq.cn/article/a6e9f2f540019f34bf1580c57】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论