redis主从模式

主从模式原理

主从模式(Master-Slave)是一种常见的软件架构方式,当主节点服务器写入数据时,同时也会将数据同步至从节点服务器,通常情况下,主节点负责写入数据,而从节点负责读取数据。

redis主从示意图:
redis主从示意图

默认情况下,主节点可以读写,从节点只能读,禁止写操作。不修改配置让从节点支持写操作是没有意义的,因为首先写入的数据不会同步到其他节点,其次当主节点修改相同的数据时,从节点的数据会被覆盖。主节点挂机后,redis不会向外界提供写服务,因为剩下的从节点不会成为主节点。主节点挂机后,不会影响从节点的读取。主节点启动后,Redis将再次向外界提供写服务。当从节点挂起时,不会影响其他从节点的读取和主节点的读写。重启后,数据将从主节点同步。

redis主从数据同步

主从模式类似于数据库的读写分离机制,主要有以下特点:

1.主数据库可以进行读和写操作,而从数据库一般只允许读操作,主数据库写入数据后会将数据同步到从数据库,所以保证了无论从哪个数据库读取数据都是一致的。

2.其中一个slave挂了(如上图6380),不影响主数据库的读写操作,如果有不止一个slave则不影响整个集群系统的运行,如果slave全部挂掉则所有读写压力均放到主数据库上。

3.主数据库挂了(如上图6379),不影响从数据的读操作,整个系统则不提供写操作,但是读数据操作不受影响。

redis主从实现

配置方式实现主从

1、cd redis目录 新建一个redis_cluster目录

mkdir redis_cluster

2、把原redis目录下的redis.conf文件复制到 redis_cluster

cp -r redis.conf redis_cluster/

3、修改文件名

cd redis_cluster
mv redis.conf  master_6379.conf

4、在复制一份Slave节点的配置

cp master_6379.conf  slave_6380.conf

5、修改从节点配置

port 6380
slaveof 0.0.0.0 6379 #主节点的ip和端口号
masterauth  #如果主节点设置了密码需要增加

启动主节点

redis-server master_6379.conf

启动从节点

redis-server slave_6380.conf

测试主节点

redis-cli -p 6379
auth 你设置的redis密码
get name
set name redisTest
get name

测试主节点

切换到从节点

redis-cli -p 6380
auth 你设置的redis密码
get name

切换到从节点

我们可以看出,我们在 master 上设置了一个键,最后在 slave 获取到了这个键的值,即master 的数据会自动同步到 slave 节点。

现在,我们尝试在 slave 设置键,具体命令如下:
slave节点写数据

我们看到,此时提示我们不能在 slave 写入数据,即 master 可以读写数据,但 slave 只能读取数据。

主从模式不足

主从模式并不完美,它也存在许多不足之处,下面做了简单地总结:

  • Redis 主从模式不具备自动容错和恢复功能,如果主节点宕机,Redis 集群将无法工作,此时需要人为干预,将从节点提升为主节点。
  • 如果主机宕机前有一部分数据未能及时同步到从机,即使切换主机后也会造成数据不一致的问题,从而降低了系统的可用性。
  • 因为只有一个主节点,所以其写入能力和存储能力都受到一定程度地限制。
  • 在进行数据全量同步时,若同步的数据量较大可能会造卡顿的现象。

虽然主从模式存在上述不足,但它仍是实现分布式集群的基础