复制就是我们所说的主从复制,主服务器数据更新后根据配置和策略,自动同步到从服务器的master/slaver机制,Master以写为主,Slave以读为主,Redis使用默认的异步复制,其特点是低延迟和高性能。
方式一:修改redis.conf配置文件
slaveof 主服务器IP 主库服务器port
方式二:使用slaveof 主服务器IP 主服务器port
命令,但是每次主服务器断开都需要重新连接
显示与复制相关的信息
info replication
master 和 slave 的复制状态以及它们的复制偏移量,连接的 slaves 列表
role
1.切入点问题?slave1、slave2是从头开始复制还是从切入点开始复制?比如从k4进来,那之前的k1,k2,k3是否也可以复制?
2.从机是否可以写?set可否?
3.主服务器shutdown后情况如何?从服务器是上位还是原地待命?
4.主服务器又回来了后,主服务器新增记录,从服务器还能否顺利复制?
5.其中一台从服务器down后在重启情况如何?
注意上面是使用slaveof
命令连接的主服务器,所以从服务器down之后,再次启动后是master,需要重新连接,除非配置进redis.conf,连接后它从头开始复制
上一个Slave可以是下一个slave的Master,slave同样可以接收其他slave的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力。
主服务器172.17.0.2
从服务器172.17.0.3,作为下一个slave的master
从服务器172.17.0.4
同样主服务器set k6,两台从从服务器都可以get k6。其次从服务器如果要写,将redis.conf中slave-read-only
改为no。
之前主服务器down掉,从服务器会一直等待主服务器,而在此期间如果从服务器执行slaveof no one
命令会将此从服务器变为master,其他从服务器可以手动执行slaveof
命令连上这个新的master。
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。
自定义目录下新建sentinel.conf文件,名字不能错。内容如下:
sentinel monitor mymaster 127.0.0.1 6379 1
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
第一行配置指示 Sentinel 去监视一个名为 mymaster(名字自己起) 的主服务器, 这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379,最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多少后成为主机。
down-after-milliseconds 选项指定了 Sentinel 认为服务器已经断线所需的毫秒数
failover-timeout故障转移过期时间。当故障转移开始后,在此时间内仍然没有触发任何故障转移操作,当前sentinel将会认为此次故障转移失败。
parallel-syncs 选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。
对于 redis-sentinel 程序, 你可以用以下命令来启动 Sentinel 系统:
redis-sentinel /path/to/sentinel.conf
对于 redis-server 程序, 你可以用以下命令来启动一个运行在 Sentinel 模式下的 Redis 服务器:
redis-server /path/to/sentinel.conf --sentinel
当主服务器down掉之后,会在从服务器中投票选出新的master
之前master启动之后成为了slave
一组sentinel能同时监控多个Master
全量同步
Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下:
增量同步
复制延时
由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。