共计 6798 个字符,预计需要花费 17 分钟才能阅读完成。
本篇内容介绍了“redis 搭建和数据落盘的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、redis 的编译安装
1、依赖的系统包
yum install -y wget gcc make tcl
2、下载包地址
1、各个版本 redis 的下载地址
http://download.redis.io/releases/
2、本文安装最新版本 4.0.9
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
3、编译安装
1、解压:tar xf redis-4.0.9.tar.gz cd redis-4.0.9
2、编译:make
3、编译测试:make test
4、安装:make PREFIX=/usr/local/redis install
5、拷贝配置文件到配置文件夹:mkdir /usr/local/redis/etc cp redis-4.0.9/redis.conf /usr/local/redis/etc/
二、redis 的配置参数
必要的参数设置
将“daemonize”属性设置为“yes”,表示我们会以后台进程形式启动 Redis 服务;将“port”属性设置为指定的端口,这里默认为“6379”;将“logfile”属性设置为指定的日志路径;将“dir”设置为指定的工作目录
将“requirepass”设定为本机连接的密码
其余的属性可以保持默认。
其他参数设置
bind:指定 redis 只接收来自该 IP 的请求,如果不设置,那么将处理所有请求,在生产环节中最好设置该项
protected-mode:保护模式,默认是开启状态,只允许本地客户端连接, 可以设置密码或添加 bind 来连接
port:指定 redis 运行的端口,默认是 6379
tcp-backlog:TCP 监听的最大容纳数量,在高并发的环境下,你需要把这个值调高以避免客户端连接缓慢的问题。Linux 内核会把这个值缩小成 /proc/sys/net/core/somaxconn 对应的值,要提升并发量需要修改这两个值才能达到目的;默认是 511
timeout:指定在一个 client 空闲多少秒之后关闭连接(0 表示永不关闭)tcp-keepalive:单位是秒,表示将周期性的使用 SO_KEEPALIVE 检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是 300s,如果设置为 0,则不会周期性的检测
daemonize:默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。当 redis 作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面
supervised:可以通过 upstart 和 systemd 管理 Redis 守护进程,默认为 no,没有启动互动
supervised no - 没有监督互动
supervised upstart - 通过将 Redis 置于 SIGSTOP 模式来启动信号
supervised systemd - signal systemd 将 READY = 1 写入 $ NOTIFY_SOCKET
supervised auto - 检测 upstart 或 systemd 方法基于 UPSTART_JOB 或 NOTIFY_SOCKET 环境变量
pidfile:配置 PID 文件路径,当 redis 作为守护进程运行的时候,它会把 pid 默认写到 /var/redis/run/redis_6379.pid 文件里面
loglevel:定义日志级别,可以是下面的这些值: debug(记录大量日志信息,适用于开发、测试阶段) verbose(较多日志信息) notice(适量日志信息,使用于生产环境) warning(仅有部分重要、关键信息才会被记录)logfile:日志文件的位置
syslog-enabled:要想把日志记录到系统日志,就把它改成 yes,也可以可选择性的更新其他的 syslog 参数以达到你的要求
syslog-ident:设置系统日志的 ID
syslog-facility:指定系统日志设置,必须是 USER 或者是 LOCAL0-LOCAL7 之间的值
databases:设置数据库的数目。默认的数据库是 DB 0 ,可以在每个连接上使用 select dbid 命令选择一个不同的数据库,dbid 是一个介于 0 到 databases - 1 之间的数值
always-show-logo:redis 启动时是否显示 login
save 间隔时间(秒) 写入次数:根据给定的时间间隔和写入次数将数据保存到磁盘
save 900 1:900 秒内如果至少有 1 个 key 的值变化,则保存
save 300 10:300 秒内如果至少有 10 个 key 的值变化,则保存
save 60 10000:60 秒内如果至少有 10000 个 key 的值变化,则保存
stop-writes-on-bgsave-error:如果用户开启了 RDB 快照功能,那么在 redis 持久化数据到磁盘时如果出现失败,默认情况下,redis 会停止接受所有的写请求
rdbcompression:对于存储到磁盘中的快照,可以设置是否进行压缩存储,如果是的话,redis 会采用 LZF 算法进行压缩
rdbchecksum:在存储快照后,我们还可以让 redis 使用 CRC64 算法来进行数据校验,但是这样做会增加大约 10% 的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能
dbfilename:设置快照的文件名
dir:设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名
requirepass:本机连接的密码
slaveof masterip masterport:主从复制,使用 slaveof 来让一个 redis 实例成为另一个 reids 实例的副本,默认关闭
masterauth master-password:如果 master 需要密码认证,就在这里设置,默认不设置
slave-serve-stale-data:当一个 slave 与 master 失去联系,或者复制正在进行的时候,slave 可能会有两种表现
1) 如果为 yes ,slave 仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候
2) 如果为 no ,在你执行除了 info he salveof 之外的其他命令时,slave 都将返回一个 SYNC with master in progress 的错误
slave-read-only:你可以配置一个 slave 实体是否接受写入操作
appendonly: 默认 redis 使用的是 rdb 方式持久化,这种方式在许多应用中已经足够用了。但是 redis 如果中途宕机,会导致可能有几分钟的数据丢失,根据 save 来策略进行持久化,Append Only File 是另一种持久化方式,可以提供更好的持久化特性。Redis 会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时 Redis 都会先把这个文件的数据读入内存里,先忽略 RDB 文件
appendfilename:aof 文件名
appendfsync:aof 持久化策略的配置
appendfsync always,表示每次写入都执行 fsync,以保证数据同步到磁盘
appendfsync everysec,表示每秒执行一次 fsync,可能会导致丢失这 1s 数据
appendfsync no,表示不执行 fsync,由操作系统保证数据同步到磁盘,速度最快
no-appendfsync-on-rewrite:指定是否在后台 aof 文件 rewrite 期间调用 fsync,默认为 no,表示要调用 fsync(无论后台是否有子进程在刷盘);Redis 在后台写 RDB 文件或重写 afo 文件期间会存在大量磁盘 IO,此时,在某些 linux 系统中,调用 fsync 可能会阻塞
auto-aof-rewrite-percentage:指定 redis 重写 aof 文件的条件,默认为 100,表示与上次 rewrite 的 aof 文件大小相比,当前 aof 文件增长量超过上次 afo 文件大小的 100% 时,就会触发 background rewrite。若配置为 0,则会禁用自动 rewrite
auto-aof-rewrite-min-size:指定触发 rewrite 的 aof 文件大小。若 aof 文件小于该值,即使当前文件的增量比例达到 auto-aof-rewrite-percentage 的配置值,也不会触发自动 rewrite。即这两个配置项同时满足时,才会触发 rewrite
aof-rewrite-incremental-fsync:aof rewrite 过程中, 是否采取增量文件同步策略, 默认为“yes”。 rewrite 过程中, 每 32M 数据进行一次文件同步, 这样可以减少 aof 大文件写入对磁盘的操作次数
slowlog-log-slower-than:slog log 是用来记录 redis 运行中执行比较慢的命令耗时
三、redis 的单实例启动
启动
1、cd /usr/local/redis
2、./bin/redis-server ./etc/redis.conf
客户端命令行进入
1、cd /usr/local/redis
2、./bin/redis-cli -h 127.0.0.1 -p 6379 -a 123456
127.0.0.1:6379 set name beijing
OK
127.0.0.1:6379 get name
beijing
关闭
1、cd /usr/local/redis
2、./bin/redis-cli -h 127.0.0.1 -p 6379 -a 123456 shutdown
四、redis 的主从配置启动
1、master,配置文件修改
port 6379
logfile /data/redis/data6379/redis.log
pidfile /var/run/redis_6379.pid
dir /data/redis/data6379
requirepass 123456
主 redis 一般配置为不使用 RDB 和 AOF 持久化到硬盘
#save 900 1
#save 300 10
#save 60 10000
appendonly no
2、slave,配置文件修改
port 6380
logfile /data/redis/data6380/redis.log
pidfile /var/run/redis_6380.pid
dir /data/redis/data6380
requirepass 123456
slaveof 127.0.0.1 6379
masterauth 123456
slave-read-only yes
从 redis 可以配置为 RDB 和 AOF 持久化到硬盘
save 900 1
save 300 10
save 60 10000
appendonly yes
3、启动 master 和 slave
1、cd /usr/local/redis
2、./bin/redis-server ./etc/redis6379.conf
3、./bin/redis-server ./etc/redis6380.conf
4、验证主从写入数据同步
master
[root@dbtest1 redis]# ./bin/redis-cli -h 127.0.0.1 -p 6379 -a 123456
127.0.0.1:6379 get name
(nil)
127.0.0.1:6379 set name beijing
OK
127.0.0.1:6379 get name
beijing
slave
[root@dbtest1 redis]# ./bin/redis-cli -h 127.0.0.1 -p 6380 -a 123456
127.0.0.1:6380 get name
beijing
五、数据落盘 RDB 和 AOF 的区别
RDB 的回写方式
同步回写即 SAVE 命令,主进程直接向磁盘回写数据。在数据大的情况下会导致系统假死很长时间,所以一般不是推荐的
异步回写即 BGSAVE 命令,主进程 fork 后,复制自身并通过这个新的进程回写磁盘,回写结束后新进程自行关闭。由于这样做不需要主进程阻塞,系统不会假死
RDB 的特点
* RDB 就是 Snapshot 快照存储,是默认的持久化方式
* 可理解为半持久化模式,即按照一定的策略周期性的将数据保存到磁盘,save 间隔时间(秒) 写入次数:根据给定的时间间隔和写入次数将数据保存到磁盘
* 对应产生的数据文件为 dump.rdb,通过配置文件中的 save 参数来定义快照的周期
* Redis 的 RDB 文件不会坏掉,因为其写操作是在一个新进程中进行的
* 当生成一个新的 RDB 文件时,Redis 生成的子进程会先将数据写到一个临时文件中,然后通过原子性 rename 系统调用将临时文件重命名为 RDB 文件,这样在任何时候出现故障,Redis 的 RDB 文件都总是可用的
AOF 的特点
* AOF(Append-Only File) 比 RDB 方式有更好的持久化性
* 由于在使用 AOF 持久化方式时,Redis 会将每一个收到的写命令都通过 Write 函数追加到文件中,类似于 MySQL 的 binlog
* 当 Redis 重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容
* 对应的设置参数为: * appendonly yes,启用 AOF 持久化方式
* appendfilename appendonly.aof,AOF 文件的名称,默认为 appendonly.aof
* appendfsync always,每次收到写命令就立即强制写入磁盘,是最有保证的完全的持久化,但速度也是最慢的,一般不推荐使用
* appendfsync everysec,每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,是受推荐的方式
* appendfsync no,完全依赖 OS 的写入,一般为 30 秒左右一次,性能最好但是持久化最没有保证,不被推荐
* AOF 的完全持久化方式同时也带来了另一个问题,持久化文件会变得越来越大,为了压缩 AOF 的持久化文件,Redis 提供了 bgrewriteaof 命令,收到此命令后 Redis 将使用与快照类似的方式将内存中的数据以命令的方式保存到临时文件中,最后替换原来的文件,以此来实现控制 AOF 文件的增长
按照以下优先级进行数据的恢复
1、如果只配置 AOF,重启时加载 AOF 文件恢复数据
2、如果同时配置了 RDB 和 AOF,启动时只加载 AOF 文件恢复数据
3、如果只配置 RDB,启动是将加载 RDB 文件恢复数据(需要注意的为:使用 AOF 备份数据进行恢复数据时需要主库开启 appendonly yes,才会恢复数据;使用 RDB 备份数据进行恢复数据时,不需要主库开启对应参数)
六、主库宕机后的处理
1、主库出现宕机
此处模拟主库宕机
1、cd /usr/local/redis
2、./bin/redis-cli -h 127.0.0.1 -p 6379 -a 123456 shutdown
2、将 slave 上的同步状态取消,避免主库在未完成数据恢复前就重启,进而直接覆盖掉从库上的数据,导致所有的数据丢失
127.0.0.1:6380 slaveof no one
3、拷贝从机数据到主机上
1、拷贝 AOF 数据用于恢复
cp data6380/appendonly.aof data6379/appendonly.aof
主库./etc/redis6379.conf 开启 appendonly yes
2、拷贝 RDB 数据用于恢复
127.0.0.1:6380 BGSAVE
cp data6380/dump.rdb data6379/dump.rdb
4、主库重新启动
1、cd /usr/local/redis
2、./bin/redis-server ./etc/redis6379.conf
5、重新进行主从同步的配置,这个时候就不用再指定密码了,有原始记录
127.0.0.1:6380 slaveof 127.0.0.1 6379
“redis 搭建和数据落盘的方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!
正文完