欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > redis(主从复制)教程

redis(主从复制)教程

2025/4/2 11:06:10 来源:https://blog.csdn.net/m0_71071763/article/details/146560876  浏览:    关键词:redis(主从复制)教程
节点角色IP 地址端口状态
主节点(master)192.168.153.2217001运行正常
从节点(slave)192.168.153.2227002连接主节点同步中

Redis 主从复制简述:

  • 主节点:负责写入操作,同时将数据同步到从节点。

  • 从节点:从主节点获取数据副本,通常用于读操作,帮助减轻主节点的负载。

环境配置(两台服务器都要做)

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 临时关闭selinux 安全策略
setenforce 0  
# 永久 注意需要重启才能生效。
sed -i 's/enforcing/disabled/' /etc/selinux/config  

 安装 Redis (两台服务器都要做)

# 安装 Redis 依赖的软件包:gcc(GNU 编译器)、make(构建工具)、wget(下载工具)、tcl(测试工具)
sudo yum install -y gcc make wget tcl
# 下载 Redis 的压缩包版本 6.2.14
wget https://download.redis.io/releases/redis-6.2.14.tar.gz
# 解压下载的 Redis 源码包
tar xzf redis-6.2.14.tar.gz
#重命名redis 
mv redis-6.2.14 redis
# 进入解压后的 Redis 目录
cd redis
# 使用 `make` 命令进行编译,`-j$(nproc)` 选项会并行使用所有可用的 CPU 核心来加速编译过程
make -j$(nproc)
# 安装 Redis,将 Redis 安装到 `/usr/local/redis` 目录
sudo make PREFIX=/usr/local/redis install
# 创建 Redis 所需的目录,例如配置文件目录和数据目录
sudo mkdir -p /etc/redis /var/lib/redis
# 复制 Redis 默认的配置文件到 `/etc/redis/` 目录
sudo cp redis.conf /etc/redis/redis.conf

 添加到systemd 管理

