Redis 集群搭建(二):Docker 部署 Redis主从同步与读写分离 断电恢复 数据持久化处理


本文基于:Redis 集群搭建(一):Docker 部署 Redis 以及相关配置信息

配置说明:
redis-master: redis 主库,挂载文件都放在 /data/redis/master 下面,端口号 6379

redis-slave: redis 从库,挂载文件都放在 /data/redis/slave 下面,端口号 6380

原理
Redis官方文档译文

Redis主从复制是如何工作的(全量同步)

如果你设置了一个从服务器,在连接时它发送了一个SYNC命令,不管它是第一次连接还是再次连接都没有关系。然后主服务器开始后台存储,并且开始缓存新连接进来的修改数据的命令。当后台存储完成后,主服务器把数据文件发送到从服务器,从服务器将其保存在磁盘上,然后加载到内存中。然后主服务器把刚才缓存的命令发送到从服务器。这是作为命令流来完成的,并且和Redis协议本身格式相同。

部分重新同步(增量同步)

主服务器端为复制流维护一个内存缓冲区。主从服务器都维护一个复制偏移量(replication offset)和master run id ,当连接断开时,从服务器会重新连接上主服务器,然后请求继续复制,假如主从服务器的两个master run id相同,并且指定的偏移量在内存缓冲区中还有效,复制就会从上次中断的点开始继续。如果其中一个条件不满足,就会进行完全重新同步。

master 配置文件
与之前相比并没有什么太多变化,不过从安全考虑,加了个 bind 来限制访问 IP

# RDB 持久化,快照保存频率
# 900秒内,如果超过1个key被修改,则发起快照保存
# 300秒内,如果超过10个key被修改,则发起快照保存
# 60秒内,如果1万个key被修改,则发起快照保存
save 900 1
save 300 10
save 60 10000

# 在进行数据镜像备份时,是否启用rdb文件压缩手段,默认为yes。
rdbcompression yes
# 解决 Redis 被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用。
stop-writes-on-bgsave-error no

# 开启 AOF 持久化
appendonly yes

# 设置密码
requirepass 111111

# 限制只接收来自于该IP 地址的请求(安全问题)
bind 0.0.0.0

 

 

1.4:redis 持久化的配置参数:   有的参数设置需要调试  注意
1.4.1:编辑配置那文件:
# vim /etc/redis/6379.conf

save 900 1 #900秒以内有1个key发生变化就快照
save 300 10 #300秒以内有10个key发生变化就快照
save 60 10000 #60秒内有10000个key变化就快照
rdbcompression yes #持久化到RDB文件时,是否压缩,"yes"为压缩,"no"则反之
rdbchecksum yes #读取和写入的时候是否支持CRC64校验,默认是开启的
dbfilename dump.rdb #文件名
dir /data/redis #保存路径
slave-read-only yes #从redis 只读
maxmemory 512M #限制redis 最大使用内存
appendonly yes #是否开启AOF
appendfilename "appendonly.aof" #保存路径,和RDB在一起
appendfsync everysec #每秒执行一次fsync,即将内存更改的数据写入磁盘


slave 配置文件
slaveof: 配置主库的 IP 和端口号
masterauth: 在主库设置了密码的情况下,从库需要密码进行授权
关于 AOF,主库开启,从库只需要 1-2 个开启持久化即可

# RDB 持久化,快照保存频率
# 900秒内,如果超过1个key被修改,则发起快照保存
# 300秒内,如果超过10个key被修改,则发起快照保存
# 60秒内,如果1万个key被修改,则发起快照保存
save 900 1
save 300 10
save 60 10000

# 在进行数据镜像备份时,是否启用rdb文件压缩手段,默认为yes。
rdbcompression yes
# 解决 Redis 被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用。
stop-writes-on-bgsave-error no

# 开启 AOF 持久化
appendonly yes
appendfsync everysec #每秒执行一次fsync,即将内存更改的数据写入磁盘

# 设置密码
requirepass 111111

# 限制只接收来自于该IP 地址的请求(安全问题)
bind 0.0.0.0

# 指定作为 master 的 redis
slaveof 127.0.0.1 6379

# 设置主库的密码
masterauth 111111

# 设置从库只读
slave-read-only yes


启动容器
挂载文件夹,启动容器

主库启动:

docker run -d --name redis-master -p 6379:6379 \
-v /data/redis/master/conf/redis.conf:/redis.conf \
-v /data/redis/master/data:/data redis \
redis-server /redis.conf

从库启动:

docker run -d --name redis-slave -p 6380:6379 \
-v /data/redis/slave/conf/redis.conf:/redis.conf \
-v /data/redis/slave/data:/data redis \
redis-server /redis.conf

接下来只需要主库新增数据,看看从库是否成功同步即可。

来看一截从库的日志 docker logs 容器ID


关于读写分离
将从库设置为只读后,即为读写分离,可以说这是为后续集群化做铺垫。

集群化后在主从库间进行负载均衡时,由于从库只读,因此写操作只能在主库上进行。
————————————————

原文链接:https://blog.csdn.net/qq_37143673/article/details/105435512

 

 

https://blog.csdn.net/john_chang11/article/details/52806178?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-1

 

https://zjxkenshine.github.io/2018/04/13/Redis%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%88%E4%BA%94%EF%BC%89%EF%BC%9A%E6%8C%81%E4%B9%85%E5%8C%96%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6%E5%93%A8%E5%85%B5%E5%8F%8A%E5%AE%89%E5%85%A8/

 

https://zhuanlan.zhihu.com/p/31498790

https://www.okayjam.com/redis%E5%AE%89%E8%A3%85%E5%92%8C%E9%AB%98%E5%8F%AF%E7%94%A8%E9%85%8D%E7%BD%AE%EF%BC%8C%E6%8C%81%E4%B9%85%E5%8C%96%EF%BC%8C%E4%B8%BB%E4%BB%8E%E6%A8%A1%E5%BC%8F%EF%BC%8C%E5%93%A8%E5%85%B5%E6%A8%A1/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值