Redis学习四(运维指南).

一、上线规划

一般 redis 的参数配置都在 redis.conf 中,在上线前根据实际环境配置好合适参数,能有效提高 redis 的可用性。

  • redis 的运行机器 CPU 不求核数多,但求主频高,Cache大,因为 redis 主处理模式是单进程的。
  • 留意 redis 日志文件的配置,对应 logfile 参数。redis.log 为 redis 主日志,sentinel.log 为 sentinel 监控日志。
  • 关闭 THP,这个默认的 Linux 内存页面大小分配策略会导致 RDB 时出现巨大的 latency 和巨大的内存占用。关闭方法为:
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
  • 一定要设置最大内存 maxmemory 参数,否则物理内存用爆了就会大量使用 Swap,写 RDB 文件时的速度很慢。设置的参数参考:机器内存 * 45% / 1.2。(1.2 为内存碎片)
  • maxmemory-policy 策略,则当 redis 内存数据达到 maxmemory 时,会根据 maxmemory-policy 配置来淘汰内存数据,以避免OOM。
    • noeviction:不执行任何淘汰策略,当达到内存限制的时候客户端执行命令会报错,把redis当做DB时,推荐使用。
    • allkeys-lru:从所有数据范围内查找到最近最少使用的数据进行淘汰,直到有足够的内存来存放新数据。
    • volatile-lru:默认,从所有的最近最少访问数据范围内查找设置到过期时间的数据进行淘汰,如果查找不到数据,则回退到 noeviction。
    • allkeys-random:从所有数据范围内随机选择key进行删除。
    • volatile-random:从设置了过期时间的数据范围内随机选择key进行删除。
    • volatile-ttl:从设置了过期时间的数据范围内优先选择设置了TTL的key进行删除。
  • 持久化配置。在配置上有三种选择:不持久化,RDB,RDB + AOF(默认)。另外,如果为主从复制关系,建议主服务器关闭持久化。
    # RDB 持久化配置
    save 900 1              #在900秒(15分钟)之后,如果至少有 1 个key发生变化,则 dump 内存快照。
    save 300 10            #在300秒(5分钟)之后,如果至少有 10 个key发生变化,则 dump 内存快照。
    save 60 10000        #在60秒(1分钟)之后,如果至少有 10000 个key发生变化,则 dump 内存快照。
    # AOF 持久化配置
    appendfsync always     #每次有数据修改发生时都会写入AOF文件。
    appendfsync everysec  #每秒钟同步一次,该策略为AOF的缺省策略。
    appendfsync no          #从不同步。高效但是数据不会被持久化。
  • redis 使用的是单进程(除持久化时),所以在配置时,一个实例只会用到一个CPU。那么如何指定 redis 使用的 CPU 呢?
    #显示进程运行的CPU (15361 为 redis-server 的进程号)。显示结果的 f 实际上是二进制4个低位均为 1 的 bitmask,每一个 1 对应于 1 个CPU,表示该进程在 4 个CPU上运行
    [[email protected] redis] taskset -p 15361
    pid 15361's current affinity mask: f
    #指定进程运行在某个特定的CPU上。该命令的 3 表示 CPU 将只会运行在第 4 个CPU上(从0开始计数)
    [[email protected] redis] taskset -pc 3 15361
    pid 15361's current affinity list: 0-3
    pid 15361's new affinity list: 3

二、常见运维操作

服务功能运维

  • 启动 redis:redis-server redis.conf
  • 启动 redis-sentinel:redis-sentinel sentinel.conf
  • 停止 redis,注意 kill -9 关闭可能会丢失数据:redis-cli shutdown
  • 验证密码(或在连接的时候指定密码):auth password(/usr/bin/redis-cli -a 123456)
  • 查看配置:config get *
  • 修改配置:
    # 临时配置
    127.0.0.1:6379> config set requirepass 123456
    OK
    # 永久配置,将目前服务器的参数配置写入 redis.conf
    127.0.0.1:6379> config rewrite
    OK
    # 永久配置也可通过直接修改 redis.conf 的方式
  • 选择数据库(默认连接的数据库是0,默认数据库数量是16个):select db-index
  • 将 key 从当前数据库移动到指定数据库:move key db-index
  • 清空当前数据库,生产上禁止使用:flushdb
  • 清空所有数据库,生产上禁止使用:flushall
  • RDB 持久化命令:
    • BGSAVE:后台子进程进行RDB持久化
    • SAVE:主进程进行RDB,生产环境千万别用,服务器将无法响应任何操作
    • LASTSAVE: 返回上一次成功SAVE的Unix时间
  • AOF 持久化命令:BGREWRITEAOF
  • 设定 crontab 定时备份持久化数据:cp /var/lib/redis/dump.rdb /somewhere/safe/dump.$(date +%Y%m%d%H%M).rdb
  • 执行 lua 脚本:redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3
  • 发送原始的 redis protocl 格式数据到服务器端执行: echo -en ‘*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n‘ | redis-cli -a 123456 --pipe

