【原创】Redis主从配置及主从自动切换

【原创】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 60001
daemonize yes
dir “C:\\apps\\redisAll\\redis”
sentinel myid 003b90e5eb032dd62d9e5b17006b187a0a2150d9
#主Redis服务器
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 20000
sentinel parallel-syncs mymaster 1
#从Redis服务器
sentinel monitor myslave 127.0.0.1 63791 2
sentinel down-after-milliseconds myslave 10000
sentinel failover-timeout myslave 20000
sentinel parallel-syncs myslave 1

4、创建哨兵2:复制sentinel-60001.conf,命名为sentinel-60002.conf,当然,后面的数字可以随意定义,怎么方便怎么来吧,只要跟其他端口不冲突就好,具体配置如下

# Example sentinel.conf
port 60002
daemonize yes
dir “C:\\apps\\redisAll\\redis”
sentinel myid 003b90e5eb032dd62d9e5b17006b187a0a2150d0
#主Redis服务器
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 20000
sentinel parallel-syncs mymaster 1
#从Redis服务器
sentinel monitor myslave 127.0.0.1 63791 2
sentinel down-after-milliseconds myslave 10000
sentinel failover-timeout myslave 20000
sentinel 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 6379
127.0.0.1:6379> set name hello
OK
127.0.0.1:6379> get name
“hello”
127.0.0.1:6379> get name
^C
C:\Users\40917>redis-cli -p 6379
127.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 beijing
OK
127.0.0.1:6379> get name
“beijing”
127.0.0.1:6379> set name shanghai
OK
127.0.0.1:6379> get name
“shanghai”
127.0.0.1:6379>

2、从Redis执行命令如下:

C:\Users\40917>redis-cli -p 63791
127.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 nihao
OK
127.0.0.1:63791> get name
“nihao”
127.0.0.1:63791> set name zhongguo
OK
127.0.0.1:63791> get name
“zhongguo”
127.0.0.1:63791> get name
^C
C:\Users\40917>redis-cli -p 63791
127.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才能正式恢复身份。

执行流程效果图如下:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据