redis配置主从同步

本文详细介绍了Redis主从复制的配置过程,包括环境准备、节点基础配置、主从配置及验证步骤。通过具体操作步骤和命令展示,帮助读者理解如何搭建Redis主从结构,实现读写分离和数据冗余。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

概述:为了分担读写压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步

二、测试环境准备

步骤一:查看主节点信息

系统IP主机名redis版本
centos-7.210.0.0.67redis-masterredis-4.0.9.tar.gz
centos-7.210.0.0.68redis-slave01redis-4.0.9.tar.gz
centos-7.210.0.0.69redis-slave02redis-4.0.9.tar.gz

[root@redis ~]# ifconfig eno16777736|grep -w inet
inet 10.0.0.67 netmask 255.255.255.0 broadcast 10.0.0.255

[root@redis ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

[root@redis ~]# uname -r
3.10.0-327.el7.x86_64

步骤二:查看从节点01信息

[root@redis-slave01 ~]# ifconfig eno16777736|grep -w inet
inet 10.0.0.68 netmask 255.255.255.0 broadcast 10.0.0.255

[root@redis-slave01 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

[root@redis-slave01 ~]# uname -r
3.10.0-327.el7.x86_64

步骤三:查看从节点02信息

[root@redis-slave02 ~]# ifconfig eno16777736|grep -w inet
inet 10.0.0.69 netmask 255.255.255.0 broadcast 10.0.0.255

[root@redis-slave02 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

[root@redis-slave02 ~]# uname -r
3.10.0-327.el7.x86_64

三、节点基础配置

1.master节点基础配置

步骤一:下载redis安装包

[root@redis ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz
[root@redis ~]# ll redis-4.0.9.tar.gz
-rw-r–r--. 1 root root 1737022 Mar 26 2018 redis-4.0.9.tar.gz

步骤二:解压redis包

[root@redis ~]# tar zxf redis-4.0.9.tar.gz
[root@redis ~]# cd redis-4.0.9
[root@redis redis-4.0.9]# ls
00-RELEASENOTES CONTRIBUTING deps Makefile README.md runtest runtest-sentinel src utils
BUGS COPYING INSTALL MANIFESTO redis.conf runtest-cluster sentinel.conf tests

步骤三:编译redis(只需要执行make))

[root@redis redis-4.0.9]# make
编译出错:zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory
解决方法:make MALLOC=libc
[root@redis redis-4.0.9]#make MALLOC=libc

步骤四:创建redis目录,并且redis基本文件拷进去

[root@redis redis-4.0.9]# mkdir /usr/local/redis -p
[root@redis redis-4.0.9]# cp src/redis-server /usr/local/redis/
[root@redis redis-4.0.9]# cp src/redis-cli /usr/local/redis/
[root@redis redis-4.0.9]# cp redis.conf /usr/local/redis/
[root@redis redis-4.0.9]# mkdir /application
[root@redis redis-4.0.9]# ln -s /usr/local/redis/ /application/

步骤五:修改redis配置文件

[root@redis redis-4.0.9]# cd /application/redis/
[root@redis redis]# cp redis.conf redis.conf.backup
修改前
[root@redis redis]# egrep “^bind|^protected-mode|^\daemonize|# requirepass” redis.conf
bind 127.0.0.1
protected-mode yes
daemonize no
requirepass 000000
修改后
[root@redis redis]# egrep “^bind|^protected-mode|^daemonize|^requirepass” redis.conf
bind 10.0.0.67
protected-mode no
daemonize yes
requirepass 000000

步骤六:启动redis

[root@redis redis]# ./redis-server redis.conf
13064:C 04 Apr 20:32:15.767 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
13064:C 04 Apr 20:32:15.767 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=13064, just started
13064:C 04 Apr 20:32:15.767 # Configuration loaded

[root@redis redis]# netstat -lntup|grep 6379
tcp 0 0 10.0.0.67:6379 0.0.0.0:* LISTEN 13065/./redis-serve

步骤七:redis客户端连接测试

[root@redis redis]# redis -h 10.0.0.67 -p 6379 -a 000000
10.0.0.67:6379> exit

2.配置从节点(从节点与主节点的基础配置步骤一样)

步骤一:按照主节点的配置步骤配置(配置文件的不同之处如下)

[root@redis-slave01 redis]# grep “^bind” redis.conf
bind 10.0.0.68
[root@redis-slave02 redis]# grep “^bind” redis.conf
bind 10.0.0.69

步骤二:启动salve01

[root@redis-slave01 redis]# ./redis-server ./redis.conf
3106:C 20 Apr 12:12:06.594 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3106:C 20 Apr 12:12:06.595 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=3106, just started
3106:C 20 Apr 12:12:06.595 # Configuration loaded
[root@redis-slave01 redis]# netstat -lntup|grep 6379
tcp 0 0 10.0.0.68:6379 0.0.0.0:* LISTEN 3107/./redis-server

步骤三:启动从节点02

[root@redis-slave02 redis]# ./redis-server ./redis.conf
3166:C 20 Apr 12:12:39.877 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3166:C 20 Apr 12:12:39.877 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=3166, just started
3166:C 20 Apr 12:12:39.877 # Configuration loaded
[root@redis-slave02 redis]# netstat -lntup|grep 6379
tcp 0 0 10.0.0.69:6379 0.0.0.0:* LISTEN 3167/./redis-server

四、主从配置

1.主节点master信息

步骤一:修改配置文件信息,修改前。

vi redis.conf
450 # min-slaves-to-write 3
451 # min-slaves-max-lag 10
修改后
450 min-slaves-to-write 2 ###有几个salve,如果salve的数量小于的话会报错“(error) NOREPLICAS Not enough good slaves to write.

451 min-slaves-max-lag 10 ###slave与master的超时时间

步骤二:重启redis

[root@redis redis]# ./redis-cli -p 6379 -h 10.0.0.67 -a 000000 shutdown

[root@redis redis]# ./redis-server ./redis.conf
2682:C 20 Apr 12:25:05.983 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2682:C 20 Apr 12:25:05.983 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=2682, just started
2682:C 20 Apr 12:25:05.983 # Configuration loaded

2.配置从节点(以salve01为例)

步骤一:修改slave信息配置文件信息

修改前
[root@redis-slave01 redis]# vi redis.conf
281 # slaveof
288 # masterauth
修改后
281 slaveof 10.0.0.67 6379
288 masterauth 000000

步骤二:重启redis

[root@redis-slave01 redis]# ./redis-cli -h 10.0.0.68 -a 000000 shutdown

[root@redis-slave01 redis]# ./redis-server ./redis.conf
3149:C 20 Apr 12:28:11.882 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3149:C 20 Apr 12:28:11.882 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=3149, just started
3149:C 20 Apr 12:28:11.882 # Configuration loaded

五、验证主从复制

1.主节点信息查看

步骤一:查看主节点主从信息

[root@redis redis]# ./redis-cli -h 10.0.0.67 -a 000000
10.0.0.67:6379> info replication
# Replication
role:master
connected_slaves:2
min_slaves_good_slaves:2
slave0:ip=10.0.0.68,port=6379,state=online,offset=240,lag=0
slave1:ip=10.0.0.69,port=6379,state=online,offset=240,lag=1
master_replid:6811d95c1e61ece1eaf8fdeb6edae1c1ce76a0f3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:240
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:240

步骤二:查看主节点的key

10.0.0.67:6379> KEYS *
(empty list or set)

2.从节点01信息查看

步骤一:查看从节点主从信息

[root@redis-slave01 redis]# ./redis-cli -h 10.0.0.68 -a 000000
10.0.0.68:6379> info replication
# Replication
role:slave
master_host:10.0.0.67
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:394
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:6811d95c1e61ece1eaf8fdeb6edae1c1ce76a0f3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:394
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:394

步骤二:查看从节点01的key

10.0.0.68:6379> KEYS *
(empty list or set)

3.从节点02信息查看

步骤一:查看从节点主从信息

[root@redis-slave02 redis]# ./redis-cli -h 10.0.0.69 -a 000000
10.0.0.69:6379> info replication
# Replication
role:slave
master_host:10.0.0.67
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:436
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:6811d95c1e61ece1eaf8fdeb6edae1c1ce76a0f3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:436
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:436

步骤二:查看从节点01的key

10.0.0.69:6379> KEYS *
(empty list or set)

4.主节点添加字符串

步骤一:添加redis liang

10.0.0.67:6379> set redis liang
OK

步骤二:从节点01查看

10.0.0.68:6379> KEYS *
1) “redis”
10.0.0.68:6379> get redis
“liang”

步骤三:从节点02查看

10.0.0.69:6379> KEYS *
1) “redis”
10.0.0.69:6379> get redis
“liang”
注:配置了主从,从节点无法直接添加数据。
10.0.0.68:6379> set redis01 test
(error) READONLY You can’t write against a read only slave.

六、redis管理脚本

[root@redis redis]# cat /scritp/redis.sh 
#!/bin/bash
\# chkconfig: 3 3389 3390
. /etc/rc.d/init.d/functions
Redis_Port=6379
Redis_Host=10.0.0.67
Redis_Passwd=000000
Redis_Pid=/var/run/redis_${Redis_Port}.pid
Redis_Config=/application/redis/redis.conf
Redis_Cli=/application/redis/redis-cli
Redis_Server=/application/redis/redis-server
Redis_Num(){
if [ $# -ne 1 ];then
        echo "Usage: /etc/init.d/redis {start|stop|status|restart|}"
        exit 2
fi
}
Redis_start(){
        if [ -f "$Redis_Pid" ];then
                echo "redis .......running"
        else
                ${Redis_Server} ${Redis_Config} >/dev/null 2>&1
                action "redis .......start" /bin/true
        fi
}
Redis_stop(){
        if [ -f "$Redis_Pid" ];then
                ${Redis_Cli} -h ${Redis_Host} -p ${Redis_Port} -a ${Redis_Passwd} shutdown
                action "redis .......stop" /bin/true
        else
                echo "redis .......shutdown"
        fi
}
Redis_status(){
        if [ -f "$Redis_Pid" ];then
                echo "redis .......running"
        else
                echo "redis .......shutdown"       
        fi
}
Redis_restart(){
        Redis_stop
        Redis_start
}
Redis_Case(){
case $1 in
start|START)
        Redis_start
;;
stop|STOP)
        Redis_stop
;;
status|STATUS)
        Redis_status
