4

复制的配置

两种方式实现

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

clipboard.png

# 查看slave日志
cat 6380.log

clipboard.png

验证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

全量复制和部分复制

故障处理

开发运维常见问题


zhutianxiang
1.5k 声望327 粉丝