Redis的补充---持久化和主从复制

本文介绍Redis的两种持久化方案:RDB快照和AOF日志记录,对比两者优缺点。同时讲解Redis主从复制机制,包括配置步骤及注意事项。

1. Redis持久化方案

1.1 Rdb方式

Redis默认的方式,redis通过快照来将数据持久化到磁盘中。

1) 设置持久化快照的条件

在redis.conf中修改持久化快照的条件,如下:
这里写图片描述

2) 持久化文件存储的目录

在redis.conf中可以指定持久化文件存储的目录和文件名
这里写图片描述

Rdb问题

一旦redis非法关闭,那么会丢失最后一次持久化之后的数据。
如果数据不重要,则不必要关心。
如果数据不能允许丢失,那么要使用aof方式。

1.2 Aof方式

Redis默认是不使用该方式持久化的。Aof方式的持久化,是操作一次redis数据库,则将操作的记录存储到aof持久化文件中。

开启aof方式的持久化方案,并设置持久化文件名。

这里写图片描述
文件存储的目录和Rdb方式相同。

1.3 结论

在使用aof和rdb方式时,如果redis重启,则数据从aof文件加载。

2. 主从复制

2.1 什么是主从复制

持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障,如下图:
这里写图片描述

说明:
1. 主redis中的数据有两个副本(replication)即从redis1和从redis2,即使一台redis服务器宕机其它两台redis服务也可以继续提供服务。
2. 主redis中的数据和从redis上的数据保持实时同步,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上。
3. 只有一个主redis,可以有多个从redis。
4. 主从复制不会阻塞master,在同步数据时,master 可以继续处理client 请求
5. 一个redis可以即是主又是从,如下图:
这里写图片描述

2.2 主从复制设置

1) 主机配置,主机无需配置
2) 从机配置

第一步:复制出一个从机
[root@centos03 local]# cp redis ./redis-slave -r

第二步:修改从机的redis.conf,修改端口号为6380
这里写图片描述

第三步:修改从机的redis.conf,开启主从复制
修改前:
这里写图片描述
修改后:
这里写图片描述

第四步:清除从机中的持久化文件
[root@centos03 bin]# rm -f dump.rdb appendonly.aof

第五步:启动从机
[root@centos03 bin]# ./redis-server redis.conf

第六步:启动6380的客户端
[root@centos03 bin]# ./redis-cli -p 6380

注意:
主机一旦发生增删改操作,那么从机会将数据同步到从机中
从机不能执行写操作。
这里写图片描述

