【原创】Redis主从配置及主从自动切换
一、环境描述:
1、主Redis:127.0.0.1 6379
2、从Redis:127.0.0.1 63791
二、主从配置:
1、从Redis上下载其msi安装包【Windows系统下用的】,安装位置为命名为redis,作为主Redis,将主Redis配置文件redis.windows.conf中的daemonize no 改为 yes【Windows系统下是不管用的,但是这里还是提一下吧】
2、为了跟主Redis的数据划分开,将redis文件夹复制成一个新的,命名为redis_slave,将这个文件作为从Redis;
3、在redis_slave文件夹中,将redis.windows.conf复制一份,命名为redis.slave.conf,将此配置文件中的port 6379 改为 63791,并添加slaveof 127.0.0.1 6379
3、创建哨兵1:从Redis上下载zip包,解压,将里面的sentinel.conf复制出来,放到redis目录里面【当然,重新创建一个sentinel.conf也是可以的,内容并不复杂】,命名为sentinel-60001.conf,此命名方便开启多哨兵模式【示例中定义的是至少需要两个哨兵,由红色数字进行定义,绿色文字为两个哨兵不同的部分】,具体的配置示例(详细信息请查看《Redis及其Sentinel配置项详细说明》)
# Example sentinel.conf,【默认端口是26379,可以自定义】port 60001daemonize yesdir “C:\\apps\\redisAll\\redis”sentinel myid 003b90e5eb032dd62d9e5b17006b187a0a2150d9#主Redis服务器sentinel monitor mymaster 127.0.0.1 6379 2sentinel down-after-milliseconds mymaster 10000sentinel failover-timeout mymaster 20000sentinel parallel-syncs mymaster 1#从Redis服务器sentinel monitor myslave 127.0.0.1 63791 2sentinel down-after-milliseconds myslave 10000sentinel failover-timeout myslave 20000sentinel parallel-syncs myslave 1
4、创建哨兵2:复制sentinel-60001.conf,命名为sentinel-60002.conf,当然,后面的数字可以随意定义,怎么方便怎么来吧,只要跟其他端口不冲突就好,具体配置如下
# Example sentinel.confport 60002daemonize yesdir “C:\\apps\\redisAll\\redis”sentinel myid 003b90e5eb032dd62d9e5b17006b187a0a2150d0#主Redis服务器sentinel monitor mymaster 127.0.0.1 6379 2sentinel down-after-milliseconds mymaster 10000sentinel failover-timeout mymaster 20000sentinel parallel-syncs mymaster 1#从Redis服务器sentinel monitor myslave 127.0.0.1 63791 2sentinel down-after-milliseconds myslave 10000sentinel failover-timeout myslave 20000sentinel parallel-syncs myslave 1
三、执行命令:
1)启动主Redis: C:\apps\redisAll\redis>redis-server redis.windows.conf
2)启动从Redis: C:\apps\redisAll\redis_slave>redis-server redis.slave.conf
3)启动哨兵1:C:\apps\redisAll\redis>redis-server sentinel-60001.conf –sentinel
3)启动哨兵2:C:\apps\redisAll\redis>redis-server sentinel-60002.conf –sentinel
启动效果图如下:
四、同步效果测试:
1、主Redis执行命令如下【redis目录已经添加至环境变量中,所以,这里可以直接启动】:
C:\Users\40917>redis-cli -p 6379127.0.0.1:6379> set name helloOK127.0.0.1:6379> get name“hello”127.0.0.1:6379> get name^CC:\Users\40917>redis-cli -p 6379127.0.0.1:6379> get name“zhongguo”127.0.0.1:6379> set name beijing(error) READONLY You can‘t write against a read only slave.127.0.0.1:6379> set name beijingOK127.0.0.1:6379> get name“beijing”127.0.0.1:6379> set name shanghaiOK127.0.0.1:6379> get name“shanghai”127.0.0.1:6379>
2、从Redis执行命令如下:
C:\Users\40917>redis-cli -p 63791127.0.0.1:63791> set name nihao(error) READONLY You can‘t write against a read only slave.127.0.0.1:63791> get name“hello”127.0.0.1:63791> set name nihaoOK127.0.0.1:63791> get name“nihao”127.0.0.1:63791> set name zhongguoOK127.0.0.1:63791> get name“zhongguo”127.0.0.1:63791> get name^CC:\Users\40917>redis-cli -p 63791127.0.0.1:63791> get name“beijing”127.0.0.1:63791> set name shanghai(error) READONLY You can’t write against a read only slave.127.0.0.1:63791>
3、执行结果说明:
1)主Redis默认有读和写的权限,从Redis默认只有读的权限;
2)主Redis上设置好的数据,从Redis也可以获取到。
3)主Redis一旦故障关闭,从Redis会自动变为主Redis,即使原来的主Redis修复正常之后,但只能变成从Redis,除非原来的从Redis因故障关闭,原来的主Redis才能正式恢复身份。
执行流程效果图如下: