当前位置:首页 > 问答 > 正文

Redis主从复制怎么弄,配置主从机器步骤和注意点分享

Redis主从复制怎么弄,配置主从机器步骤和注意点分享

Redis的主从复制功能,就是把一台Redis服务器(主库)的数据,自动同步到另外一台或多台Redis服务器(从库)上,这样做的主要目的是为了数据备份、提高读取性能(可以把读请求分散到从库上)和实现高可用,下面我们直接来看怎么配置。

第一部分:配置步骤

配置主从复制非常直接,主要步骤是在从库上进行设置,假设你已经有两台安装了Redis的服务器,IP地址分别是192.168.1.100(我们计划用它作为主库)和192.168.1.200(我们计划用它作为从库)。

确保主库正常启动 确保你的主库(192.168.1.100)上的Redis服务已经启动,并且可以正常连接和访问,你不需要在主库的配置文件(通常是redis.conf)里做任何特殊的设置来启用复制,默认情况下,每台Redis服务器都是主库。

配置从库 配置的核心在从库(192.168.1.200)上,你需要修改从库的Redis配置文件redis.conf

  1. 找到并修改replicaof指令:在配置文件中,找到replicaof这一行(在旧版本的Redis中,这个指令可能叫slaveof),默认这行是被注释掉的。
  2. 设置主库信息:将这行修改为 replicaof 192.168.1.100 6379,这行配置的意思是告诉从库:“你的主库是192.168.1.100,端口是6379,去连接它并同步数据。”
  3. (可选)设置主库密码:如果你的主库设置了密码(通过requirepass配置项),你必须在从库的配置文件中找到masterauth这一行,取消注释并设置成主库的密码,masterauth your_master_password,这是非常重要的一步,如果密码不对,从库将无法连接到主库进行同步。

重启从库服务 保存对redis.conf文件的修改,然后重启从库的Redis服务,让新的配置生效,在Linux系统上,命令可能类似于 systemctl restart redisredis-server /path/to/redis.conf

验证复制状态 从库重启后, replication 过程会自动开始,你可以通过几种方式验证复制是否成功:

  1. 连接从库,使用info replication命令:这是最直接的方法,在从库的Redis命令行界面中,输入info replication,你会看到一系列信息,重点关注以下几点:

    • role: 应该显示为slave(或replica),表示当前实例是从库。
    • master_link_status: 应该显示为up,表示与主库的连接是正常的。
    • master_last_io_seconds_ago: 会显示一个很小的数字(比如1或2),这表示最近一次与主库通信是几秒前,说明复制链路是活跃的。
    • 你还可以看到同步的偏移量等信息,如果这些数值在增长,说明数据正在持续同步。
  2. 在主库上也执行info replication命令:在主库上执行这个命令,你会看到connected_slaves的数量大于0,并且下面会列出从库的IP地址和端口,这同样证明了从库已经成功连接。

  3. 数据测试:在主库上设置一个键值对,set test_key "hello",然后立刻在从库上尝试获取 get test_key,如果能从从库读到"hello",就证明数据复制已经正常工作。

就是最基本的配置过程,整个过程的核心就是修改从库的配置文件,指向主库。

第二部分:重要注意点分享

仅仅完成配置还不够,在实际使用中,有几个关键点需要特别注意,这些点往往决定了你的主从复制是否稳定可靠。

  1. 网络连接是关键:主从复制严重依赖网络,必须确保主库和从库之间的网络是通畅的,防火墙规则要放行Redis的服务端口(默认6379),如果网络不稳定,会导致复制中断,从库会不断尝试重连主库。

  2. 主库密码不要忘:正如步骤中提到的,如果主库有密码,从库的masterauth配置必须正确,这是一个非常常见的配置错误。

  3. 理解复制的异步性:Redis的默认复制是异步的,意思是,主库收到写命令后,先处理完,然后才将命令发送给从库,而不是等待从库也写完才返回成功给客户端,这意味着,在某个极短的时间窗口内,主库和从库的数据可能不是完全一致的,如果主库在将数据同步到从库之前发生宕机,可能会丢失这部分最新的数据,这是为了性能而做的权衡,需要知晓这个风险。

  4. 关注从库的持久化与数据清除:当从库连接到主库时,主库会先进行一次全量同步,这个过程会清空从库上所有现有数据,然后用主库的完整数据快照(RDB文件)来填充从库。千万不要把有重要数据的Redis实例随意配置为另一个主库的从库,否则原有数据会被清空

  5. 从库的只读模式:默认情况下,从库是只读的(由配置项replica-read-only控制,默认为yes),这是为了防止有人在从库上误操作写入数据,导致主从数据不一致,一般情况下,保持这个默认设置就好。

  6. 主库持久化影响复制:如果主库没有开启持久化(即没有设置RDB快照或AOF日志),并且主库发生宕机后自动重启,那么主库的数据集将是空的,这时,从库也会清空自己的数据来与主库保持同步,从而导致所有数据丢失。即使配置了从库,也强烈建议在主库上开启持久化功能

  7. 复制积压缓冲区(Replication Backlog):这是主库中的一个缓冲区,用于存储最近传播的写命令,当从库短暂断开连接并重连后,如果断线时间不长,主库可以从这个缓冲区中找到从库断开时缺失的数据,然后进行部分重同步(Partial Resynchronization),这比重传整个数据集要高效得多,你可以通过配置repl-backlog-size来调整这个缓冲区的大小,如果应用写操作非常频繁,适当调大这个值有助于应对更长的从库断线时间。

配置Redis主从复制在步骤上并不复杂,但要想让复制架构稳定运行,必须关注网络、密码、持久化、数据一致性风险等细节,定期使用info replication命令检查主从状态,应该成为一个运维习惯。

Redis主从复制怎么弄,配置主从机器步骤和注意点分享