redis 主从复制 replication

参考链接

redis官网

主从复制运行依靠三个主要机制:

  • 当一个 master 实例和一个 slave 实例连接正常时, master 会发送一连串的命令流来保持对 slave 的更新,以便于将自身数据集的改变复制给 slave , :包括客户端的写入、key 的过期或被逐出等等。
  • 当 master 和 slave 之间的连接断开之后,因为网络问题、或者是主从意识到连接超时, slave 重新连接上 master 并会尝试进行部分重同步:这意味着它会尝试只获取在断开连接期间内丢失的命令流。
  • 当因为故障原因无法同步部分数据时,slave会全量同步一遍

redis复制的事实

redis默认使用异步复制
一个master可以拥有多个slave
slave 可以接受其他的slave连接

安全性

在使用 Redis 复制功能时的设置中,强烈建议在 master 和在 slave 中启用持久化。当不可能启用时,例如由于非常慢的磁盘性能而导致的延迟问题,应该配置实例来避免重置后自动重启。因为一旦master重启了,因为没有持久化,master的是从一个空数据集开始的,其他salve回去试图与他同步,这个slave也会被清空

配置

master配置

# 地址
bind 127.0.0.1 
# 端口
port 6379
# 后台运行
daemonize yes
# db数量
databases 20
# rdb 文件名
dbfilename dump_master.rdb
# 当前redis工作的目录 其实可以是  ./
dir /root/redis_conf/redis_master
# 开启aof持久化方式
appendonly yes
 # 每一秒aof记录一次
appendfsync everysec
# 日志文件
logfile ./6379.log
# rdb 持久化开启
save 900 1
save 300 10
save 60 10000

slave 配置

slave1

bind 127.0.0.1
port 6380  # 与master端口不一样
daemonize yes
pidfile "./redis.pid"
logfile "./redis.log"
dbfilename "dump.rdb"
# 当前redis工作的目录 其实可以是  ./
dir "/root/redis_conf/redis_slave1"
# 你要同步的master
slaveof 127.0.0.1 6379
save 900 1
save 300 10
save 60 10000

slave2

bind 127.0.0.1
port 6381 # 两个slave就是端口不一样
daemonize yes
pidfile "./redis.pid"
logfile "./redis.log"
dbfilename "dump.rdb"
dir "/root/redis_conf/redis_slave2"
save 900 1
save 300 10
save 60 10000
# 你要同步的master
slaveof 127.0.0.1 6379

其实配置就是在slave的配置上加个 slaveof ip port 就行

  • $ netstat -lntp 看看redis是否启动了 因为这里的master port是6379 如果原来已经启动了,把原来的redis杀掉
  • 当前进程
    在这里插入图片描述
    先创建好文件 此时应有3个文件一个master两个slave, 我这里有三个slave,做演示使用两个slave就行了
    log 存放redis示例的日志文件
    pid 存放redis示例的pidfile
    在这里插入图片描述
  • 启动master
    启动后会产生日志文件以及aof文件,dump文件等会也会产生
    在这里插入图片描述
    在这里插入图片描述
  • 启动两个 slave
    在这里插入图片描述
  • 查看同步信息
    info replication

6080slave信息

在这里插入图片描述
role
在这里插入图片描述

6379master信息

在这里插入图片描述

在 slave 进行写入操作会error
需要在master中写入
在这里插入图片描述
master 写入操作
在这里插入图片描述
可以看到 两个slave都能得到key

只读性质的 slave

自从 Redis 2.6 之后, slave 支持只读模式且默认开启。redis.conf 文件中的 slave-read-only 变量控制这个行为,且可以在运行时使用 CONFIG SET 来随时开启或者关闭。
如果slave想进行写入操作怎么搞

改变这个变量
在这里插入图片描述
我们可以看到 role 为slave 也可以set操作
在这里插入图片描述

发布了50 篇原创文章 · 获赞 9 · 访问量 3441
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章