在 Redis 复制的基础上,使用和配置主从复制非常简单,能使得从 Redis 服务器能精确得复制主 Redis 服务器的内容。每次当 slave 和 master 之间的连接断开时, slave 会自动重连到 master 上,并且无论这期间 master 发生了什么, slave 都将尝试让自身成为 master 的精确副本。
这个系统的运行依靠三个主要的机制:
- 当一个 master 实例和一个 slave 实例连接正常时, master 会发送一连串的命令流来保持对 slave 的更新,以便于将自身数据集的改变复制给 slave , 包括客户端的写入、key 的过期或被逐出等等。
- 当 master 和 slave 之间的连接断开之后,因为网络问题、或者是主从意识到连接超时, slave 重新连接上 master 并会尝试进行部分重同步:这意味着它会尝试只获取在断开连接期间内丢失的命令流。
- 当无法进行部分重同步时, slave 会请求进行全量重同步。这会涉及到一个更复杂的过程,例如 master 需要创建所有数据的快照,将之发送给 slave ,之后在数据集更改时持续发送命令流到 slave 。
Redis使用默认的异步复制,其特点是低延迟和高性能,是绝大多数 Redis 用例的自然复制模式。但是,从 Redis 服务器会异步地确认其从主 Redis 服务器周期接收到的数据量。
Redis支持一主多从以及多级串联
一、机器规划
192.168.0.80 Master
192.168.0.81 Slave
二、更改配置文件
Master:
bind 192.168.0.80 daemonize yes #后台运行 appendonly yes #开启AOF持久化 requirepass [email protected]#456 #密码
Slave:
bind 192.168.0.81 slaveof 192.168.0.80 6379 #连接Master masterauth [email protected]#456 #Master密码 daemonize yes #后台运行 appendonly yes #开启AOF持久化
三、重启服务后登录验证
Master:
# redis-cli -h 192.168.0.80 -p 6379 -a '[email protected]#456' 192.168.0.80:6379> SET name1 adc OK
Slave:
# redis-cli -h 192.168.0.81 -a '[email protected]#456' Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 192.168.0.60:6379> keys * 1) "name1"
四、查看节点状态:
Master:
192.168.0.80:6379> info replication # Replication role:master connected_slaves:1 slave0:ip=192.168.0.81,port=6379,state=online,offset=56882,lag=1 master_replid:099bf0e04307f09cf1c4b662dba0ad8e9f024aa0 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:56882 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:56882
Slave:
192.168.0.81:6379> info replication # Replication role:slave master_host:192.168.0.80 master_port:6379 master_link_status:up master_last_io_seconds_ago:4 master_sync_in_progress:0 slave_repl_offset:714 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:099bf0e04307f09cf1c4b662dba0ad8e9f024aa0 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:714 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:714