什么是主从复制
在 Redis 复制的基础上,使用和配置主从复制非常简单,能使得从 Redis 服务器(下文称 slave)能精确得复制主 Redis 服务器(下文称 master)的内容。每次当 slave 和 master 之间的连接断开时, slave 会自动重连到 master 上,并且无论这期间 master 发生了什么, slave 都将尝试让自身成为 master 的精确副本。
这个系统的运行依靠三个主要的机制:
-
当一个 master 实例和一个 slave 实例连接正常时, master 会发送一连串的命令流来保持对 slave 的更新,以便于将自身数据集的改变复制给 slave,包括客户端的写入、key 的过期或被逐出等等。
-
当 master 和 slave 之间的连接断开之后,因为网络问题、或者是主从意识到连接超时, slave 重新连接上 master 并会尝试进行部分重同步:这意味着它会尝试只获取在断开连接期间内丢失的命令流。
-
当无法进行部分重同步时, slave 会请求进行全量重同步。这会涉及到一个更复杂的过程,例如 master 需要创建所有数据的快照,将之发送给 slave ,之后在数据集更改时持续发送命令流到 slave 。
小结:
简单来讲,就是一个主redis服务器,配置几个全量的从属服务器,实现服务的高可用,但无法实现扩容操作。也就是在AKF的X轴上扩展,不了解AKF的小伙伴可以补一下AKF的xyz三轴架构基础哦~(无基础不影响本文理解)。
无sentinel(哨兵)主从配置
无哨兵配置的主从模式,当master(主)挂掉后,需要人工手动下线master,并且人工指定新的master。
- Master(主)配置
无需对配置文件做任何更改,直接启动就行,这里使用56379这个端口作为master的端口
- slave(从)配置
...
# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 56480
# TCP listen() backlog.
...
# replicaof <masterip> <masterport>
replicaof 127.0.0.1 56379
# 这里是配置从服务器认56379为主
...
# security of read only replicas using 'rename-command' to shadow all the
# administrative / dangerous commands.
replica-read-only yes
# 开启只读模式,实现读写分离,写全部在master实现
再设置一台56481为从服务器。
启动服务器
启动主服务器
➜ test redis-server 56379.conf
启动从属服务器
➜ test redis-server 56479.conf
➜ test redis-server 56480.conf
连接服务器测试
主服务器
# 连接主服务器
➜ test redis-cli -p 56379
# 新建数据
127.0.0.1:56379> set k1 aaa
OK
127.0.0.1:56379> set k2 aaa
OK
127.0.0.1:56379> keys *
1) "k1"
2) "k2"
127.0.0.1:56379>
从服务器
# 连接从属服务器56479
➜ test redis-cli -p 56479
# 查看数据,发现同步一致
127.0.0.1:56479> keys *
1) "k2"
2) "k1"
127.0.0.1:56479> get k1
"aaa"
# 因为从属服务器开启了只读模式,所以无法插入数据
127.0.0.1:5647