1、redis服务配置文件详解
2、RDB、AOF详解及优缺点总结
3、Redis主从实现
----------------------------------------------------------------------------------------------------
1、redis服务配置文件详解
bind 0.0.0.0 #设置监听地址 protected-mode yes #redis3.2之后的新特性,未设置bind地址和密码时,拒绝访问redis port 6379 #设置监听端口 tcp-backlog 511 #TCP三次握手队列值 timeout 0 #客户端和redis服务端连接超时时间,为0永不超时,要设置就长点,如600s tcp-keepalive 300 #会话保持时间 daemonize yes #以守护进程运行redis supervised systemd #用systemd管理redis pidfile /usr/local/redis/run/redis_6379.pid #pid文件路径 loglevel notice #日志级别 logfile "/usr/local/redis/logs/redis_6379.log" #日志文件路径 databases 16 #设置redis db库数量,默认16个 always-show-logo no #启动时不显示logo save "" #不启用默认快照策略,多个save表示或关系 stop-writes-on-bgsave-error no #RDB快照出错时,不禁止redis写入操作 rdbcompression yes #RDB快照时压缩 rdbchecksum yes #RDB快照时校验 dbfilename dump_6379.rdb #RDB快照名称,每次快照会覆盖旧文件 dir /usr/local/redis/data #RDB快照和AOF文件存放路径 slaveof <masterip> <masterport> #主从复制时,master的IP和端口 masterauth <master-password> #主从复制时,master的密码 slave-serve-stale-data yes #slave与master失去连接或复制正在进行时,为yes时,继续响应客户端的读请求。 为no报错,SYNC with master in progress。 slave-read-only yes #slave设置为只读 repl-diskless-sync no #是否使用socket模式复制数据,为yes时,dump RDB不落磁盘,直接到slave的socket。 为no时,dump RDB落磁盘,落完磁盘再发送给slave。 repl-diskless-sync-delay 0 #repl-diskless-sync为yes时,延迟时间内连接的所有slave,一起同步数据。 复制开始后没结束前,master不会响应新slave的复制请求,直到下一次同步开始 repl-ping-slave-period 10 #slave根据master设置的间隔时间对master进行ping检测 repl-timeout 60 #复制连接的超时时长,须大于repl-ping-slave-period,否则经常报错超时 repl-disable-tcp-nodelay no #在socket模式下,为yes时,使用更少的TCP包和带宽向slave发送数据,内核默认延迟40ms。 为no时,延迟减少,占用更多带宽。 repl-backlog-size 512mb #复制缓冲区大小,只在slave连接后才分配,不与maxmemory合并计算。 repl-backlog-ttl 3600 #多长时间slave不连接master,master就清空复制缓冲区 slave-priority 100 #slave优先级,低优先级slave在sentinel选举新master时优先,为0永不选举 requirepass root #设置redis连接密码 rename-command FLUSHDB "LqYtt96iKVUP" #重命名高危命令 rename-command FLUSHALL "+QAmxR9Q/YIL" #重命名高危命令 maxclients 10000 #最大客户端连接数 maxmemory 1073741824 #分配给redis的最大内存,单位:Byte appendonly yes #启用AOF日志记录,相当于Mysql的binlog appendfilename appendonly_6379.aof #AOF文件名称 appendfsync always #fsync策略,AOF落盘配置,为no时,由操作系统决定何时同步到磁盘。 为everysec时,每秒执行一次AOF落盘。 为always时,每条AOF记录都落盘。 no-appendfsync-on-rewrite no #AOF文件重写期间,为no时,立即同步新AOF记录。 为yes时,暂缓同步新AOF记录。 auto-aof-rewrite-percentage 100 #AOF文件超过指定比例时重写,减小AOF文件体积。 auto-aof-rewrite-min-size 64mb #AOF文件超过指定大小时重写 aof-load-truncated yes #加载由于异常原因导致末尾格式异常的AOF文件 aof-use-rdb-preamble no #使用RDB与AOF混合持久化格式 lua-time-limit 5000 #lua脚本最大执行时间 cluster-enabled yes #开启集群模式 cluster-config-file /usr/local/redis/etc/nodes-6379.conf #由node节点自动生成的集群配置文件 cluster-node-timeout 15000 #集群中node节点连接超时时间 cluster-slave-validity-factor 10 #故障转移时,与master断开时间超过指定时间的node节点不能选举为master cluster-migration-barrier 1 #集群迁移屏障,主节点最少需要的正常工作从节点的个数 cluster-require-full-coverage no #集群请求槽位全部覆盖,16384个槽位。主节点宕机后槽位不全仍对外提供服务。 slowlog-log-slower-than 10000 #慢查询阈值:10ms slowlog-max-len 128 #记录慢查询的条数
2、RDB、AOF详解及优缺点总结
#RDB:Redis Database,基于时间的快照,相当于执行mysqldump
原理:Redis主进程fork一个子进程,通过写时复制机制,子进程dump内存数据至temp文件,完成后替换上一个RDB文件,关闭子进程。
优点:恢复速度比AOF快
缺点:不能实时保存数据
#AOF:Append Only File,将操作过程依次写入文件,相当于mysql的binlog
原理:通过写时复制机制,所有操作根据fsync策略进行写磁盘。
优点:所有操作都保存至文件,安全性高
缺点:某些重复操作也会记录,导致AOF文件比RDB文件大
3、Redis主从实现
3.1 原理
#某个slave切换连接到新master后,会清空自身redis内存的所有数据,并将新master的数据导入自己的内存。 #主从复制原理: 首次,全量同步: 1)slave发起同求请求连接到master 2)master接收请求后,fork一个子进程dump内存数据生成RDB文件,之后发生的写命令记录在复制缓冲区中 3)master dump完成后发送RDB文件给slave,发送完成后,向slave发送复制缓冲区的写命令 4)slave收到RDB文件后,清空自身redis内存的数据,将RDB文件的数据导入自己的内存,执行master发送的复制缓冲区的写命令 之后,增量同步: 1)后期同步,slave发送slave_repl_offset位置,同步增量数据 #注意: 主从版本保持一致 从库设置和主一样的密码,开启数据持久化(在主down后VIP切换,手动提升slave为新主)
3.2 配置
#命令行配置 slaveof 10.0.0.7 6379 #redis-5版本命令为:replicaof 10.0.0.7 6379 config set masterauth root #持久化,写入配置文件 slaveof 10.0.0.7 6379 masterauth root #查看主从复制状态 info replication