复制的配置
两种方式实现
slaveof命令方式
# 复制
redis-6380> slaveof 127.0.0.1 6379
OK
# 取消复制。已有数据不清除
redis-6380> slaveof no one
OK
配置方式
slaveof 127.0.0.1 6379
slave-read-only yes
复制演示
我们在同一台机器上演示,6379作为主,6380作为从。
修改redis-6379.conf以下配置
daemonize yes
pidfile /var/run/redis-6379.pid
port 6379
logfile "6379.log"
# save 900 1
# save 300 10
# save 60 10000
dbfilename dump-6379.rdb
dir /opt/soft/redis/data
修改redis-6380.conf以下配置
daemonize yes
pidfile /var/run/redis-6380.pid
port 6380
logfile "6380.log"
# save 900 1
# save 300 10
# save 60 10000
dbfilename dump-6380.rdb
dir /opt/soft/redis/data
slaveof 127.0.0.1 6380
slave-read-only yes
验证master节点
# 启动master
redis-server redis-6379.conf
# 客户端连接
redis-cli
# 查看下信息
127.0.0.1:6379> info replication
role:master # 是master
connected_slaves:0 # 目前还没有从节点
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> exit
验证slave节点
# 启动6380
redis-server redis-6380.conf
# 客户端连接
redis-cli -p 6380
# 查看下信息
127.0.0.1:6380> info replication
role:slave # 是slave
master_host:127.0.0.1 # master的ip
master_port:6379 # master的端口
master_link_status:up # 与master连接正常
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:43
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6380> exit
验证主从复制
# 连接master
redis-cli
# 执行set命令
127.0.0.1:6379> set hello world
OK
# 退出master
127.0.0.1:6379> exit
# 连接slave
redis-cli -p 6380
# 执行get命令
127.0.0.1:6380> get hello
"world"
# 从节点不允许写操作
127.0.0.1:6380> set hello java
(error) READONLY you can't write against a read only slave.
127.0.0.1:6380> exit
查看下日志
cd ../data
# 查看master日志
cat 6379.log
# 查看slave日志
cat 6380.log
验证slaveof
# 连接slave
redis-cli -p 6380
# 取消主从复制
127.0.0.1:6380> slaveof on one
OK
# 验证6380已经不是slave了
127.0.0.1:6380> info replication
role:master # 变成master了
connected_slaves:0
master_repl_offset:549
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6380> exit
# 连接6379
redis-cli
# 执行命令
127.0.0.1:6379> mset a b c d e f g h
OK
127.0.0.1:6379> dbsize
(integer) 5
127.0.0.1:6379> exit
# 连接6380
redis-cli -p 6380
127.0.0.1:6380> dbsize
(integer) 1
# 清除数据
127.0.0.1:6380> flushall
OK
# 执行命令
127.0.0.1:6380> set abc6380 hello
OK
# 让6380重新成为6379的slave
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
# 验证6380之前设置的key-value已不存在了
127.0.0.1:6380> get abc6380
(nil)
# 验证slave数据又与master一致了
127.0.0.1:6380> dbsize
(integer) 5
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。