Redis培训之二管理、监控和原理篇

  • 管理
  • 启动:

Redis-server 或redis-server  /etc/redis/redis.conf

  • 关闭:

Redis-cli SHUTDOWN  或kill redis进程号

 

  • 安全设置:

Bind  127.0.0.1  #指定只允许本机连接

Requirepass    mypassword

>AUTH  mypassword

>SET foo

 

命令重命名:

FLUSHALL  #

Rename-command FLUSHALL  fuckmemcache

Rename-command FLUSHALL “”

 

  • 管理工具:

Redis-cli

>SLOWLOG GET

 

Slowlog-log-slower-than 单位是微妙默认是10000, 1000000微妙是1秒

Slowlog-max-len  //限制记录的条数

 

  • Phpredisadmin

 

  • 超级管理工具

搜狐出品的管理工具: CacheCloud

redis_sohu

  • 监控:

命令行:

1、Redis提供的INFO命令不仅能够查看实时的吞吐量(ops/sec),还能看到一些有用的运行时信息。下面用grep过滤出一些比较重要的实时信息,比如已连接的和在阻塞的客户端、已用内存、拒绝连接、实时的tps和数据流量等:

redis-cli -h 127.0.0.1 info | grep -e “connected_clients” -e “blocked_clients” -e “used_memory_human” -e “used_memory_peak_human” -e “rejected_connections” -e “evicted_keys” -e “instantaneous”

 

 

2、从客户端可以监控Redis的延迟,利用Redis提供的PING命令,不断PING服务端,记录服务端响应PONG的时间。下面开两个终端,一个监控延迟,一个监视服务端收到的命令:

redis-cli –latency -h 127.0.0.1

3、

>redis-cli -h 127.0.0.1

>monitor

 

4、unix 命令行

watch -n 1 -d “redis-cli -h 127.0.0.1 info | grep -e “connected_clients” -e “blocked_clients” -e “used_memory_human” -e “used_memory_peak_human” -e “rejected_connections” -e “evicted_keys” -e “instantaneous””

5、图形界面

redis-live

第三方:redis-stat 命令行

压力测试:

redis-benchmark -c 10 -n 100000 -q

原理:

  • 持久化

RDB方式:

通过快照完成

Save 900 1   //900秒内有1个键被更改写快照

Save 300 10   //300秒内至少有10个键被就写快照

Save 60 10000  //60秒内有10000键发生变化就写快照

 

Dump.rdb

配置文件:

Dir //指定快照目录

Dbfilename //指定快照文件名称

快照原理:

Redis进程 fok一个子进程,父进程继续接收处理客服发来的命令,子进程开始讲内存的数据写入硬盘中的临时文件中,写完后用临时文件替换旧的RDB文件。

注意:fork函数发送的一刻父子进程共享同一内存,这时如果父进程要更改其中某片数据,操作系统会将该片数据复制一份以保证子进程的数据不受影响,所以新的RDB文件存储的是执行FORK一刻的内存数据。

 

Redis重启后会读取rdb 文件,1g快照20~30秒, 如果redis异常退出,就会丢失最后一次快照以后更改的数据,这个要跟进应用场景来定,看可接受的损失范围,如果是做缓存,丢几十个键是没关系的,如果数据相对重要,希望降到最低,就要用AOF方式了。

 

AOF方式:

Append only file,  redis 每执行一条更改redis 数据的命令,就会将该命令写入磁盘中的AOF文件。

 

Auto-aof-rewrite-percentage 100  //当目前aof文件大小超过上一次重写时的AOF文件大小的百分之多少会再次重写。

Auto-aof-rewrite-min-size 64mb  //限制了允许重写的最小AOF文件大小。

 

操作系统缓存机制,数据先写入了硬盘缓存,默认30秒后再写入磁盘,如果发生故障,这30秒的数据将丢失,如果要开启实时同步需要配置:

Appendsync everysec /always/no no表示不主动同步。

 

  • 主备复制原理

Redis-server  //启动主数据库

Redis-server –port 6380 –slveof 127.0.0.1 6379 //启动从数据库

 

redis

如果断链,2.6版本的会全部再进行复制,2.8以后只会同步增量数据。

从数据库同步过程中,可以继续处理客户端发来的命令,默认从数据库会对同步前的命令做响应,可以配置salve-serve-stale-data  no //使从数据库在同步完成前对所有命令都回复错误:SYNC with master in progress.

只要执行复制就会生成快照,即使我们关闭了RDB的方式。

2.8.18之后可以支持无硬盘复制。

Repl-diskless-sync yes  //开启无硬盘复制选项

 

乐观复制:容忍在一定时间内主从数据不一致,但最终数据会同步。

redis1

当主数据库执行1条写命令后,主数据库发生变动,当主数据库将该命令传送给从数据库之前,网络断开了,二者数据就不一致了,从这个角度,主数据库是不知道某个命令同步给了多少从数据库,redis提供了2个配置选项来限制只有当数据至少同步给指定数量的从数据库时,主数据库才可写:

Min-slave-to-write 3  //表示只有当3个或以上从数据库连接到主数据库时,主数据库可写。

Min-slave-max-lag 10 //表示允许从数据库最长失去连接的时间。

 

  • 哨兵集群原理

2.8版本的功能,功能是监控主从数据库是否正常,主备自动切换

Redis-server  //启动主数据库6739端口

Redis-server –port 6380 –slveof 127.0.0.1 6379 //启动从数据库

Redis-server –port 6381 –slveof 127.0.0.1 6379 //启动从数据库

 

Sentinel.conf

Sentinel monitor mymaster  127.0.0.1 6379 1

其中mymaster是表示要监控的主数据库的名字,ip是主数据库的地址和端口号, 1表示最低通过票数。

Redis-sentinel  sentinel.conf

 

配置监控主数据库,哨兵会自动发现所有从数据库。

redis2

Sentinel down-after-milliseconds 60000  或600毫秒

哨兵每秒发送PING命令,如果没回复,哨兵认为主观下线,如果是主数据库,哨兵发送SENTINEL is-master-down-by-addr 命令询问其他哨兵节点以了解他们是否也认为该主数据库主观下线,如果达到指定数量,哨兵认为其客观下线。

 

故障恢复:

1、发现客观下线的哨兵A,先每个哨兵发送命令,要求对方选自己成为领导哨兵。

2、如果目标哨兵没有选择过其他人,就同意A

3、如果A发现有超过半数且超过quorum参数值的投票,A为领头哨兵。

4、如果多个哨兵参选,就随机再来一轮选举。

 

哨兵头领选中后,选择优先级最高的从数据库成为主数据库,slave-priority

 

  • 真正的集群部署,3.0版本以上,开启:

Cluster-enabled