Redis | 主从模式
1. 简介
Redis主从模式(Replication)是Redis提供的一种数据备份和高可用性解决方案。通过主从复制,可以将一个Redis服务器的数据复制到其他多个从服务器,从而实现数据的备份和读写分离,提高系统的性能和可用性。
主从模式的工作原理如下:
- 主节点(Master):主节点是主要的数据写入节点,负责接收客户端的写入操作(写操作包括SET、INCR等),并将写入的数据同步到从节点。
- 从节点(Slave):从节点负责复制主节点的数据。它接收主节点发送过来的写操作命令,并执行相同的写操作,以保持数据的一致性。
- 数据同步:主节点会将写操作的命令发送给所有连接的从节点,从节点执行相同的写操作,从而保持数据同步。
- 只读操作:客户端的只读操作(例如GET等)可以由从节点处理,从而减轻主节点的压力,提高读取性能。
主从模式的优势在于数据备份和读写分离:
- 数据备份:通过复制数据到从节点,即使主节点发生故障,数据仍然可用,并且可以通过从节点恢复数据。
- 读写分离:通过从节点处理只读操作,可以减轻主节点的负担,提高读取性能。
2. 配置
2.1. 配置主节点
注意:不配置默认也是主节点
启动参数方式
在主节点的redis-server
执行程序启动时添加--replicaof no one
启动参数,表示当前节点为主节点。
redis-server --replicaof no one
配置文件方式
在主节点的redis.conf
文件中设置replicaof
选项为no one
,表示当前节点为主节点。
replicaof no one
2.2. 配置从节点
启动参数方式
在主节点的redis-server
执行程序启动时添加--replicaof <master_ip> <master_port>
启动参数,设置当前节点的主节点。
如果主节点有密码还需要添加--masterauth <master_password>
。
配置文件方式
在从节点的redis.conf
文件中设置replicaof
选项为主节点的地址和端口。
replicaof <master_ip> <master_port>
如果主节点有密码还需要添加masterauth
在redis.conf
masterauth <master_password>
3. 演示
docker-compose.yaml
yaml
version: "3.8"
services:
redis1:
container_name: redis1
image: redis:7.0
command:
- redis-server
- --requirepass 123456
- --bind * -::*
redis2:
container_name: redis2
image: redis:7.0
command:
- redis-server
- --requirepass 123456
- --bind * -::*
- --masterauth 123456
- --replicaof redis1 6379
depends_on:
- redis1
redis3:
container_name: redis3
image: redis:7.0
command:
- redis-server
- --requirepass 123456
- --bind * -::*
- --masterauth 123456
- --replicaof redis1 6379
depends_on:
- redis1
-
进入窗口控制台:
docker exec -it redis1 bash
-
控制台内部操作:
root@1c0cccc0d756:/data# redis-cli 127.0.0.1:6379> AUTH 123456 OK 127.0.0.1:6379> INFO replication # Replication role:master connected_slaves:2 slave0:ip=172.18.0.3,port=6379,state=online,offset=1694,lag=0 slave1:ip=172.18.0.4,port=6379,state=online,offset=1694,lag=0 master_failover_state:no-failover master_replid:0158f9bf36c9db3b95829e29139fa71b1ecd2b84 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1694 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:1694
4. 注意
主从复制是异步的,从节点可能会有一定的延迟。如果主节点故障,可以将一个从节点提升为主节点,继续提供服务。但在进行主从切换时,需要考虑数据一致性和可能丢失的写操作。