Redis 如何实现主从复制
什么是主从复制(Master/Slave)?我们的数据一般是存储在数据库中,为了保证数据的高可用,我们一般使用多台数据库服务器做集群。选中其中的一台作为主服务器(Master),其余的作为从服务器(Slave)。Master 上的数据更新后根据配置文件配置的策略,自动同步到 Slave 上,这就是主从复制。主从复制有什么作用?保证了数据的高可用。因为数据在多台服务器上存储了多份,即使一...
什么是主从复制(Master/Slave)?
我们的数据一般是存储在数据库中,为了保证数据的高可用,我们一般使用多台数据库服务器做集群。选中其中的一台作为主服务器(Master),其余的作为从服务器(Slave)。Master 上的数据更新后根据配置文件配置的策略,自动同步到 Slave 上,这就是主从复制。
主从复制有什么作用?
- 保证了数据的高可用。因为数据在多台服务器上存储了多份,即使一台机器宕掉了,其余的机器还可以顶上。
- 实现了读写分离。什么叫读写分离?写数据在 Master 上,读数据是在 Slave 上,这就叫读写分离。它缓解了以往 Master 既要处理读数据又要处理写数据的压力,Master 上负责写,Slave 上负责读,大大提升了数据库服务器的性能。
- 容灾恢复。当主机宕掉了之后,就没有办法向数据库中写数据了,怎么办?其余的 Salve 根据配置的策略,选出一台晋升为 Master,其余的 Slave 成为新 Master 的从机,当原来宕掉的 Master 恢复后,自动成为 Slave,实现了容灾恢复。
Redis 如何实现主从复制?
想要实现主从复制就必须开启多个 redis 服务,使用不同的 pid,指明不同的端口号,生成不同的 rdb 文件,产生不同的日志文件。
一、配置 redis.conf 配置文件
1. 将 redis 的配置文件复制多份:
2. 将它们都设置为后台进程:
3. 为它们配置不同的 pidfile(pid 文件名):
例:6379,6380,6381。
4. 为它们配置不同的 port(端口):
5. 为它们配置不同的 logfile(日志文件):
6. 为它们配置不同的 dbfilename(rdb文件名):
二、启动多个 redis-server 服务
开启三个 Linux 远程连接客户端,在每一个客户端上开启一个 redis 服务。
redis-cli -h 192.168.198.130 -p 6379
redis-cli -h 192.168.198.130 -p 6380
redis-cli -h 192.168.198.130 -p 6381
三、启动多个 redis-cli 客户端
在每个 Linux 终端上开启一个 redis-cli 客户端连接到不同端口号上的 redis 服务:
redis-cli -h 192.168.198.130 -p 6379
redis-cli -h 192.168.198.130 -p 6380
redis-cli -h 192.168.198.130 -p 6381
注:ip 地址那里输入的是在配置文件中绑定的 ip。
四、将其中的一个 redis 服务做为 Master,其余两个 redis 服务做为 Slave
已经开启的三个 redis 客户端:
在 6380 和 6381 两个客户端中输入 slaveof 192.168.198.130 6379 命令,使这两个 redis 服务成为 6379 的 slave。
然后,分别在每个 redis 客户端输入 info replication 命令,显示每个 redis 服务在这个小型集群里面扮演的角色:
- 6379 为 master:
- 6380 为 6379 的 slave:
- 6381 为 6379 的 slave:
五、演示主从复制的过程
我们在 master 上执行 set k1 v1
,预期的结果是在另外两个 slave 上 通过 get k1
命令可以获取对应的键值:
成功了!当然,我们还可以发现其实在 master 上也是可以 read 的。
Redis 实现主从复制的原理是什么?
知其然还要知其所以然。
一、master 复制数据给 slave 的原理如下:
-
slave 启动成功之后连接到 master 后会发送一个
sync
命令。 -
master 接收到这个同步命令之后启动后台的存盘进程,即将内存的数据持久化到 rdb 或 aof。
-
持久化完毕之后,master 将整个数据文件传送给 slave。
二、slave 接收 master 复制过来的数据方式有两种:
1. 全量复制:
slave 刚与 master 建立连接的时候,会将接收到的 master 发来的整个数据库文件存盘并加载到内存。
2. 增量复制:
slave 已经与 master 建立好连接关系的时候,master 会将收集到的修改数据的命令传送给 slave,slave 执行这些命令,完成同步。而不是再一次重新加载整个数据文件到内存。
当然,如果 slave 与 master 断开连接,再次重连的时候还是要加载整个数据文件的。
Redis 的主从复制的缺点
当 master 需要同步发送到 slave 上的数据量非常大的时候,会存在一定的时延。
当系统很繁忙或者 slave 机器数量非常多的时候也会使这个问题更加严重。
更多推荐
所有评论(0)