一 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 [root@controller01 ~]# cd /var/lib/redis/ [root@controller01 redis]# ls dump.rdb [root@controller01 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 上