<think>嗯,用户这次明确要配置Redis一主一从集群,看来他不需要复杂的多节点部署,而是追求最简单的高可用方案。之前提供的引用里其实有线索:引用[2]提到哨兵模式,引用[3]展示了从节点配置,但用户特意强调"一主一从",说明场景可能比较轻量。 用户可能是个开发者正在搭建测试环境,或者小项目需要故障转移能力。他跳过了动态扩容3主3从的方案,说明当前需求很聚焦。要注意的是,他提到"集群"但实际要的是主从复制+哨兵,这里需要区分Redis Cluster主从复制的概念差异——不过既然他明确说一主一从,按后者实现更合适。 从引用[2]提取关键步骤时发现,它用docker部署但省略了哨兵配置细节。引用[3]的非docker方式反而更清晰,但用户如果习惯docker就需要转换表述。所以决定融合两种方案:先演示原生安装保证原理透明,再用docker实现快速部署,这样覆盖不同用户偏好。 特别注意两个技术细节:一是主从的持久化配置差异(主节点关AOF可能更好),二是哨兵quorum设置为1的适用场景。用户没提性能要求,所以推荐默认异步复制,但准备在"注意事项"里补充同步复制的选项。 安全问题不能忽略。引用[1]的--privileged有风险,要特别标注替代方案;防火墙设置容易遗漏,需要分开放置在步骤里。用户上次踩过坑(引用[1]提到问题解决),所以把常见错误如目录权限、端口冲突专门列出来。 最后生成的扩展问题其实是对用户潜在需求的预判:他部署完一主一从后,很可能接着要监控或扩容,提前准备这些方向能减少他后续提问成本。不过"性能调优"放在最后,毕竟初期使用者更关注可用性。 </think>以下是配置Redis一主一从集群的完整方法,结合原生部署Docker方案: --- ### **一、原生部署方案(推荐测试环境)** #### 1. **主节点配置**(192.168.1.128) ```bash # 创建配置文件 cat > redis-master.conf << EOF bind 0.0.0.0 port 6379 daemonize yes requirepass YourMasterPassword # 主节点密码 masterauth YourMasterPassword # 从节点访问主节点的密码 appendonly yes EOF # 启动主节点 redis-server redis-master.conf ``` #### 2. **从节点配置**(192.168.1.129) ```bash # 创建配置文件 cat > redis-slave.conf << EOF bind 0.0.0.0 port 6379 daemonize yes replicaof 192.168.1.128 6379 # 指定主节点IP端口 masterauth YourMasterPassword # 主节点密码 requirepass YourSlavePassword # 从节点自身密码(可选) appendonly yes EOF # 启动从节点 redis-server redis-slave.conf ``` #### 3. **验证主从同步** ```bash # 连接主节点写入数据 redis-cli -h 192.168.1.128 > SET test_key "hello" # 连接从节点查询数据 redis-cli -h 192.168.1.129 > GET test_key # 应返回"hello" ``` --- ### **二、Docker部署方案(适合生产环境)** #### 1. **主节点容器** ```bash docker run -d --name redis-master \ -p 6379:6379 \ -v $(pwd)/master-data:/data \ redis:latest \ redis-server --requirepass "YourMasterPassword" \ --appendonly yes ``` #### 2. **从节点容器** ```bash docker run -d --name redis-slave \ -p 6380:6379 \ -v $(pwd)/slave-data:/data \ redis:latest \ redis-server --replicaof redis-master 6379 \ --masterauth "YourMasterPassword" \ --requirepass "YourSlavePassword" \ --appendonly yes ``` > **注意**:若跨主机部署,需将`--replicaof redis-master`替换为主节点实际IP --- ### **三、哨兵模式配置(实现自动故障转移)** #### 哨兵配置文件(sentinel.conf) ```conf sentinel monitor mymaster 192.168.1.128 6379 1 sentinel auth-pass mymaster YourMasterPassword sentinel down-after-milliseconds mymaster 5000 sentinel parallel-syncs mymaster 1 ``` #### 启动哨兵 ```bash redis-sentinel sentinel.conf ``` > **关键参数说明**: > - `down-after-milliseconds`: 主节点失联判定时间(毫秒) > - `parallel-syncs`: 故障转移时同时同步的新从节点数[^2] --- ### **四、验证高可用性** 1. **模拟主节点故障** ```bash docker stop redis-master ``` 2. **观察哨兵日志** ```log +switch-master mymaster 192.168.1.128 6379 192.168.1.129 6379 ``` 3. **从节点自动升级为主节点** ```bash redis-cli -h 192.168.1.129 info replication # 输出中 role:master 表示切换成功 ``` --- ### **注意事项** 1. **防火墙配置**:确保主从节点间端口互通(默认6379, 哨兵端口26379) 2. **数据持久化**:建议同时开启`appendonly yes``save 900 1`双重保障 3. **密码安全**:主从节点密码需一致,否则同步失败[^3] 4. **容器网络**:Docker部署时建议使用自定义网络 `--network redis-net` > **踩坑预警**: > - 若从节点无法连接主节点,检查主节点`bind 0.0.0.0`配置 > - Docker挂载目录需赋予`chmod -R 777`权限(或匹配容器内redis用户UID)[^1] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值