主从模式架构
默认情况下,主节点可以读写,从节点只能读,禁止写操作。不修改配置让从节点支持写操作是没有意义的,因为首先写入的数据不会同步到其他节点,其次当主节点修改相同的数据时,从节点的数据会被覆盖。主节点挂机后,redis不会向外界提供写服务,因为剩下的从节点不会成为主节点。主节点挂机后,不会影响从节点的读取。主节点启动后,Redis将再次向外界提供写服务。当从节点挂起时,不会影响其他从节点的读取和主节点的读写。重启后,数据将从主节点同步。
image.png
上图中的集群由一个master(6379端口)和两个slave(6380和6381端口)构成,主从模式类似于数据库的读写分离机制,主要有以下特点:
1.主数据库可以进行读和写操作,而从数据库一般只允许读操作,主数据库写入数据后会将数据同步到从数据库,所以保证了无论从哪个数据库读取数据都是一致的。
2.其中一个slave挂了(如上图6380),不影响主数据库的读写操作,如果有不止一个slave则不影响整个集群系统的运行,如果slave全部挂掉则所有读写压力均放到主数据库上。
3.主数据库挂了(如上图6379),不影响从数据的读操作,整个系统则不提供写操作,但是读数据操作不受影响。
主从模式搭建方法
1、cd redis目录 新建一个redis_cluster目录
代码语言:javascript复制mkdir redis_cluster
2、把原redis目录下的redis.conf文件复制到 redis_cluster
代码语言:javascript复制cp -r redis.conf redis_cluster/
3、修改文件名 cd redis_cluster
代码语言:javascript复制mv redis.conf master_6379.conf
4、在复制一份Slave节点的配置
代码语言:javascript复制cp master_6379.conf slave_6380.conf
5、修改从节点配置
代码语言:javascript复制port 6380
slaveof 0.0.0.0 6379 #主节点的ip和端口号
masterauth #如果主节点设置了密码需要增加
截屏2022-05-24 10.42.44.png
启动主节点
代码语言:javascript复制redis-server master_6379.conf
启动从节点
代码语言:javascript复制redis-server slave_6380.conf
测试主节点
代码语言:javascript复制redis-cli -p 6379
auth 你设置的redis密码
get name
set name redisTest
get name
截屏2022-05-24 10.51.27.png
切换到从节点
代码语言:javascript复制redis-cli -p 6380
auth 你设置的redis密码
get name
截屏2022-05-24 10.53.09.png
我们可以看出,我们在 master 上设置了一个键,最后在 slave 获取到了这个键的值,即master 的数据会自动同步到 slave 节点。
现在,我们尝试在 slave 设置键,具体命令如下:
截屏2022-05-24 10.55.32.png
我们看到,此时提示我们不能在 slave 写入数据,即 master 可以读写数据,但 slave 只能读取数据。