redis配置最简单的主从复制集群

本文详细介绍如何在单机环境下配置Redis主从复制,包括安装、配置、启动及测试过程,实现读写分离和数据热备,提升数据库并发处理能力和I/O性能。

redis的主从复制

主节点数据更新后根据配置和策略,自动同步到从节点,Master以写为主,Slave以读为主。

redis主从复制的作用:

  1. 读写分离,使数据库能支撑更大的并发。
  2. 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库
    继续工作,避免数据丢失。
  3. 当 I/O 访问频率过高,单机无法满足,此时做多库的存储,降低磁盘 I/O 访问
    的频率,提高单个机器的 I/O 性能。
redis主从复制的配置

本章节配置的redis主从复制,只是在一台机器上两个不同端口上配置master和slave,实现一个最简单的redis主从复制架构。

安装redis

redis下载地址:https://redis.io/download,这里我下载的是redis-5.0.4(只有redis3.0以上的版本才能搭建redis集群)。

下载之后解压

sudo tar -xzf redis-5.0.4.tar.gz -C /usr/local
cd redis-5.0.4
sudo make

在make命令编译时候报出一个bug:error:jemalloc/jemalloc.h:No such file or directory。

原因:Redis 2.4版本之后,默认使用jemalloc来做内存管理,因为jemalloc被证明解决fragmentation problems(内存碎片化问题)比libc更好。报出这个错误原因是没有jemalloc而只有libc。

解决办法:指定libc做redis的内存管理,在make命令上指定参数。

sudo make MALLOC=libc 

make完后 redis-5.0.4/src目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序都位于安装目录 src 目录下。

复制redis.conf

redis安装完毕后可以把原来自带的redis.conf改名为redis1.conf,用来做Master-redis启动时指定的配置文件;从redis1.conf复制出一份redis2.conf的配置文件,用来做Slave-redis启动时指定的配置文件。

cd /usr/local/redis-5.0.4
mv redis.conf redis1.conf
cp redis1.conf redis2.conf

配置redis.conf

修改配置文件

vi redis1.conf

修改如下配置项

#后端模式运行
daemonize yes  

#指定pid文件,把pidfile生成到有权限的目录下
pidfile /usr/local/redis-5.0.4/redis1.pid 

修改配置文件

vi redis2.conf

修改如下配置项,并加入slaveof 127.0.0.1 6379

port 6380

#后端模式运行
daemonize yes  

#指定pid文件,把pidfile生成到有权限的目录下
pidfile /usr/local/redis-5.0.4/redis_6380.pid

#指定redis集群的主节点
slaveof 127.0.0.1 6379
启动redis主从实例

启动两个redis实例客户端,启动时指定配置文件(一个主节点,一个从节点)

cd /usr/local/redis-5.0.4/src
./redis-server ../redis1.conf
./redis-server ../redis2.conf

启动redis客户端,连接主节点

./redis-cli -h 127.0.0.1 -p 6379

输入info指令

info

在Replication显示项可以看出,连接的此redis实例role(角色)为master,有一个Slave(从节点)与之连接,Slave的ip和端口为127.0.0.1和6380。

在这里插入图片描述

测试redis主从是否配置成功

连接master(127.0.0.1:6379的redis实例)

./redis-cli -h 127.0.0.1 -p 6379

在master中设置键值,并取值

set name "atuo"
get name

在这里插入图片描述

连接slave(127.0.0.1:6380的redis实例)

./redis-cli -h 127.0.0.1 -p 6380

在slave上取出在master上设置的键的值(取值成功)

get name

在这里插入图片描述

我们发现master和slave已经实现了数据的同步

而此时我们若想在slave上设置键值,是会报错的,可见redis的主从复制实现了读写分离

set age 3

在这里插入图片描述

在这里我们只是在一台机器上演示了一下配置redis主从复制的一个最简单的模型,而在真正的应用开发中,redis的主从复制配置肯定是分开在不同的机器上的。

