redis线上部署规划

一,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.

时间: 2024-10-11 10:22:54

redis线上部署规划的相关文章

Django线上部署系统环搭建

Django线上部署系统环搭建 本文大致分为:系统环境准备.Python3安装配置.Virtualenv基本使用 .git基本使用 四部分. ps: 也可使用virtualenvwrapper代替Virtualenv 系统环境准备: CentOS6.5 自带Python2.6.6,我们需要编译安装Python3(本文档安装的是Python3.6.1) 建议将yum源配置成阿里的yum源,参考链接:http://blog.csdn.net/chavo0/article/details/519393

vue-router+webpack线上部署时单页项目路由,刷新页面出现404问题

使用vue项目,线上部署的时候,访问首页以及通过路由打开二级页面没有问题,但是一刷新就出现404现象 因为刷新页面时访问的资源在服务端找不到,因为vue-router设置的路由不是真实存在的路径. 解决办法是:在nginx.conf配置修改如下: location / { root html; try_files $uri $uri/ @router; index index.html index.htm; } location @router { rewrite ^.*$ /index.htm

Django线上部署代码修改失效问题

记一次django项目的线上部署维护问题,django+nginx 关于nginx反向代理服务器的介绍这里有一篇博客介绍的比较好:nginx的相关介绍 以及当一次客户端请求发出后,uwsig以及uWSGI,Nginx之间的大致流程:uWSGI.WSGI和uwsgi 一.问题描述 在将django项目部署到阿里云(nginx作为web服务器)上之后,使用宝塔控制面板修改项目源码,或者使用直接在终端修改,修改之后重启uwsgi和nginx无效. 二.问题分析 1.本地环境 在本地环境的时候,是使用D

Django线上部署样式加载不出来

当我们线上部署时,需要将debug 模式调成 False,但是后台样式就会失效,原因是 django不支持 线上 静态文件, 增加下面这行即可解决. OK 原文地址:https://www.cnblogs.com/wujf-myblog/p/10939414.html

如何利用docker 构建golang线上部署环境

公司最近开发了一个项目是用golang 写的,现在要部署到线上环境去,又不想在服务器上装单独的golang,决定用docker 封装下,直接打到镜像里面,然后就直接在hub.docker.com上面搜了下golang的镜像,直接就docker pull golang 最新的是1.9的版本 然后参考官方的文档弄了下Dockerfile大概是这样: FROM golang MAINTAINER jackluo #指定工作目录 WORKDIR /go/src/ActivitApi COPY . . C

线上部署链路聚合bonding

线上做链路聚合bonding 服务器:联想 x3650 M4    (两台) 链路聚合可以将两块或者多块网卡结合成单一接口,从而增加网络吞吐量.带宽和冗余.如果一块网卡down或者拔出,其他网卡将保持网络通信,增加冗余.容错和负载均衡. 配置时首先做好规划,以服务器联想 x3650 M4为例说明.服务器有2个网络模块,每个模块各有2块网卡,一共4块网卡.为了提高冗余,分别选取物理网卡1和物理网卡3做bonding,对应系统显示网卡为eth0,eth2. 如果安装了图形界面,需要停止Network

线上部署GlusterFS情况调研结果

还是有不少群友在选择GlusterFS版本时缺乏信心,所以在"GlusterFS技术交流"QQ群(234901333)里调研了一下线上部署GlusterFS情况. 先说明一下GlusterFS的应用场景: 纯基于GlusterFS创业也是可以成功的,著名的有大道行云,结合他们的描述,GlusterFS主要应该于广电.高性能计算.医疗.军工等行业,也会用在桌面虚拟化和超融合,很多互联网公司内部也在使用GlusterFS,用于公司内部的文件共享,或是兼容之前基于文件的应用,通过NAS转换,

Redis持久化磁盘IO方式及其带来的问题   有Redis线上运维经验的人会发现Redis在物理内存使用比较多,但还没有超过实际物理内存总容量时就会发生不稳定甚至崩溃的问题,有人认为是基于快照方式持

转自:http://blog.csdn.net/kaosini/article/details/9176961 一.对Redis持久化的探讨与理解 redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化.redis支持两种持久化方式,一种是 Snapshot(RDB)也是默认方式,另一种是Append only file(AOF)的方式.具体的理论说明请见这里. 我们应该明确持久化的数据有什么用,答案是用于重启后的数据恢复.Redis是一个内存数据

redis线上问题及解决方法

Redis内存配置大小要求 配置redis时,内存不宜超过机器总内存的50%,否则写RDB文件时会导致机器总内存不足,从而进行IO等待,使redis访问速度骤降 maxmemory 12gb 设置redis总内存为机器总内存的50%,且当redis进程占用内存超过机器内存的40%时进行报警,此时需要迁移数据 Redis数据较大时,主从同步失败 当redis数据较大时,RDB文件有好几个G,第一次主从同步时会传输整个RDB文件并加载到内存中,数据较大时会导致slave还没同步完,已经超时.此时主从