服务性能运维

  • 查看连接的客户端:client list
  • 探测服务是否可用(返回 pong 说明正常):ping
  • 探测服务延迟,千兆网卡一般延迟在 0.16ms 左右:
    [[email protected] redis]# redis-cli --latency
    min: 0, max: 5, avg: 0.24 (1874 samples)
  • 查看统计信息:info
    • total_connections_received:redis 连接数
    • latest_fork_usec:上次导出 rdb 快照,持久化花费时长(微秒), 用来检查是否有人使用了 SAVE 命令
    • used_memory: 由 redis 分配器分配的内存总量,以字节(byte) 为单位
    • used_memory_rss:返回 redis 已分配的内存总量(俗称常驻集大小),包含了 used_memory 和内存碎片
    • mem_fragmentation_ratio:used_memory_rss / used_memory 的值,1.N为佳,如果此值过大,说明 redis 的内存的碎片化严重,可以导出再导入一次(重启)
  • 统计命令执行所耗费的毫秒数(每个命令的总时间和平均时间):INFO commandstats
  • 统计 redis 数据存储中比较大的key(用 scan 的方式对 redis 中的 key 进行采样,寻找较大的 keys):redis-cli --bigkeys
  • 获取慢查询:
    # 得到慢查询列表,默认保留 128 条(slowlog-max-len 参数)
    127.0.0.1:6379> slowlog get 10
    1) 1) (integer) 1 # 查询ID
     2) (integer) 1572146706 # 发生时间
     3) (integer) 12239 # 运行时长,该时间不包含网络延迟(微秒)
     4) 1) "save" # 原命令
    2) 1) (integer) 0
     2) (integer) 1569327858
     3) (integer) 391725
     4) 1) "GET"
        2) "YUNGU_REDIS_ADMIN_ACCESS_TOKEN_5E6A833C21A87983459A985753AE5425"
    # 清空慢查询
    127.0.0.1:6379> slowlog reset
    OK

三、测试方法

  • 模拟oom,redis 直接退出:redis-cli debug oom
  • 模拟宕机:redis-cli debug segfault
  • 模拟 redis 线程挂起:redis-cli -p 6379 debug sleep 30
  • 快速产生测试数据:debug populate
    127.0.0.1:6379> dbsize
    (integer) 1410
    127.0.0.1:6379> debug populate 100
    OK
    127.0.0.1:6379> dbsize
    (integer) 1510
  • 模拟 RDB 加载情形(save 当前的 rdb 文件,并清空当前数据库,重新加载 rdb):debug reload
  • 模拟 AOF 加载情形(清空当前数据库,重新从aof文件里加载数据库):debug loadaof

原文地址:https://www.cnblogs.com/jmcui/p/11730196.html

时间: 2024-10-10 15:15:36

Redis学习四(运维指南).的相关文章

第一天-学习linux运维

今天购买了老男孩教育的linux运维课程,决定系统学习linux运维相关技术知识,每天晚上至少看一个知识点相关的文件目录,一共有120个目录左右,坚持四个月基本上就学完了,加油,你可以的. 今天是学习的第一天. 今天老师讲了一些关于如何学习的内容,学会如何学习很重要,坚持整理总结很重要.老师希望我们不仅要学到技术,更要学习如何思考,学到老师的思想. 老师强调的学好linux运维四项基本原则: 1.设定目标 2.寻找方法 3.勤奋努力 4.持之以恒 李瑞中,加油

  我学习Linux运维的决心

我叫王永盛,经过在老男孩教育linux运维班5个月学习后,我一定要达到的薪水目标是10k,为了达到目标我将采取如下几大行动方案: 1,在课堂上积极听讲,积极回答问题, 2,每天学习时间必须达到十二小时以上 3做到课前预习,课后总结复习, 4,每天严格按照老师的要求  做到必须该做的 5,无论因为任何事情,都不能迟到早退或者旷课 6,抛弃任何娱乐时间,努力提高自己的学识,提高自己的素质思想 7,五个月内自己的生活就是充斥着学习,提高自己的知识. 8,积极跟同学们相互学习,沟通       五个月后

自我介绍与学习linux运维决心书