;;
restart)
        Redis_restart
;;
*)
        echo "Usage: /etc/init.d/redis {start|stop|status|restart|}"
;;
esac
}
Redis_Cmd(){
        Redis_Num $1
        Redis_Case $1
}
Redis_Cmd $1
<think>嗯,用户想了解如何关闭Redis主从同步。我需要先回忆一下Redis的主从复制机制,然后整理出关闭的步骤和注意事项。 首先,主从同步Redis中是通过复制功能实现的,从节点连接到主节点并同步数据。关闭同步可能需要从主节点或从节点入手。可能的步骤包括停止从节点的复制,或者让主节点停止接受同步请求。 要确认用户是想彻底关闭主从结构,还是暂时停止某个节点的同步。如果是前者,可能需要将所有从节点设置为独立节点,并确保主节点不再有从节点连接。如果是后者,可以通过命令来断开复制关系。 需要提到的命令应该包括SLAVEOF NO ONE,这个命令可以让从节点停止复制,并晋升为主节点。同时,要提醒用户执行该命令后,从节点数据不会删除,但不再与主节点同步。另外,检查配置文件中的slaveof设置,防止重启后重新建立同步。 还要考虑主节点可能需要处理现有的从节点连接,比如使用CLIENT KILL命令关闭复制连接,但这可能不是推荐的做法。另外,修改配置文件避免重启后恢复同步关系很重要。 用户可能有不同的场景,比如维护、故障处理或者架构调整,需要根据具体情况建议合适的步骤。同时,要提醒数据一致性的问题,关闭同步后主从数据可能不一致,需要谨慎处理。 此外,可能需要验证关闭后的状态,使用INFO replication命令检查节点角色和连接状态。确保用户了解操作的影响,比如数据写入是否只指向新的主节点等。 总结步骤应该是:停止从节点的复制,检查配置,处理主节点连接,验证状态。同时强调数据备份和风险评估的重要性,确保用户操作安全。</think>在 Redis 中关闭主从同步需要根据具体场景选择操作方式,以下是分步说明: 1. **在从节点上停止复制** - 连接到从节点的 Redis 客户端 - 执行命令: ``` SLAVEOF NO ONE ``` - 效果:该从节点会断开与主节点的连接,停止同步数据,并自动晋升为独立节点 - 注意:原有数据会保留,但后续不再接收主节点的更新 2. **主节点处理(可选)** - 如果需要主节点停止所有复制服务: ```bash # 在配置文件 redis.conf 中注释或删除 # replicaof <masterip> <masterport> ``` ```bash # 重启 Redis 服务使配置生效 redis-cli config rewrite redis-cli shutdown redis-server /path/to/redis.conf ``` 3. **验证状态** - 执行命令检查节点角色: ```bash INFO replication ``` - 预期输出: ``` role:master connected_slaves:0 ``` **重要注意事项**: - 数据一致性:断开同步后,原主从节点的数据可能产生差异 - 连接残留:检查 `CLIENT LIST` 输出,必要时用 `CLIENT KILL` 清理旧连接 - 配置持久化:确保修改配置文件,否则重启后可能恢复原有主从关系 - 流量切换:如果是生产环境,建议在业务低峰期操作并提前做好数据备份 **典型应用场景**: 1. 故障隔离(主节点异常时手动提升从节点) 2. 架构调整(从读写分离切换为单节点) 3. 数据迁移前的准备操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值