飞道的博客

Redis 集群搭建(二):Redis主从同步与读写分离

325人阅读  评论(0)

Redis 集群搭建(二):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

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

# 设置密码
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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场