<think>首先,用户的问题是关于Redis主从复制的工作原理和配置方法。我需要根据系统级指令来构建我的回答。 关键指令: - 所有行内数学表达式使用 `$...$` 格式,但Redis主题不涉及数学表达式,所以这部分可能不需要。 - 独立公式使用 `$$...$$` 并单独成段,同样不适用。 - LaTeX语法正确:确保任何数学格式正确,但这里可能没有。 - 使用中文回答:整个回答必须用中文。 - 生成相关问题:在回答后添加相关问题。 - 回答中引用的段落末尾自然地添加引用标识,如 `[^1]`:我需要参考提供的引用内容。 提供的引用内容: - [^1]: 配置Redis主从复制,描述主从复制的基本概念。 - [^2]: 主从复制的策略:全量同步和增量同步。 - [^3]: 主从复制启用的三种方式。 - [^4]: 配置步骤,包括临时和永久配置。 - [^5]: 部分重同步的原理,包括runid、offset和backlog buffer。 用户的问题:我想了解Redis主从复制的工作原理和配置方法。 回答结构: - 结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠,基于提供的引用。 - 最后添加相关问题。 大纲回答: 1. **介绍Redis主从复制**:简要说明什么是主从复制及其目的。 2. **工作原理**: - 初始同步(全量复制)。 - 增量复制。 - 部分重同步机制(如引用[5]所述)。 3. **配置方法**: - 临时配置(通过命令)。 - 永久配置(通过配置文件)。 4. **引用添加**:在相关段落末尾添加引用标识。 5. **相关问题**:生成3-5个相关问题。 确保回答用中文。 相关问题示例(基于用户查询): 1. Redis主从复制有什么优点和缺点? 2. 如何优化Redis主从复制的性能? 3. Redis主从复制在故障转移中如何应用? 4. 主从复制中的数据一致性问题如何解决? 5. Redis集群主从复制的区别是什么? 现在,构建回答内容。</think>### Redis主从复制原理及配置步骤 Redis主从复制是一种常见的数据复制机制,用于实现数据冗余和负载均衡。主节点(Master)负责处理写操作,从节点(Slave)负责复制主节点的数据并处理读操作。下面我将逐步解释其工作原理和配置方法,确保内容清晰可靠。 #### 一、Redis主从复制的工作原理 Redis主从复制基于两种同步策略:全量同步和增量同步。当从节点首次连接主节点时,会触发全量同步;之后,则使用增量同步来保持数据一致。如果网络中断后重新连接,Redis支持部分重同步机制来高效恢复数据同步[^2]。 1. **全量同步(初始同步)**: - 当从节点启动或首次连接到主节点时,主节点会执行一次全量数据复制。 - 过程:主节点生成当前数据集的快照(RDB文件),发送给从节点。从节点加载快照后,主节点再将期间累积的写命令发送给从节点执行,确保数据完全一致[^2][^5]。 - 特点:适用于初始化场景,但数据量大时可能阻塞服务。 2. **增量同步(持续同步)**: - 全量同步完成后,主节点会将所有写操作记录在内存缓冲区中。 - 主节点实时将这些写命令发送给从节点执行,实现数据增量更新[^2]。 - 优点:高效、低延迟,适合日常数据同步。 3. **部分重同步机制(断线恢复)**: - 当网络中断后重新连接时,Redis使用部分重同步避免全量复制开销。 - 关键组件: - **runid(replication ID)**:主节点启动时生成的唯一40位字符串标识,用于识别主节点[^5]。 - **offset(复制偏移量)**:主从节点各自维护一个偏移量,记录已传输的字节数。比较偏移量可判断数据差异[^5]。 - **replication backlog buffer(复制积压缓冲区)**:一个固定大小的FIFO队列(默认1MB),由主节点维护,备份最近发送的写命令。从节点断线后,可从缓冲区中拉取缺失数据[^5]。 - 流程:从节点发送runid和offset给主节点;主节点检查offset是否在缓冲区范围内,如果是,则发送增量数据;否则,回退到全量同步[^5]。 Redis主从复制通过这种策略确保数据最终一致性,但写操作仅由主节点处理,从节点提供只读服务[^1][^3]。 #### 二、Redis主从复制配置步骤 配置主从复制支持临时和永久两种方式。以下以一台机器上配置两个Redis实例为例(主节点端口6379,从节点端口6380),操作简单可靠。 1. **临时配置(通过客户端命令)**: - 启动主节点和从节点服务: ```bash # 启动主节点(端口6379) redis-server --port 6379 # 启动从节点(端口6380redis-server --port 6380 ``` - 在从节点上执行复制命令: ```bash redis-cli -p 6380 # 连接到从节点 127.0.0.1:6380> SLAVEOF 127.0.0.1 6379 # 设置主节点IP和端口 OK ``` - 此方式在从节点重启后复制关系会终止,仅适用于测试[^3][^4]。 2. **永久配置(通过配置文件)**: - 编辑从节点的配置文件(如`6380.conf`): ```bash cd /etc/redis # 进入配置文件目录 vi 6380.conf # 编辑从节点配置文件 ``` - 修改配置项: ```ini # 取消注释并设置主节点信息 slaveof 127.0.0.1 6379 ``` - 保存并重启从节点服务: ```bash redis-server /etc/redis/6380.conf --daemonize yes # 后台启动 ``` - 此方式确保从节点每次启动时自动连接主节点,适合生产环境[^4]。 - 验证配置:连接主节点执行`INFO replication`,查看`connected_slaves`字段是否显示从节点信息[^3]。 配置完成后,主节点写入数据会通过Redis Sync机制自动同步到从节点,实现数据冗余和高可用[^1][^4]。如果遇到网络问题,部分重同步机制能快速恢复数据一致性[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值