面试题答案
一键面试排查步骤
- 网络方面
- 检查连接状态:使用
ping
命令检查主从服务器之间的网络连通性,确保没有丢包或高延迟现象。例如在Linux系统下执行ping <从服务器IP>
。 - 确认端口开放:检查主从服务器的Redis端口(默认为6379)是否在防火墙中开放。在Linux系统可以通过
iptables -L
命令查看防火墙规则,若未开放需添加规则允许相应端口通信。 - 抓包分析:使用工具如
tcpdump
在主从服务器上抓取网络包,分析Redis复制相关的通信,查看是否有异常的包丢失或乱序。例如在主服务器执行tcpdump -i eth0 port 6379 -w master.pcap
(eth0
为网络接口)。
- 检查连接状态:使用
- 配置方面
- 主服务器配置:检查主服务器的
redis.conf
配置文件,确认bind
参数是否绑定了正确的IP地址,确保从服务器能够连接。查看requirepass
参数设置,如果设置了密码,从服务器配置中也需正确配置。检查slave-serve-stale-data
参数,此参数决定从服务器在与主服务器断开连接时是否继续提供数据服务,确认其设置是否符合业务需求。 - 从服务器配置:确认从服务器
redis.conf
中的slaveof
参数是否正确配置为主服务器的IP和端口。同样检查masterauth
参数是否与主服务器设置的密码一致。查看repl-timeout
参数,此参数定义了复制操作的超时时间,若设置过短可能导致复制异常,可适当调整。
- 主服务器配置:检查主服务器的
- 命令执行方面
- 主服务器命令执行:在主服务器上执行
INFO replication
命令,查看主服务器的复制状态信息,如connected_slaves
字段确认从服务器是否正常连接,master_repl_offset
表示主服务器已复制的偏移量。 - 从服务器命令执行:在从服务器上执行同样的
INFO replication
命令,查看slave_repl_offset
字段,应与主服务器的master_repl_offset
接近。若差距较大,可能存在数据同步问题。执行SLAVEOF NO ONE
命令,可使从服务器停止复制,然后重新执行SLAVEOF <主服务器IP> <主服务器端口>
命令重新建立复制关系,观察是否能正常同步。
- 主服务器命令执行:在主服务器上执行
解决方案
- 网络问题解决方案
- 网络连通性问题:若因网络设备故障或网络配置错误导致连通性问题,修复网络设备或调整网络配置,如修复网线、重启路由器等。
- 端口未开放问题:根据防火墙类型,添加相应的端口开放规则。例如在CentOS 7系统中使用
firewall-cmd --zone=public --add-port=6379/tcp --permanent
命令开放6379端口,然后执行firewall-cmd --reload
使规则生效。 - 网络包异常问题:若抓包分析发现网络包异常,排查网络设备(如交换机)的设置,是否存在端口限速、策略路由等影响复制通信的设置,进行相应调整。
- 配置问题解决方案
- 主服务器配置错误:根据排查出的错误修改
redis.conf
配置文件,修改后重启Redis服务使配置生效。例如在Linux系统下使用systemctl restart redis
命令重启。 - 从服务器配置错误:同样修改从服务器的
redis.conf
配置文件,确保slaveof
、masterauth
等参数正确配置,然后重启Redis服务。重启后观察主从复制状态,通过INFO replication
命令确认是否恢复正常。
- 主服务器配置错误:根据排查出的错误修改
- 命令执行问题解决方案
- 主从偏移量不一致:若从服务器的
slave_repl_offset
明显落后于主服务器的master_repl_offset
,先在从服务器执行SLAVEOF NO ONE
,然后重新执行SLAVEOF <主服务器IP> <主服务器端口>
命令,触发全量复制,使从服务器重新同步主服务器数据。 - 复制命令执行异常:如果重新执行
SLAVEOF
命令后仍无法正常同步,检查Redis日志文件(通常在/var/log/redis/redis-server.log
),根据日志中的错误信息进一步排查问题,如是否存在内存不足等导致复制失败的情况,针对具体问题进行解决。
- 主从偏移量不一致:若从服务器的