磁盘,所以这一切就完全依赖于操作系统的调试了。对大多数 Linux 操作系统,是每 30 秒
进行一次 fsync,将缓冲区中的数据写到磁盘上。
2)appendfsync everysec
当设置 appendfsync 为 everysec 的时候,Redis 会默认每隔一秒进行一次 fsync 调用,将
缓冲区中的数据写到磁盘。但是当这一 次的 fsync 调用时长超过 1 秒时。Redis 会采取延迟
fsync 的策略,再等一秒钟。也就是在两秒后再进行 fsync,这一次的 fsync 就不管会执行多
长时间都会进行。这时候由于在 fsync 时文件描述符会被阻塞,所以当前的写操作就会阻塞。
所以,结论就是:在绝大多数情况下,Redis 会每隔一秒进行一次 fsync。在最坏的情况下,
两秒钟会进行一次 fsync 操作。
这一操作在大多数数据库系统中被称为 group commit,就是组合多次写操作的数据,一次性
将日志写到磁盘。
3)appednfsync always
当设置 appendfsync 为 always 时,每一次写操作都会调用一次 fsync,这时数据是最安全的,
当然,由于每次都会执行 fsync,所以其性能也会受到影响
建议采用 appendfsync everysec(缺省方式)
建议快照模式可以和 AOF 模式同时开启,互补影响
3. 主从备份和集群模式(3.0 以上版本)选择
Redis 目前可用版本分为 2.x 和 3.x 两个版本
Redis2.x 版本较为成熟稳定(windows 平台的稳定性官方没有验证),可以支持数据持久化,
主从备份。上海 BigData 有实现了主从切换(linux 环境)。
Redis3.x 版本新增了 cluster(集群)模式,需要自己开发创建集群的工具(EC2team 用的是
自己用 java 开发的工具),目前可以下载到的是 bata 版,稳定性不能保证。台湾一个 team
上周用了集群(linux 环境)突然挂死,有数据丢失。
综上所述,根据我们组业务数据量的大小和目前 Redis 对 windows 环境的支持情况,适合用
Redis2.x 版本,主从备份模式。
主从备份模式主要命令:
slaveof 192.168.0.100 6379 (ip port=>映射到主服务器上)
masterauth xxx(如果 master 设置了验证密码需要配置该项)
4. 主从备份方案
Redis-Sentinel 是 Redis 官方推荐的高可用性(HA)解决方案,当用 Redis 做 Master-slave 的
高可用方案时,假如 master 宕机了,Redis 本身(包括它的很多客户端)都没有实现自动进行
主备切换,而 Redis-sentinel 本身也是一个独立运行的进程,它能监控多个 master-slave 集群,
发现 master 宕机后能进行自动切换。
Sentinel
当前最新的稳定版本称为
Sentinel 2(
与之前的
Sentinel 1
区分开来)。随着
redis2.8
的安装包一起发行。安装完
Redis2.8
后,可以在
redis2.8/src/
里面找到
Redis-sentinel
的启动程序。
Sentinel 工作原理
(1)每个 Sentinel 以每秒钟一次的频率向它所知的 Master,Slave 以及其他 Sentinel 实例
发送一个 PING 命令
( 2 ) 如 果 一 个 实 例 ( instance ) 距 离 最 后 一 次 有 效 回 复 PING 命 令 的 时 间 超 过
down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
(3)如果一个 Master 被标记为主观下线,则正在监视这个 Master 的所有 Sentinel 要以每
秒一次的频率确认 Master 的确进入了主观下线状态。