博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis线上部署规划
阅读量:6079 次
发布时间:2019-06-20

本文共 2015 字,大约阅读时间需要 6 分钟。

一,cpu,内存规划

CPU:

CPU不求核数多,但求主频高,Cache大,因为redis主处理模式是单进程的

内存:

一定要设置最大内存maxmemory参数,否则物理内存用爆了就会大量使用Swap

最少预留出55%的内存,在系统极度繁忙时,如果父进程的所有Page在子进程写RDB过程中都被修改过了,就需要两倍内存。

mem_fragmentation_ratio为内存碎片率

>内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低,也说明redis没有发生内存交换。

>但如果内存碎片率超过1.5,那就说明Redis消耗了实际需要物理内存的150%,其中50%是内存碎片率

>若是内存碎片率低于1的话,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换。内存交换会引起非常明显的响应延迟

内存优化系统配置:

echo "vm.overcommit_memory = 1" >>  /etc/sysctl.conf

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo never > /sys/kernel/mm/transparent_hugepage/defrag

lru策略:

默认策略为volatile-lru,对设置了expire time的key进行LRU清除,如果所有的key都没有设置expire timep写redis会报错

配置为noeviction时,内存超过maxmemory时写redis会报错

配置为allkeys-lru时,对所有key都做LRU

如果没有设置超时时间,则lru的策略需要设置为allkeys-lru,并且应用需要做好未命中的异常处理。特殊的,当redis当做DB时,请使用noneviction策略,但是需要对系统内存监控加强粒度

二,持久化设置

RDB和AOF两者毫无关系,完全独立运行,如果使用了AOF,重启时只会从AOF文件载入数据,不会再管RDB文件。

在配置上有三种选择:不持久化,RDB,RDB+AOF。官方不推荐只开启AOF(因为恢复太慢另外如果aof引擎有bug),除非明显的读多写少的应用。 

开启AOF时应当关闭AOF自动rewrite,并在crontab中启动在业务低峰时段进行的bgrewrite。 如果在一台机器上部署多个redis实例,则关闭RDB和AOF的自动保存(save "", auto-aof-rewrite-percentage 0),通过crontab定时调用保存:

m h * * * redis-cli -p <port> BGSAVE

m h */4 * * redis-cli -p <port> BGREWRITEAOF

持久化的部署规划上,如果为主从复制关系,建议主关闭持久化。

如果一台服务器上启多个redis实例,为了防止上下文切换导致的开销,可以采用taskset。taskset是LINUX提供的一个命令,可以让某个程序运行在某个(或)某些CPU上。

# ps -ef | grep redis   查看redis-server进程 

1009      6658     1  0 Sep02 ?        00:24:18 redis-server *:6382 [cluster]                            

# taskset -p 6658    显示进程运行的CPU,6658为redis-server的进程号

pid 6658's current affinity mask: ffffff

# taskset -pc 23 6658    指定进程6658运行在第24个cpu(从0开始计数)

pid 6658's current affinity list: 0-23

pid 6658's new affinity list: 23

# taskset -p 6658

pid 6658's current affinity mask: 800000

也可以在启动时指定运行的cpu:

taskset -c 23 ./redis-server ../redis.conf

taskset命令选项:

-p, --pid operate on an existing PID and not launch a new task

-c, --cpu-list specify a numerical list of processors instead of a bitmask. The list may contain multiple items, separated by comma, and ranges. For example, 0,5,7,9-11.

本文转自 emma_cql 51CTO博客,原文链接:http://blog.51cto.com/chenql/1963616

转载地址:http://ytagx.baihongyu.com/

你可能感兴趣的文章
查找窗口句柄小工具-Spy++Lite
查看>>
Netty-gRPC介绍和使用
查看>>
iOS 导航色差问题解决方案
查看>>
SpringBoot的优点
查看>>
POJ 2886 线段树 反素数
查看>>
js_对象
查看>>
SQL Server错误提示:"选定的用户拥有对象,所以无法除去该用户"
查看>>
centos6/7安装 tinyproxy (yum安装)
查看>>
简单选择排序
查看>>
noi2008 志愿者招募
查看>>
Razor及HtmlHelper学习笔记
查看>>
自定义标签
查看>>
Mysql客户端中文乱码问题解决
查看>>
php数组增加元素
查看>>
选择排序算法
查看>>
netmap pkt-gen程序代码分析
查看>>
添加网站QQ客服链接
查看>>
分布式缓存:Velocity之应用实践
查看>>
如何编写方法
查看>>
9.高级控件应用
查看>>