redis实战-数据安全与性能保障

    xiaoxiao2021-03-25  86

    持久化

    数据存储于硬盘

    主从:通过从服务器保存和持久化,如monogodb的replication set配置

    日志:操作生成日志并通过日志来恢复数据,mysql的主从复制

    将内存中的数据存储到硬盘主要是为了之后重用数据,或者为了防止系统故障而将数据备份到远程位置,

    RDB快照持久化

    快照持久化:将存在某一时刻的所有数据写入硬盘里面。可以做数据备份,拷贝到其他服务器上可以达到数据同步。快照写入dbfilename filename

    dir 指定AOF和rdb公用的目录。

    持久化选项:

    每隔几分钟几次进行操作, save 60 1000 在写入rdb文件的时候发生错误就停止写入,比如磁盘写满导致写入错误。 stop-writes-on-bgsave-error no 是否进行压缩 rdbcompression yes rdb保存的文件 dbfilename dump.rdb 存放rdb的目录 dir ./ 存储和加载RDB文件时候校验。 rdbchecksum yes 写入RDB文件的条件,如果满足条件进行写入RDB文件。可以将写入条件注释掉,RDB就禁止写入 save 900 1如果在900s有一个change时写入rdb save 300 10如果在300s有10个change是写入rdb save 60 10000 如果在60s有10000个change时写入rdb

    RDB导出原理:

    主进程:redis-server处理客户端请求,在rdb进行导出的时候同时redis-server还能响应客户端请求。 bgsave子进程:rdb导出进程,bgsave进程进行导出,主进程开辟一个子进程。 save命令阻塞redis服务器进程,直到RDB文件创建完毕,在阻塞期间不接受任何请求。

    RDB文件载入工作是在服务器启动的时候自动执行的,没有专门的用于载入RDB文件的命令。

    执行10000条命令 [root@localhost bin]# ./redis-benchmark -n 10000

    注意:如果没有达到RDB保存条件,断电就会导致部分数据来不及存储到RDB文件中。这个在商业系统中是不能出现的,新增一个AOF来进行弥补

    个人开发注意点:

    把开发环境的设置尽量贴近生产环境,有助于判断快照是否生成得过于频繁或者稀少。 (频繁浪费资源,稀少可能导致数据大量丢失) 根据实际情况来设置save保存条件。
    大数据时注意的点

    AOF日志持久性

    AOF:append only file追加到文件,通过保存redis服务器所执行的写命令来记录数据库状态。会影响一定效率的redis请求。这个根据实际应用场景来决定是否开启。

    相关命令:

    appendonly no是否打开AOF日志功能 appendfilename /var/rdb/appendonly.aof指定aof存放路径文件名。 appendfsync always 每一个命令立即同步到aof,安全,但是速度慢。 appendfsync everysec 折中方案,每秒写一次。 appendfsync no写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof同步频率低,速度快。 no-appendfsync-on-rewrite yes正在导出rdb快照的过程中,要不要停止同步aof,如果选择停止AOF,避免I/O频繁操作。 如果暂停aof,所有的操作会缓存在内存队列里面,dump完成后,统一写入aof。 auto-aof-rewrite-percentage 100 aof文件大小比起上次重写时的大小,增长率100%时候,重写。 auto-aof-rewrite-min-size 64mb aof文件至少超过64M时候,重写。
    持久化注意点
    恢复rdb和AOF,rdb恢复的是比较快的。rdb数据是内存的映射直接载入内存比较快。 AOF使用的是命令,需要时间。 如果aof和rdb同时存在的话,会使用aof进行恢复。

    redis主从复制

    单点故障的防护,搭建集群,主从备份,防止主机宕机。读写分离,分担主服务器的压力,任务分类,如让从服务器分别分担备份工作与计算工作。

    星型结构

    master---->slave1 | | slave2

    线型结构

    master---->slave1----->slave2

    主从通讯过程

    1、slave主动发起请求建立连接master 2、master直接dump rdb文件传输给slave,同时缓存aof 3、等slave恢复完rdb文件的时候,master便发送缓存的aof给slave使得数据达到同步。 4、replicationfeedslaves,master一旦发生变动就通知slave。
    实验配置过程

    在同一台服务器上配置不同的端口运行三个redis服务器,并配置不一样的配置启动文件。采用实验结构星型结构,服务器6379作为master

    1、配置从服务器: 跑在6380端口

    复制配置文件,修改配置端口信息 [root@localhost bin]# ls redis6381.conf redis6380.conf redis.conf 修改从服务器配置文件: [root@localhost bin]# vi redis6380.conf 修改端口 port 6380 修改pid,进程文件。 pidfile /var/run/redis_6380.pid 开启rdb,直接在从服务器上进行rdb备份,主服务器就关闭rdb dbfilename dump6380.rdb 设置slave: 设置主机的IP地址和端口 slaveof 127.0.0.1 6379 配置另一台从服务器6381 关闭rdb,注释save 关闭aof,appendonley no

    注意:主服务器可以关闭RDB快照,开启aof,备份工作可以交给slave从服务器。分担主服务器压力

    从服务器配置连接主服务器密码:masterauth password配置主服务器的密码。

    配置主服务器密码: requirepass password设置主服务器密码 客户端进去需要进行auth password进行连接。

    缺陷:

    如果每次slave断开后,无论是主动断开还是网络故障, 再连接master,都要master全部dump出来RDB,再AOF,即同步的过程都要执行一遍。 所以要记住,多台slave不要一下子启动起来,会使得主服务器I/O飙升。甚至宕机。

    运维相关命令

    TIME 查看时间戳与微秒数 DBSIZE 查看当前库中的key数量 BGREWRITEAOF 后台进程重写AOF BGSAVE 后台保存rdb快照 SAVE 保存rdb快照 LASTSAVE 上次保存时间 SLAVEOF 设为slave服务器 FLUSHALL 清空所有db FLUSHDB 清空当前db SHUTDOWN[""|save|nosave] 断开连接,关闭服务器 SLOWLOG 显示慢查询 INFO 显示服务器信息 CONFIG GET 获取配置信息 CONFIG SET 设置配置信息 MONITOR 打开控制台 SYNC 主从同步 CLIENT LIST 客户端列表 CLIENT KILL 关闭某个客户端 CLIENT SETNAME 为客户端设置名字 CLIENT GETNAME 获取客户端名字 time 查看时间戳与微秒数 127.0.0.1:6379> time 1) "1489301930" 2) "878970" dbsize查看当前数据库中的key数量。 127.0.0.1:6379> dbsize (integer) 1 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> dbsize (integer) 0 127.0.0.1:6379[1]> select 0 OK 127.0.0.1:6379> dbsize (integer) 1 bgrewriteaof后台重写aof,后台重写aof 127.0.0.1:6379> bgrewriteaof Background append only file rewriting started BGSAVE 子进程,后台保存rdb快照 SAVE 当前进程,阻塞型保存rdb快照 127.0.0.1:6379> bgsave Background saving started 127.0.0.1:6379> save OK 查看上次保留时间lastsave如果redis崩溃,可以查看上次保存时间。 7.0.0.1:6379> lastsave (integer) 1489302208 FLUSHALL 清空所有db FLUSHDB 清空当前db 从服务器不允许使用清空数据。设置slave-read-only从服务器只读 127.0.0.1:6381> flushall (error) READONLY You can't write against a read only slave. info返回redis服务器信息 info memory / info cpu / info stat # Memory used_memory:842456 used_memory_human:822.71K used_memory_rss:7852032 used_memory_rss_human:7.49M used_memory_peak:842456 used_memory_peak_human:822.71K total_system_memory:1912483840 total_system_memory_human:1.78G used_memory_lua:37888 used_memory_lua_human:37.00K maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction mem_fragmentation_ratio:9.32 mem_allocator:jemalloc-4.0.3 主从复制情况 # Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=6380,state=online,offset=1448,lag=1 slave1:ip=127.0.0.1,port=6381,state=online,offset=1448,lag=1 master_repl_offset:1448 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:1447 持久化信息 # Persistence loading:0 rdb_changes_since_last_save:3 rdb_bgsave_in_progress:0 rdb_last_save_time:1489302208 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:0 rdb_current_bgsave_time_sec:-1 aof_enabled:1 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:0 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok .... fork耗时 # Stats total_connections_received:3 total_commands_processed:1920 instantaneous_ops_per_sec:1 total_net_input_bytes:69245 total_net_output_bytes:6111955 instantaneous_input_kbps:0.07 ..... 查看reids.config的配置文件中的参数信息。 127.0.0.1:6379> config get requirepass 1) "requirepass" 2) "" 127.0.0.1:6379> config get save 1) "save" 2) "" 127.0.0.1:6379> config get appendonly 1) "appendonly" 2) "yes" 查看慢日志设置情况。 127.0.0.1:6379> config get slowlog-log-slower-than 1) "slowlog-log-slower-than" 2) "10000" config set 参数名 参数值,用来设置redis的配置参数值。 127.0.0.1:6379> config set slowlog-log-slower-than 100 OK 127.0.0.1:6379> config get slowlog-max-len 1) "slowlog-max-len" 2) "128" slowlog get N查看获取慢日志。 shutdown [save/nosave]关闭是否保存。
    转载请注明原文地址: https://ju.6miu.com/read-36416.html

    最新回复(0)