1、什么是Redis主从架构
Redis主从架构意思就是,主节点下面挂一些从节点,主节点主要用来读写数据,从节点主要用来备份数据,当然也可以读一些数据,大体结构如下图所示:
2、Redis主从架构搭建步骤
1、复制一份redis.conf文件。
2、修改相关的配置。 2.1、对外提供的端口号:
port 6380
2.2、这个文件是把pid进程号写入pidfile的配置文件,这里可以指定这个文件的路径,文件将自动生成。
pidfile /var/run/redis_6380.pid
2.3、这个Redis实例的日志记录文件名称。
logfile "6380.log"
2.4、这个目录就是比如说像上面的log文件、持久化文件等没有具体指定路径的一些过程文件都会放在这个路径下面。
dir /usr/local/redis‐5.0.3/data/6380
3、主从复制的主要配置代码 3.1、第一个命令,表示从节点的数据是从哪个主节点复制过来的,Redis 5.0之前使用slaveof
replicaof 192.168.0.60 6379
3.2、第二个命令,表示从节点的数据是只读的
replica‐read‐only yes
4、启动从节点
./redis-server redis-6380.conf
5、连接从节点
redis‐cli ‐p 6380
6、测试在6379实例上写数据,6380实例是否能及时同步新修改数据,同步成功。
遇到的问题:
1、从节点无法复制主节点的数据 注释掉主节点配置文件中的 bind 127.0.0.1,如下图所示: 原因:这个 bind 配置的意思是绑定的自己机器网卡的ip,如果有多个网卡可以配置多个ip,代表允许客户端可以通过哪些ip来访问,如果只配置了 127.0.0.1,那么从节点的 replicaof 配置就只能配置 127.0.0.1 来访问了,如果从节点布置在其它机器上,就访问不了了。
3、Redis主从节点复制数据的过程
3.1、数据全量复制
数据全量复制的意思是比如创建了一个新的从节点,从主节点将数据复制过去的流程就是下面这个。 1、先跟master建立socket长连接,psync命令同步数据。 2、主节点生成rdb文件过程。 2.1、收到psync命令执行bgsave生成一个rdb快照文件。 2.2、master在2.1生成rdb文件的时候,这个过程中进行的一些修改的操作都在这里面放着。 3、发送rdb数据。 4、清空从节点的数据并加载刚主节点生成的rdb数据。 5、send buffer,把备份过程中的数据传递过来。 6、将buffer的数据都写到从节点中。 7、后续的话,就主节点执行一条命令,主节点就通知从节点也执行一条命令。
3.2、数据部分复制
数据部分复制的请情况出现在从节点万一宕机了一段时间,过了一会我们又启动了从节点,这个时候我们希望同步的数据是宕机这段时间的数据,而不是全量的数据,所以就出现了数据部分复制。 1、断开连接,因为这个链接可以已经不能用,需要重新断开再次连接。 2、从节点宕机的这一段时间的数据操作都在这里面放着。 3、重新建立socket长连接。 4、发送一个psync(offest),offset是上次同步数据坐标的偏移量。 5、如果slave发送的offset在repl backlog中,则发送offset之后的数据给从节点,如果不在,则发送全量数据给从节点。 6、后续的话,就主节点执行一条命令,主节点就通知从节点也执行一条命令。
这里的repl backlog缓冲区的内存是可以在配置文件中配置的,如下图所示: repl-backlog-size 1mb 默认是1mb
4、主从复制风暴
主从复制风暴的意思是出现某一瞬间或者某一段时间,有大量的从节点要从主节点复制数据,主节点压力过大,所以我们可以将主从架构部署成如下树形结构,以缓解主节点压力,如下图所示:
|