一 Redis 持久化和复制
1 Redis持久化的两种方式:
1 RDB:可以再指定的时间间隔内生成数据集的时间点快照(每隔一定的时间做一个快照,进行将其刷新到磁盘上,断电)
2 AOF:把服务器执行的所有写操作命令记录下来,然后在服务器启动时,通过重新执行这些命令来还原数据集,AOF文件的操作相当于自增操作,
Redis可以同时使用RDB和AOF这两种方式。
当Redis重启时,会优先使用AOF文件来还原数据集。
你也可以关闭持久化功能
RDB:可以做备份,RDB可以最大化Redis性能,父进程在保存RDB文件时唯一要做的就是fork出一个子进程,然后这个子进程会处理接下来的所有保存工作,父进程无需进行任何磁盘的I/O操作。
RDB:数据恢复快
RDB缺点:时间间隔不能太频繁,fork可能会非常耗时,导致服务器在某一时间段内停止处理客户端,
save 900 1 在900s内,如果有一个key被改变,那么就进行快照
save 300 10 如果在300s内,如果有10个key被改变,那么久进行快照
save 60 10000 同上
快照的存储位置:
The filename where to dump the DB
dbfilename dump.rdb
[[email protected] ~]# cd /var/lib/redis/
[[email protected] redis]# ls
dump.rdb
[[email protected] redis]# file dump.rdb
dump.rdb: data
快照的流程
1 fork子进程
2 父进程继续干活
3 子进程开始将内存中的数据开始写入磁盘中的临时文件
4 当子进程写完数据后,用临时文件替换RDB文件,此RDB文件是经过压缩的,因此其占用空间小
5 服务启动时,直接将此文件载入到内存中即可
AOF优点
每一秒执行写操作,down机只会丢失1秒的数据
AOF 文件是一个只进行追加操作的日志文件,即使日志因为某些原因而包含了威胁如完整的命令,Redis-check-aof工具也可以修复
Redis可以在AOF文件体积变大时,自动地在后台对AOF进行重写,
AOF 很容易被读懂
AOF缺点:
1 体积大于RDB
2 速度慢于RDB
Redis 复制(replication)
Redis支持简单且医用的主从复制(master-slave replication)功能,该功能可以让服务器(slave server)成为主服务器的精确复制品
2 Redis复制
1 使用异步复制,从Redis2.8开始,从服务器会以每一秒的频率向主服务器报告复制流的处理进度
2 一个主服务器可以有多个从服务器
3 不仅主服务器可以有从服务器,从服务器也可以有自己的从服务器
4 复制功能不会阻塞主服务器: 即使有一个或多个从服务器正在进行初次同步, 主服务器也可以继续处理命令请求。
5 复制功能也不会阻塞从服务器: 只要在?redis.conf?文件中进行了相应的设置, 即使从服务器正在进行初次同步, 服务器也可以使用旧版本的数据集来处理命令查询。
6 不过, 在从服务器删除旧版本数据集并载入新版本数据集的那段时间内, 连接请求会被阻塞。
7 你还可以配置从服务器, 让它在与主服务器之间的连接断开时, 向客户端发送一个错误。
8 复制功能可以单纯地用于数据冗余(data redundancy), 也可以通过让多个从服务器处理只读命令请求来提升扩展性(scalability): 比如说, 繁重的?SORT?命令可以交给附属节点去运行。
9 可以通过复制功能来让主服务器免于执行持久化操作: 只要关闭主服务器的持久化功能, 然后由从服务器去执行持久化操作即可。
二 环境准备
1 安装gcc
2 安装软件
server1
复制到其他主机
server2
server3
三 配置主从架构:
1 server1 为主服务器:
配置其监听端口为所有端口
2 server 2从服务器端配置:
配置监听段口为所有
2 配置主服务器的IP和端口为6379和server1 IP
3 server3从服务器端配置:
服务器端及客户端重启服务加载配置,并在服务端插入数据:
服务端查看绑定端口情况
客户端查看绑定端口情况
4 客户端查看服务端插入数据是否同步成功:
四 Redis 高可用配置:
1 环境:
主机名 | IP地址 | 描述 |
---|---|---|
server 1 | 192.168.3.10 | master |
server2 | 192.168.3.20 | slave |
server3 | 192.168.3.30 | slave |
2 Redis sentinel介绍
sentinel 的三个任务:
1 监控(monitoring):不断检测主服务器和从服务器是否运行正常
2 提醒(notification): 当被监控的某个redis服务器出现问题时,sentinel 可以通过API向管理员或其他应用程序发送通知:
3 自动故障迁移:当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
启动redis-sentinel程序:
对于 redis-sentinel 程序, 你可以用以下命令来启动 Sentinel 系统:
对于 redis-server 程序, 你可以用以下命令来启动一个运行在 Sentinel 模式下的 Redis 服务器:
redis-server /path/to/sentinel.conf --sentinel
两种方法都可以启动一个 Sentinel 实例。
启动 Sentinel 实例必须指定相应的配置文件, 系统会使用配置文件来保存 Sentinel 的当前状态, 并在 Sentinel 重启时通过载入配置文件来进行状态还原。
如果启动 Sentinel 时没有指定相应的配置文件, 或者指定的配置文件不可写(not writable), 那么 Sentinel 会拒绝启动。
sentinel API
默认情况下,sentinel 使用TCP的26379端口
sentinel 接受redis协议格式的命令请求,所以你可以使用 redis-cli 或者任何其他 Redis 客户端来与 Sentinel 进行通讯。
有两种方式可以和 Sentinel 进行通讯:
第一种方法是通过直接发送命令来查询被监视 Redis 服务器的当前状态, 以及 Sentinel 所知道的关于其他 Sentinel 的信息, 诸如此类。
另一种方法是使用发布与订阅功能, 通过接收 Sentinel 发送的通知: 当执行故障转移操作, 或者某个被监视的服务器被判断为主观下线或者客观下线时, Sentinel 就会发送相应的信息。
2 复制配置文件:
2 修改配置:
参数详解:
1 sentinel monitor mymaster 192.168.3.10 6379 2
设置master 并写入如果有两个节点认为主服务器down机,则主服务器down机
主观下线和客观下线
指单个实例sentinel实例对服务器作出的下线判断操作
如果服务器在给定的毫秒数之内, 没有返回 Sentinel 发送的 PING 命令的回复, 或者返回一个错误, 那么 Sentinel 将这个服务器标记为主观下线(subjectively down,简称 SDOWN )。
客观下线:多个slave对同一个服务器作出sdown判断
1 sentinel down-after-milliseconds mymaster 5000
设置认为服务器断线的确认时间,即5s后确认其断线
2 sentinel config-epoch mymaster 1
设置当主服务器down机后负责与新的master同步的slave 的数量,一旦slave参与与master之间的消息同步,则其不能对外客户端进行响应
4 复制配置文件至其他节点:
5 启动服务:
6 进行测试:
此时的master 为server2,如果将server2 down机后,由server1接管
五 Redis 集群:
1 添加相关文件:
2 创建配置文件
3 拷贝配置文件到其他节点:
4 修改配置文件端口号
5 安装redis用以启动此服务
1 安装gcc
2 安装redis
启动服务:其他的一次类推
查看启动情况
6 集群搭建:
1 安装相关软件用于搭建集群:
2 集群启动
3 集群查看
4 基本操作:
1 添加节点:
启动服务:
查看服务:
1 随机添加节点:
2 添加master节点:
3 为指定的master添加节点:
2 节点的移动,将某一个slave 节点移动到对应的master 上
原文地址:http://blog.51cto.com/11233559/2110938