#创建 Redis 的 systemd 服务单元文件
sudo vim /etc/systemd/system/redis.service[Unit]
Description=Redis In-Memory Data Store
Documentation=http://redis.io/documentation
After=network.target[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli shutdown
Restart=always
User=root
Group=root
PrivateTmp=yes
LimitNOFILE=65536[Install]
WantedBy=multi-user.target#重新加载并启动服务:
sudo systemctl daemon-reload
sudo systemctl start redis
#查看状态
sudo systemctl status redis
#设置开机自启
systemctl enable redis配置环境变量
#使用编辑器打开 .bash_profile 文件:
vim ~/.bash_profile
添加:
export PATH=$PATH:/usr/local/redis/bin#执行以下命令,使新的配置生效:
source ~/.bash_profile
#查看版本
redis-server --version

配置主节点 (192.168.153.221)

#编辑主节点的 Redis 配置文件
sudo vim /etc/redis/redis.conf修改以下配置项:
bind 0.0.0.0  # 允许所有IP连接
protected-mode no  # 关闭保护模式
daemonize yes  # 以守护进程运行
port 7001      #配置主节点端口为7001
requirepass 123456  # 设置密码(可选但推荐)#保存并退出,然后启动 Redis 服务:
sudo systemctl start redis
sudo systemctl enable redis
#查看状态
sudo systemctl status redis

配置从节点 (192.168.153.222)

#编辑从节点的 Redis 配置文件:
sudo vim /etc/redis/redis.conf修改以下配置项:
bind 0.0.0.0  # 允许所有IP连接
protected-mode no  # 关闭保护模式
daemonize yes  # 以守护进程运行
port 7002      #配置从节点端口为7002
#slaveof 192.168.153.221 7001  # 指定主节点IP和端口(旧版本的配置(Redis 4.x 及之前版本):
replicaof 192.168.153.221 7001 # 指定主节点IP和端口(新版本的配置(Redis 5.x 及之后版本):
masterauth 123456  # 如果主节点设置了密码,需要填写
requirepass 123456  # 设置与主节点相同的密码(可选)#保存并退出,然后启动 Redis 服务:
sudo systemctl start redis
sudo systemctl enable redis
#查看状态
sudo systemctl status redis

验证主从复制

#在主节点上(192.168.153.221)
[root@localhost]# redis-cli -p 7001
127.0.0.1:7001> auth 123456
OK
127.0.0.1:7001> ping
PONG
127.0.0.1:7001> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.153.222,port=7002,state=online,offset=126,lag=1
master_failover_state:no-failover
master_replid:012561c18193a46de3bec19570e5fcd9bf66672d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:126
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:126
127.0.0.1:7001> SLAVEOF 192.168.153.222 7002
OK
127.0.0.1:7001> exit
#在从节点上面(192.168.153.222)
[root@localhost redis]# redis-cli -p 7002
127.0.0.1:7002> auth 123456
OK
127.0.0.1:7002> ping
PONG
127.0.0.1:7002> info replication
# Replication
role:slave
master_host:192.168.153.221
master_port:7001
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_read_repl_offset:168
slave_repl_offset:168
master_link_down_since_seconds:85
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:012561c18193a46de3bec19570e5fcd9bf66672d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:168
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:168
127.0.0.1:7002> SLAVEOF 192.168.153.221 7001
OK Already connected to specified master

报错:从节点显示 master_link_status:down 原因 复制循环了,必须为master_link_status:up

#解决方法:
在主节点 7001 上执行:(这个命令用于 将 Redis 实例恢复为独立的主节点(Master),取消它作为其他节点的从节点)
redis-cli -p 7001 -a 123456 SLAVEOF NO ONE在从节点 7002 上执行命令:
redis-cli -p 7002 -a 123456 INFO replication[root@localhost redis]# redis-cli -p 7002 -a 123456 INFO replication
# Replication
role:slave
master_host:192.168.153.221
master_port:7001
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_read_repl_offset:182
slave_repl_offset:182
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:4ff822a26d919b9b0651d3381a421a0bd241c1aa
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:182
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:169
repl_backlog_histlen:14#如何确认是否成功配置主从,出现以下情况表示成功。
主节点:
role:master
从节点:
role:slave
master_link_status:up#测试是否可以同步数据
主节点:
[root@localhost ~]# redis-cli -p 7001
127.0.0.1:7001> auth 123456
OK
127.0.0.1:7001> SET mykey "Hello, Redis!"
OK
127.0.0.1:7001> 从节点:
[root@localhost redis]# redis-cli -p 7002
127.0.0.1:7002> auth 123456
OK
127.0.0.1:7002> get mykey
"Hello, Redis!"
127.0.0.1:7002> 成功!

RDB 持久化配置

RDB 是快照形式的持久化,在 redis.conf 中配置:

#编辑redis.conf 
vim /etc/redis/redis.conf
#快速查找 save 3600 1save 900 1      # 900秒(15分钟)内至少有1个key被改变
save 300 10     # 300秒(5分钟)内至少有10个key被改变
save 60 10000   # 60秒内至少有10000个key被改变dbfilename dump.rdb  # RDB文件名
dir /var/lib/redis   # RDB文件保存目录
stop-writes-on-bgsave-error yes  # 当后台保存出错时停止写入
rdbcompression yes   # 压缩RDB文件,(影响CPU非必要开启)
rdbchecksum yes      # 对RDB文件进行校验

AOF 持久化配置

AOF 记录所有写操作命令:

#编辑redis.conf 
vim /etc/redis/redis.confappendonly yes        # 启用AOF持久化
appendfilename "appendonly.aof"  # AOF文件名# 同步策略(选择一种):
appendfsync always    # 每次写操作都同步,最安全但性能最低
appendfsync everysec  # 每秒同步一次,推荐设置
appendfsync no        # 由操作系统决定何时同步,性能最好但可能丢失数据auto-aof-rewrite-percentage 100  # AOF文件增长比例超过100%时触发重写
auto-aof-rewrite-min-size 64mb   # AOF文件最小重写大小
aof-load-truncated yes          # 加载被截断的AOF文件
#重启服务以生效
systemctl restart redis

Redis 数据恢复

RDB 数据恢复

方法1:

自动恢复

  • Redis 启动时会自动检查配置的 dir 目录下的 dump.rdb 文件

  • 如果找到 RDB 文件,Redis 会自动加载其中的数据

方法2:

手动恢复

# 停止Redis服务
systemctl stop redis# 将备份的RDB文件复制到Redis数据目录
cp /backup/dump.rdb /var/lib/redis/dump.rdb# 启动Redis
systemctl start redis

特点

  • 恢复速度快(二进制格式,直接加载到内存)

  • 只能恢复到最后一次快照时的数据状态

  • 恢复期间Redis不可用

AOF 数据恢复

方法1:

自动恢复

  • 如果启用了 AOF (appendonly yes),Redis 会优先使用 AOF 文件恢复

  • Redis 会重新执行 AOF 文件中的所有写命令来重建数据集

方法2:

手动恢复

# 停止Redis服务
systemctl stop redis# 将备份的AOF文件复制到Redis数据目录
cp /backup/appendonly.aof /var/lib/redis/appendonly.aof# 启动Redis
systemctl start redis

特点

  • 恢复速度较慢(需要重新执行所有命令)

  • 可以恢复到更近的数据状态(取决于同步策略)

  • 支持部分恢复(可编辑 AOF 文件删除错误命令)

混合恢复(RDB+AOF)

如果同时启用了 RDB 和 AOF:

  1. Redis 4.0+ 会优先使用 AOF 文件恢复(因为 AOF 通常包含更完整的数据)

  2. 如果 AOF 不可用,会回退到使用 RDB 文件

redis-cli 常用命令:

命令描述示例
SET设置键的值redis-cli SET key value
GET获取键的值redis-cli GET key
DEL删除键redis-cli DEL key
EXISTS检查键是否存在redis-cli EXISTS key
INCR对键进行自增操作redis-cli INCR key
DECR对键进行自减操作redis-cli DECR key
MSET一次设置多个键值对redis-cli MSET key1 value1 key2 value2
MGET一次获取多个键的值redis-cli MGET key1 key2
EXPIRE设置键的过期时间(单位:秒)redis-cli EXPIRE key 3600
TTL查看键的剩余生存时间redis-cli TTL key
LPUSH将元素推入列表的左端redis-cli LPUSH listname value
RPUSH将元素推入列表的右端redis-cli RPUSH listname value
LPOP从列表的左端弹出元素redis-cli LPOP listname
RPOP从列表的右端弹出元素redis-cli RPOP listname
SADD向集合中添加元素redis-cli SADD setname value
SREM从集合中移除元素redis-cli SREM setname value
HSET向哈希中添加一个键值对redis-cli HSET hashname field value
HGET获取哈希中的某个字段的值redis-cli HGET hashname field
HDEL删除哈希中的某个字段redis-cli HDEL hashname field
ZADD向有序集合中添加成员redis-cli ZADD zsetname score member
ZREM从有序集合中移除成员redis-cli ZREM zsetname member
SLAVEOF让当前节点成为从节点并指定主节点redis-cli SLAVEOF <master-ip> <master-port>
INFO replication查看复制状态redis-cli INFO replication
MONITOR实时监控 Redis 服务器的请求redis-cli MONITOR
CLIENT LIST查看当前所有连接的客户端redis-cli CLIENT LIST
INFO查看 Redis 实例的统计信息redis-cli INFO
FLUSHDB删除当前数据库的所有键redis-cli FLUSHDB
FLUSHALL删除所有数据库的所有键redis-cli FLUSHALL
SELECT选择数据库(默认是数据库 0)redis-cli SELECT 1
AUTH认证 Redis 实例(如果设置了密码)redis-cli AUTH password
SAVE强制保存当前数据库到磁盘redis-cli SAVE
BGSAVE异步保存当前数据库到磁盘redis-cli BGSAVE
KEYS查看所有匹配的键redis-cli KEYS pattern
SCAN逐步迭代数据库中的键(适合大数据量)redis-cli SCAN 0
exit退出 redis-cli 客户端exit

这个表格总结了 Redis CLI 常用的命令和操作,帮助你快速进行 Redis 数据库的管理与操作。

查看redis.conf 文件中关键配置项

配置项说明示例
bind指定 Redis 实例绑定的 IP 地址bind 127.0.0.1
port指定 Redis 实例监听的端口号port 6379
protected-mode启用或禁用 Redis 的保护模式protected-mode yes
requirepass设置访问 Redis 的密码requirepass mypassword
replicaof (或 slaveof)配置当前实例为从节点,指定主节点地址和端口replicaof 192.168.1.100 6379
masterauth设置连接主节点时的密码masterauth mymasterpassword
daemonize是否以后台进程运行 Redisdaemonize yes

Redis 持久化(RDB 和 AOF)相关的常见配置项

配置项说明示例
save 900 1900秒内至少有1个key被改变save 900 1
save 300 10300秒内至少有10个key被改变save 300 10
save 60 1000060秒内至少有10000个key被改变save 60 10000
dbfilenameRDB文件名dbfilename dump.rdb
dirRDB文件保存目录dir /var/lib/redis
stop-writes-on-bgsave-error当后台保存出错时停止写入stop-writes-on-bgsave-error yes
rdbcompression是否压缩RDB文件rdbcompression yes
rdbchecksum对RDB文件进行校验rdbchecksum yes
appendonly启用AOF持久化appendonly yes
appendfilenameAOF文件名appendfilename "appendonly.aof"
appendfsyncAOF同步策略appendfsync everysec
auto-aof-rewrite-percentageAOF文件增长百分比超过此值时触发重写auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-sizeAOF文件最小重写大小auto-aof-rewrite-min-size 64mb
aof-load-truncated加载被截断的AOF文件aof-load-truncated yes

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词