redis配置主从复制失败

本文分享了在配置Redis主从复制过程中遇到的Noroutetohost错误的排查与解决经验,指出防火墙未开放6379端口是常见原因,并提供了CentOS7下开放端口的具体操作。

redis配置主从复制失败

排查

在从节点的redis.conf中配置完salveof后,重启测试失败。折腾了半天才找到原因所在。

  • 从redis.conf配置文件中设置daemonize为no(从后端守护进程转换为前端启动)
    在这里插入图片描述
  • 重启redis-server,发现异常:No route to host。
    在这里插入图片描述

原因

  • 因为防火墙没有开放redis的端口(默认6379)。

解决

  • 主、从服务器 必须全部开放相应的端口!

centos7开放端口的命令:

firewall-cmd --add-port=6379/tcp
<think>我们被要求配置Redis主从复制。根据引用内容,主从复制是指将一台Redis服务器(主节点)的数据复制到其他Redis服务器(从节点)。配置主从复制可以实现数据冗余备份、读写分离(主节点写,从节点读)和高可用性。 配置步骤通常包括: 1. 准备多个Redis实例(可以是同一台机器的不同端口,也可以是不同机器)。 2. 配置从节点,使其指向主节点。 3. 启动实例并验证复制状态。 下面以在同一台机器上配置三个Redis实例(端口分别为6379、6380、6381)为例,其中6379作为主节点,6380和6381作为从节点。 步骤详解: 1. **创建配置文件**: 为每个实例创建配置文件,并修改必要的配置项(如端口、pid文件、持久化文件名等)以避免冲突。 例如,创建三个配置文件:`redis-6379.conf`(主节点),`redis-6380.conf`(从节点),`redis-6381.conf`(从节点)。 以`redis-6379.conf`为例,内容如下: ``` include /path/to/your/base/redis.conf # 包含公共配置,如果有的话 port 6379 pidfile /var/run/redis_6379.pid dbfilename dump6379.rdb dir /rediscluster # 指定持久化文件存放目录 # 其他配置按需修改,如关闭AOF:appendonly no ``` 类似地,配置其他两个文件,只需修改端口和对应的文件名。 2. **启动Redis实例**: 使用各自的配置文件启动三个Redis服务器。 ```bash redis-server /path/to/redis-6379.conf redis-server /path/to/redis-6380.conf redis-server /path/to/redis-6381.conf ``` 3. **设置主从关系**: 默认情况下,启动的Redis实例都是主节点。我们需要将6380和6381设置为6379的从节点。 有两种方式设置: - **命令行方式**(重启后失效): 连接到从节点的客户端,执行`SLAVEOF`命令: ```bash # 在6380的客户端执行 redis-cli -p 6380 127.0.0.1:6380> SLAVEOF 127.0.0.1 6379 ``` - **配置文件方式**(永久生效): 在从节点的配置文件中添加: ``` slaveof 127.0.0.1 6379 # 如果主节点有密码,还需要配置masterauth # masterauth yourpassword ``` 然后重启从节点实例。 4. **验证主从复制**: 在主节点写入数据,在从节点读取数据。 - 在主节点(6379)执行写操作: ```bash redis-cli -p 6379 127.0.0.1:6379> set key1 value1 OK ``` - 在从节点(6380)执行读操作: ```bash redis-cli -p 6380 127.0.0.1:6380> get key1 "value1" ``` 另外,可以在任意节点使用`info replication`命令查看复制状态: ```bash 127.0.0.1:6379> info replication # 主节点会显示connected_slaves的数量和从节点信息 127.0.0.1:6380> info replication # 从节点会显示主节点的信息以及复制状态 ``` 5. **注意点**: - 如果主节点设置了密码,需要在从节点的配置文件中配置`masterauth <password>`,否则从节点无法连接到主节点。 - 默认情况下,从节点是只读的(`slave-read-only yes`),不能直接写入数据。 - 主从复制是异步的,所以从节点的数据可能会有延迟。 引用[4]和引用[5]提供了具体的配置示例,包括配置文件的修改和启动命令。引用[1][2][3]则介绍了主从复制的概念和作用。 通过以上步骤,即可完成Redis主从复制配置。 §§相关问题§§ 1. Redis主从复制中如何实现故障转移? 2. 主从复制延迟过高怎么办? 3. Redis主从复制和集群模式有什么区别? 4. 如何配置带认证(密码)的Redis主从复制? 5. 主从复制中,如果主节点宕机,怎么提升一个从节点为主节点?</think>### Redis主从复制配置指南 #### 一、核心概念 1. **主从复制定义** 主节点(Master)负责写操作,从节点(Slave)自动同步主节点数据,实现读写分离和高可用性[^2]。 2. **核心特性** - 单向数据复制:主节点 → 从节点 - 默认异步复制 - 从节点只读(默认配置) - 支持级联复制:Slave1 → Slave2[^3] #### 二、配置步骤(单机多实例示例) ##### 1. 准备配置文件 ```bash # 创建配置目录 mkdir -p /rediscluster # 复制模板配置文件(以6379主节点为例) cp /redis/redis-7.0.4/redis.conf /rediscluster/redis-6379.conf ``` 编辑主节点配置: ```ini # redis-6379.conf port 6379 pidfile "/var/run/redis_6379.pid" dbfilename "dump6379.rdb" dir "/rediscluster" appendonly no # 关闭AOF简化演示[^4] ``` ##### 2. 配置从节点 ```bash # 创建从节点配置(6380/6381) cp /rediscluster/redis-6379.conf /rediscluster/redis-6380.conf cp /rediscluster/redis-6379.conf /rediscluster/redis-6381.conf ``` 修改从节点配置(以6380为例): ```ini # redis-6380.conf port 6380 pidfile "/var/run/redis_6380.pid" dbfilename "dump6380.rdb" slaveof 127.0.0.1 6379 # 关键配置:指向主节点[^5] ``` ##### 3. 启动实例 ```bash redis-server /rediscluster/redis-6379.conf redis-server /rediscluster/redis-6380.conf redis-server /rediscluster/redis-6381.conf # 验证进程 ps -ef | grep redis-server ``` ##### 4. 建立主从关系 ```bash # 方式1:配置文件永久生效(推荐) # 已在从节点配置 slaveof # 方式2:命令行临生效 redis-cli -p 6381 127.0.0.1:6381> SLAVEOF 127.0.0.1 6379 ``` #### 三、验证主从复制 ```bash # 1. 主节点写入数据 redis-cli -p 6379 127.0.0.1:6379> SET test_key "hello_replication" # 2. 从节点读取数据 redis-cli -p 6380 127.0.0.1:6380> GET test_key # 返回 "hello_replication" # 3. 查看复制状态 127.0.0.1:6380> INFO replication ``` 关键状态指标: ```markdown role:slave # 当前角色 master_host:127.0.0.1 # 主节点IP master_port:6379 # 主节点端口 master_link_status:up # 连接状态 slave_repl_offset:xxx # 复制偏移量 ``` #### 四、生产环境优化 ```ini # 主节点配置 requirepass master_password # 主节点密码 masterauth slave_password # 从节点认证密码 # 从节点配置 slave-read-only yes # 从节点只读 repl-diskless-sync yes # 无盘复制(减少IO压力)[^1] ``` #### 五、故障排查 1. **连接失败** - 检查防火墙:`firewall-cmd --list-ports` - 验证密码:从节点需配置`masterauth <password>` 2. **数据不同步** ```sql /* 查看主从偏移量 */ MASTER: INFO replication => master_repl_offset SLAVE: INFO replication => slave_repl_offset ``` 若偏移量差值持续增大,可能存在网络瓶颈 3. **自动修复** ```bash # 从节点重新同步 SLAVEOF NO ONE # 解除从属 SLAVEOF 127.0.0.1 6379 # 重新同步 ``` > 💡 **最佳实践**: > - 主节点关闭持久化,从节点开启RDB或AOF[^1] > - 级联复制架构:Master → Slave1 → Slave2 减轻主节点压力 > - 监控复制延迟:`redis-cli -p 6380 --latency`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值