redis3.0 主从

redis3.0 主从

两个实例:6000为主,6001为从。
主实例配置如下:
# replication
repl-diskless-sync no
repl-ping-slave-period 10
repl-timeout 60
repl-backlog-size 100mb
repl-backlog-ttl 3600
# 参数解释
repl-diskless-sync: 主从同步数据的方式,no表示使用磁盘(先生成rdb文件然后同步到salve进行加载),ye表示使用网络的方式无需磁盘参与,适合网络质量好磁盘读写慢的环境。
repl-timeout: 主从关系存活的超时时间,必须必repl-ping-slave-period大,否则没来得及做存活检查就超时了。
repl-ping-slave-period:master向slave发送存活检查ping的时间间隔。
从实例配置如下:
# replication
slave-read-only yes
slaveof 127.0.0.1 6000
masterauth 8a6715
主从配置完后,从库只能读无法响应写入的请求:
127.0.0.1:6001> set key2 value2 
(error) READONLY You can't write against a read only slave.

手动主从切机

在主宕机时,需要先手动关闭主库,再在从机上关闭主从关系,从库便可写入
127.0.0.1:6001> slaveof NO ONE
OK
127.0.0.1:6001> set key100 value100
OK
127.0.0.1:6001> get key100
"value100"
127.0.0.1:6001> 
假设原先的主库ok了,需要切回去。
将从库的数据save为 *.rbd 文件,拷贝到主库的数据目录中覆盖原有的,并启动主库
    127.0.0.1:6001> save
    OK
    127.0.0.1:6001> quit
    [root@baseos-1_192.168.31.140 ~]# cp /data/database/redis/redis6001.rdb  /data/database/redis/redis6000.rdb 
    cp: overwrite `/data/database/redis/redis6000.rdb'? y
    [root@baseos-1_192.168.31.140 ~]# /root/redis6000.start
    [2017-06-16 11:06:40] Redis-3.2.7 start ok, port: 6000.
    [root@baseos-1_192.168.31.140 ~]#./redis6000.login  
    127.0.0.1:6000> keys *
    1) "key_6000_new"
    2) "key_6001"
    3) "key100"
    4) "key_6000"
    5) "key_1"
    127.0.0.1:6000> 
从库重新做主从
[root@baseos-1_192.168.31.140 ~]# ./redis6001.login 
127.0.0.1:6001> slaveof 127.0.0.1 6000
OK
127.0.0.1:6001> set aa bb
(error) READONLY You can't write against a read only slave.
127.0.0.1:6001> quit
[root@baseos-1_192.168.31.140 ~]# ./redis6000.login  
127.0.0.1:6000> keys *
1) "key_6000_new"
2) "key_6001"
3) "key100"
4) "key_6000"
5) "key_1"
127.0.0.1:6000> set new_key new_value
OK
127.0.0.1:6000> quit
[root@baseos-1_192.168.31.140 ~]# ./redis6001.login 
127.0.0.1:6001> get new_key
"new_value"
127.0.0.1:6001>
原文地址:https://www.cnblogs.com/wshenjin/p/7027525.html