天天看点

Redis-3.0.7主从配置

一、原理

Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构。下面是关于redis主从复制的一些特点:

1.master可以有多个slave

2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构

3.主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求。

4.主从复制可以用来提高系统的可伸缩性,我们可以用多个slave 专门用于client的读请求,比如sort操作可以使用slave来处理。也可以用来做简单的数据冗余

5.可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。

二、配置

接上一篇文章,安装从redis服务器。

环境描述:

主redis:192.168.0.149 6379

从redis:192.168.0.148 6380

一、主从配置

1、将主从redis配置文件redis.conf中的aemonize no 改为 yes

2、修改从redis配置文件redis.conf中的port 6379 改为 6380,添加slaveof 192.168.0.149 6379 

3、启动主从服务,根据上一篇将启动命令写入别名到~/.bashrc文件,因此启动时就用简短的别名了:

      主redis:      

      [[email protected] /usr/local/redis/bin]#startRedis

     从redis:

     jfb-test:/usr/local/redis/bin # startRedis

4、测试写入数据同步

主redis:

Redis-3.0.7主从配置
Redis-3.0.7主从配置

从redis:这里启动客户端要带上端口号

Redis-3.0.7主从配置
Redis-3.0.7主从配置

5、默认是读写分离的

在从redis:

127.0.0.1:6380> set mykey thisismyslaveset

(error) READONLY You can't write against a read only slave.

127.0.0.1:6380> 

二、主从切换

1、停止主redis

[[email protected] ~]#stopRedis

[[email protected] /usr/local/redis/bin]#./redis-cli

Could not connect to Redis at 127.0.0.1:6379: Connection refused

2、将从redis设成主redis

jfb-test:/usr/local/redis/bin # ./redis-cli -p 6380 slaveof NO ONE

OK

3、测试从redis是否切换从主redis,这里能set值,说明就成了主,上面是从的时候默认是只读的不能定。

jfb-test:/usr/local/redis/bin # ./redis-cli -p 6380

127.0.0.1:6380> set name slavetomaster

OK

127.0.0.1:6380> get name

"slavetomaster"

4、原来的主redis恢复正常了,要重新切换回去

1)将现在的主redis的数据进行保存

127.0.0.1:6380> save

OK

2)将现在的主redis(148)根目录下dump.rdb文件拷贝覆盖到原来主redis(148)的根目录

jfb-test:/usr/local/redis/bin # scp dump.rdb [email protected]:/usr/local/redis/bin/

[email protected]'s password: 

dump.rdb  

3)启动原来的主redis(149)

[[email protected] /usr/local/redis/bin]#startRedis

[[email protected] /usr/local/redis/bin]#./redis-cli

127.0.0.1:6379> ping

PONG

4)将现在的主redis(148)中切换成slave,切换后可以发现使用set命令不行了,redis又变成只读的了。

jfb-test:/usr/local/redis/bin # ./redis-cli -p 6380 slaveof 192.168.0.149 6379

OK

jfb-test:/usr/local/redis/bin # ./redis-cli -p 6380 

127.0.0.1:6380> ping

PONG

127.0.0.1:6380> set name aftertransfer

(error) READONLY You can't write against a read only slave.

继续阅读