大家好,这是我在51cto博客的第一条博文,也是我第一次写学习Linux运维的决心书,我要向技术大牛们看齐,在充实自己的知识技能过程中,实现自己的财务自由的目标. 我叫李让,今年26岁,在上海一家快递公司里做实施工程师,主要的工作是公司系统的新功能的试点测试,以及协助业务部门对新系统新功能的推广.14年在培训班学习了项目管理PMP的知识,并通过了PMP的认证.在实际工作中,我发现,没有过硬的技术傍身,很难在IT部门运用起项目管理的知识,就很难做成自己的项目.所以我决心学习技术,在日后的工作中将技

初学者学习linux运维的几个问题及老鸟建议

初学者学习linux运维的几个潜意识的问题:1.习惯到处问.不管啥问题,反正就是一点都不思考,结果是经常被鄙视,就算会了,自己也没多大提高. 2.找不到人,问不到答案时就去搜索,搜索关键字还不会选取,结果还是找不到答案. 3.没意识或者不习惯去查看软件的帮助.手册.久而久之养成了坏习惯,限制了自己的发展.  老男孩老师给的建议: 1.一般解决故障问题,一定要先看故障日志,根据报错输出或者日志文件自行排查下,别忘了这可是上帝给你的难得的提升的机会,一但错过,提升机会就让给别人了! 2.实在解决不了

Redis开发与运维 (数据库技术丛书) PDF 下载,深度剖析Hadoop HDFS PDF 下载

1.Redis开发与运维 (数据库技术丛书) PDF 下载 2.深度剖析Hadoop HDFS (大数据技术丛书) PDF 下载 关注微信公众号:职业开发者之路,百度云免费 下载 PDF 电子书籍,或直接访问:问风网:askwinds.com请添加链接描述,免费资源下载模块下载,问风@程序员部落,更多资源分享等你获取关注微信公众号:职业开发者之路,?更多免费资源分享 原文地址:http://blog.51cto.com/2058005/2350798

本人认为新手学习linux运维需要注意的事项

本人认为新手学习linux运维需要注意的事项: 未入门前,尽量不要使用tab补全命令.理由是:因为你需要大量的手打输入命令来达到记忆的目的,甚至是肌肉记忆,想都不需要想下意识的能打出来.(输入的速度比你的思想快) 尽量先学远程连接工具和vim操作的快捷键,你会在新手阶段反复使用相关的快捷键,从而达到记忆的目的之后提高你的工作效率. 每天要复习你当天学了哪些内容!每天要复习你当天学了哪些内容!每天要复习你当天学了哪些内容!重要的事情说三遍.以上是一些学习心得.留作记录!!! 原文地址:https:

学习linux运维的决心

大家好! 我叫李珊,来自湖南新化.听到这个名字也许大家以为我是名女生.请大家不要被我的名字欺骗了,其实我是一名男子汉.今天下定决心报了一个老男孩linux运维的课程班. 我其实已经筹备很长时间了.自己也在复习之前所学的linux的基础知识,特别感触深的事温故而知新.虽然已经学过的东西,再学习一遍感觉又懂得了很多. 所以,我下定决心要学习好linux运维拿到高薪就业. 为了达成月薪上万的目标,以下将是我付出的行动! 一.上课认真听老师的课程 二.认真做好笔记 三.努力完成老师布置的作业 四.每天花

云计算发展历程的浅谈,学习Linux运维

云计算是一个提供便捷的通过网络访问一个可定制的IT资源共享池能力的按使用量付费的模式(IT资源包括网络,服务器,存储,应用,服务),这些资源能够快速部署,并只需要很少的管理工作或很少的服务供应商的交互. ×××老师简单地说:云计算是一种未来信息技术的一种主要架构,服务云+消费端.云端通过集中的资源提供各种服务,各种终端通过互联网那个接入使用,而不是原来各自维护自己的基础架构.通俗的理解是,云计算的"云"就是存在于互联网上的服务器集群上的资源,它包括硬件资源(服务器.存储器.CPU等)和

ZooKeeper: 简介, 配置及运维指南

1. 概览 ZooKeeper是一个供其它分布式应用程序使用的软件, 它为其它分布式应用程序提供所谓的协调服务. 所谓的协调服务, 是指ZooKeeper的如下能力 naming 命名 configuration management 配置管理 synchronization 同步 group service 分组服务 上面四个功能可能现在不太好说清, 但大致上目前你需要明白ZooKeeper就是为其它分布式应用程序提供一些基础功能的程序就好了. 我们以其中的配置管理为例. 假设你在写一个可横向