Redis3.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.1.228 6379

从redis:192.168.1.229 6380

一、主从配置

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

vi /usr/local/redis/bin/redis.conf

注意:改为守护进程后,界面启动就没有图形效果!

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

50行  6380

最后一行 slaveof 192.168.1.228 6379

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

     主redis(此时没有图形界面):      

    #startRedis

     从redis:

     # startRedis

 

4、测试写入数据同步

 

主redis:

[root@master ~]# cd /usr/local/redis/bin

[root@master bin]# ./redis-cli -h 127.0.0.1 -p 6379

127.0.0.1:6379> set hello world

OK

127.0.0.1:6379> get hello

"world"

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

[root@slave1 ~]# cd /usr/local/redis/bin

 [root@slave1 bin]# ./redis-cli -h 127.0.0.1 -p 6380

127.0.0.1:6380> get hello

"world"

 

 

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

 

#stopRedis

cd /usr/local/redis/bin

./redis-cli

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

2、将从redis设成主redis

cd /usr/local/redis/bin

# ./redis-cli -p 6380 slaveof NO ONE

OK

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

[root@slave1 bin]# cd /usr/local/redis/bin

[root@slave1 bin]# ./redis-cli -p 6380 slaveof NO ONE

OK

[root@slave1 bin]#  ./redis-cli -p 6380

127.0.0.1:6380> set name slavetomaster

OK

127.0.0.1:6380> get name

"slavetomaster"

127.0.0.1:6380>

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

 

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

 

127.0.0.1:6380> save

OK

 

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

 

[root@slave1 bin]# scp /usr/local/redis/bin/dump.rdb [email protected]:/usr/local/redis/bin/

dump.rdb 

 

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

#startRedis

#./redis-cli

127.0.0.1:6379> ping

PONG

 

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

[root@slave1 bin]# cd /usr/local/redis/bin

[root@slave1 bin]#  ./redis-cli -p 6380 slaveof 192.168.1.228 6379

OK

[root@slave1 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.

127.0.0.1:6380>

 

猜你喜欢

转载自blog.csdn.net/w892824196/article/details/86518898