虽然很久之前就了解了Redis的哨兵机制,今天第一次尝试在多个服务器上部署多个Redis实例,并且设置了哨兵用来进行自动的主从切换。
一、部署Redis
在3台服务器上分别安装了Redis,Redis on Windows下载地址:https://github.com/MSOpenTech/redis/releases。
配置文件添加密码:
requirepass <密码>
masterauth <密码>
除了设置本实例的密码外,还需要输入master的密码(需要和本实例密码相同),所有实例需要设置相同的密码,以便进行主从切换。
需要注意的是,Redis从某个版本起,加入了一个protected-mode
的保护模式。启动保护模式的条件是protected-mode
开启,且没有设置bind
,且没有设置密码。我的Redis的实例部署在多个公网服务器下,所以加密码是必须的,另外需要注释掉默认的bind 127.0.0.1
,以使用公网IP。因为设置了密码,所以protected-mode
就无需进行改动,直接使用默认的就可以了。但是在后面哨兵的配置中的保护模式会有一个坑。
在3个Redis实例中挑选一个作为初始的master。在另外两个实例的配置文件中,加入slaveof
的配置。
二、配置Sentinel
创建哨兵的配置文件,内容如下:
port <端口号>
sentinel monitor redis-master <Master IP> <Master端口号> 2
sentinel down-after-milliseconds redis-master 5000
sentinel failover-timeout redis-master 900000
sentinel parallel-syncs redis-master 2
sentinel auth-pass redis-master <密码>
logfile "LogFiles/monkeyrun-sentinel.log"
protected-mode no
具体参数的含义不再赘述,可以Google。
这里需要加上最后一行protected-mode no
,把哨兵的保护模式关掉。因为哨兵目前不支持设置密码,如果不加这行就会启动保护模式了,外网无法访问,会出现哨兵与哨兵之间互相认为对方不可用的情况。
三、一些命令
因为是在Windows下,有些命令可以通过批处理文件方便处理。将如下代码分别保存为.bat文件,可以直接双击执行。默认安装完会新建一个名叫Redis的服务,我不喜欢这个名字,可以先卸载这个默认的Redis服务,然后重新安装自己命名的服务。这样的好处是以后可以在一台服务器上安装多个不同用途的Redis实例,以便区分。
1、安装Redis服务
redis-server --service-install redis-service-monkey-run.conf --service-name redis-service-monkey-run
2、启动Redis服务
redis-server --service-start --service-name redis-service-monkey-run
3、停止Redis服务
redis-server --service-stop --service-name redis-service-monkey-run
4、卸载Redis服务
redis-server --service-stop --service-name redis-service-monkey-run
redis-server --service-uninstall --service-name redis-service-monkey-run
5、安装Sentinel服务
redis-server --service-install sentinel-monkey-run.conf --service-name redis-sentinel-service-monkey-run --sentinel
6、启动Sentinel服务
redis-server --service-start --service-name redis-sentinel-service-monkey-run
7、停止Sentinel服务
redis-server --service-stop --service-name redis-sentinel-service-monkey-run
8、卸载Sentinel服务
redis-server --service-stop --service-name redis-sentinel-service-monkey-run
redis-server --service-uninstall --service-name redis-sentinel-service-monkey-run
四、其他
验证了一下哨兵的主从切换,很爽!
睡觉!
2016年10月23日凌晨于老家