16boke - 一路博客

redis分布式环境主从配置及手动切换

前一篇文章讲解了redis的伪分布式的环境搭建,为了应各位朋友的要求写一篇真分布式环境的搭建以及手动切换的操作。下面内容只是讲解分布式环境下redis的配置的注意事项,过程比较简单,暂时还未使用到sentinel来实现自动主从切换的高可用配置,关于sentinel的配置后续也会有相应的文章推出。

在实际公司的生产环境上如果要使用redis,一般也不会直接操作redis,而是采用开源的redis集群架构,例如codis,redis cluster,twemproxy来实现分布式集群的管理,结合所在公司的项目我们选用的是codis,后续也会介绍codis的详情、部署以及运维等,敬请期待!

一、环境概述

192.168.28.154为主,启动一个redis实例,端口号为8381

192.168.16.234为从,启动一个redis实例,端口号为8381

二、配置文件

1、master

clipboard.png

8381.conf的内容如下:

daemonize yes

port 8381

logfile /soft/redis/logs/8381.log

dbfilename 8381.rdb

dir /soft/redis/dumps/

2、slave

slave的配置文件、日志文件、持久化文件路径与master一样

8381.conf的内容如下:

daemonize yes

port 8381

logfile /soft/redis/logs/8381.log

dbfilename 8381.rdb

dir /soft/redis/dumps/

slaveof 192.168.28.154 8381

其中从的配置文件中需要加上:slaveof 192.168.28.154 8381

三、启动测试

启动slave:redis-server 8381.conf

clipboard.png

启动master:redis-server 8381.conf

clipboard.png

从这里可以看出已经连接到slave了,并进行了一次同步

1、使用redis-cli连接master

clipboard.png

2、在master机器上使用redis-cli来连接slave

clipboard.png

发现可以连接,但是执行get a的时候报错了,这就是真分布式环境下最有名的错误,注意只在redis3.2以上版本出现。从报错信息中可以看到slave实例是以受保护模式来启动,这种模式下只允许在本机连接redis,如果在其它机器下连接就不允许。解决办法也说明了:

1)、在slave上使用命令“CONFIG SET protected-mode no”

2)、修改slave的配置文件,增加"protected-mode no"

3)、在slave的配置文件中增加ip地址的绑定,或者增加权限密码,只允许指定ip的客户端访问

下面我的使用第二种方式来修改slave的配置文件,为了一劳永易我们把master的配置文件也修改了。注:这是生产环境下最常用的配置方式

增加protected-mode no如下:

clipboard.png

然后再到master通过redis-cli来访问slave,使用get a发现有结果返回

clipboard.png

至此为止主从配置完成。

四、主从手动切换

1、在slave上修改role的状态为master:

clipboard.png

发现已经改为master了

2、在master上修改role为slave:slaveof 192.168.16.234 8381

查看状态:

clipboard.png

至此修改完成,主要是对slaveof命令的使用,详细的切换过程大家可以看前一篇文章。


Redis