`
vern
  • 浏览: 16730 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

redis集群

 
阅读更多

 

根据一些测试整理出来的一份方案:

 

1. Redis 性能

对于redis 的一些简单测试,仅供参考:

 

测试环境:Redhat6.2 , Xeon E5520(4核)*2/8G,1000M网卡

 

Redis 版本:2.6.9

 

 

 

客户端机器使用redis-benchmark 简单GET、SET操作:

 

1. 1单实例测试

1. Value大小:10Byte~1390Byte

 

处理速度: 7.5 w/s,速度受单线程处理能力限制

 

2. Value 大小:1400 左右

 

处理速度突降到5w/s 样子,网卡未能跑满;由于请求包大于MTU造成TCP分包,服务端中断处理请求加倍,造成业务急剧下降。

 

3. Value大小:>1.5 k

 

1000M网卡跑满,速度受网卡速度限制

 

处理速度与包大小大概关系如下:

 

image

 

1.2 多实例测试

前提是系统网卡软中断均衡到多CPU核心处理,测试机器网卡开启RSS,有16个队列:

 

操作:10字节Value SET,服务端开启8个实例,四台客户端服务器每台开启两个redis-benchmark,每个client 速度近4W/s,服务端总处理30w/s左右。

 

网卡流量:

 

image

 

其中8个单数核心CPU全部耗尽,像是超线程没有利用上,测试已经达到很好效果,就没有继续测试下去了。从单实例跑满一个核心7.5w/s,8个实例跑满8个核心,30W/s来看,CPU使用和性能提升不成正比, RSS会造成redis-server线程基本每收到一个请求都切换一次CPU核心,软中断CPU占用太高。这种情况RPS/RFS功能也许就很合适了,RSS只需要映射1~2个核心,然后再讲软中断根据redis-server端口动态转发,保证redis进程都在一个核心上执行,减少进程不必要的切换。

 

 

 

开多实例可以充分利用系统CPU、网卡处理小包能力。具体看业务场景,考虑包平均大小、处理CPU消耗、业务量。如果多实例是为了提高处理能力,需要注意配置网卡软中断均衡,否则处理能力也无法提升。

 

 

2. Redis 持久化

测试策略:AOF + 定时rewriteaof

 

1. 准备数据量:

 

1亿,Key:12 字节 Value:15字节,存储为string,进程占用内存12G

 

2. Dump

 

文件大小2.8G,执行时间:95s,重启加载时间:112s

 

2. Bgrewriteaof

 

文件大小5.1G,执行时间:95s,重启加载时间:165s

 

3.开启AOF后性能影响(每秒fsync一次):

 

8K/s SET 操作时:cup 从20% 增加到40%

 

4.修改1Kw数据:

 

文件大小:5.6G,重启加载时间:194s

 

5.修改2K数据

 

文件大小:6.1G,重启加载时间:200s

 

另:Redis2.4 版本以后对fsync做了不少优化, bgrewriteaof,bgsave 期间对redis对外提供服务完全无任何影响。

 

 

3. Redis 主从复制

因为目前版本没有mysql 主从那样的增量备份,对网路稳定性要求很高,如果频繁TCP连接断开会对服务器和网络带来很大负担。

 

就目前生产环境主从机器部署同一个机架下,几个月都不会又一次连接断开重连的情况的。

 

 

4. keepalived 简介

参考官方文档:http://keepalived.org/pdf/sery-lvs-cluster.pdf

 

Keepalived 是一个用c写的路由选择软件,配合IPVS 负载均衡实用,通过VRRP 协议提供高可用。目前最新版本1.2.7.Keepalived 机器之间实用VRRP路由协议切换VIP,切换速度秒级,且不存在脑裂问题。可以实现

 

可以实现一主多备,主挂后备自动选举,漂移VIP,切换速度秒级;切换时可通过运行指定脚本更改业务服务状态。

 

如两台主机A、B,可以实现如下切换:

 

1.A 、B 依次启动,A作为主、B为从

 

2 .主A 挂掉,B接管业务,作为主

 

3.A 起来,作为从SLAVEOF B

 

4.B 挂掉,A 切回主

 

将一台全部作为主,即可实现主从,可做读写分离;也可以通过多个VIP,在一台机器上多个实例中一半主、一半从,实现互备份,两机同时负责部分业务,一台宕机后业务都集中在一台上

 

安装配置都比较简单:

 

  需要依赖包:openssl-devel(ubuntu 中为 libssl-dev),popt-devel (ubuntu中为libpopt-dev)。

 

  配置文件默认路径:/etc/keepalived/keepalived.conf 也可以手动指定路径,不过要注意的是手动指定需要使用绝对路径。主要要确保配置文件的正确性,keepalived 不会检查配置是否符合规则。

 

  使用keepalived -D 运行,即可启动3个守护进程:一个父进程,一个check健康检查,一个Vrrp,-D将日志写入/var/log/message,可以通过日志查看切换状况。

 

注意问题:

 

1. VRRP 协议是组播协议,需要保证主、备、VIP 都在同一个VLAN下

 

2. 不同的VIP 需要与不同的VRID 对应,一个VLAN 中VRID 不能和其他组冲突

 

3. 在keepalived 有两个角色:Master(一个)、Backup(多个),如果设置一个为Master,但Master挂了后再起来,必然再次业务又一次切换,这对于有状态服务是不可接受的。解决方案就是两台机器都设置为Backup,而且优先级高的Backup设置为nopreemt 不抢占。

 

 

5. 通过keepalived实现的高可用方案

 

 

image

 

切换流程:

 

1. 当Master挂了后,VIP漂移到Slave;Slave 上keepalived 通知redis 执行:slaveof no one ,开始提供业务

 

2. 当Master起来后,VIP 地址不变,Master的keepalived 通知redis 执行slaveof slave IP host ,开始作为从同步数据

 

3. 依次类推

 

主从同时Down机情况:

 

1. 非计划性,不做考虑,一般也不会存在这种问题

 

2. 、计划性重启,重启之前通过运维手段SAVE DUMP 主库数据;需要注意顺序:

 

1. 关闭其中一台机器上所有redis,是得master全部切到另外一台机器(多实例部署,单机上既有主又有从的情况);并关闭机器

 

2. 依次dump主上redis服务

 

3. 关闭主

 

4. 启动主,并等待数据load完毕

 

5. 启动从

 

删除DUMP 文件(避免重启加载慢)

 

 

 

6. 使用Twemproxy 实现集群方案

一个由twitter开源的c版本proxy,同时支持memcached和redis,目前最新版本为:0.2.4,持续开发中;https://github.com/twitter/twemproxy .twitter用它主要减少前端与缓存服务间网络连接数。

 

特点:快、轻量级、减少后端Cache Server连接数、易配置、支持ketama、modula、random、常用hash 分片算法。

 

image

 

这里使用keepalived实现高可用主备方案,解决proxy单点问题;

 

优点:

 

1. 对于客户端而言,redis集群是透明的,客户端简单,遍于动态扩容

 

2. Proxy为单点、处理一致性hash时,集群节点可用性检测不存在脑裂问题

 

3. 高性能,CPU密集型,而redis节点集群多CPU资源冗余,可部署在redis节点集群上,不需要额外设备

 

 

 

7 . 一致性hash

使用zookeeper 实现一致性hash。

 

redis服务启动时,将自己的路由信息通过临时节点方式写入zk,客户端通过zk client读取可用的路由信息。

 

 

 

具体实现见我另外一篇:redis 一致性hash

 

 

8 . 监控工具

历史redis运行查询:CPU、内存、命中率、请求量、主从切换等

 

实时监控曲线

 

短信报警

 

使用基于开源Redis Live 修改工具,便于批量实例监控,基础功能都已实现,细节也将逐步完善。

 

源码地址如下:

 

https://github.com/LittlePeng/redis-monitor  

原文网址http://www.cnblogs.com/lulu/archive/2013/06/10/3130878.html 

分享到:
评论

相关推荐

    springcloud部署redis集群

    在SpringCloud框架中,部署Redis集群是实现高可用、数据持久化和分布式缓存的关键步骤。Redis是一款高性能的键值数据库,广泛应用于缓存、消息队列等多种场景。SpringCloud通过集成Spring Data Redis模块,使得在...

    阿里云公网redis集群搭建以及java访问redis集群

    阿里云公网Redis集群搭建及Java访问教程 在云计算日益普及的今天,阿里云提供了便捷的公共服务,如Redis缓存服务,帮助企业或个人快速构建高效、可靠的分布式应用。本教程将详细讲解如何在阿里云上搭建公网Redis...

    redis集群连接及工具类DEMO

    【Redis集群连接及工具类DEMO】是一个Spring工程,它提供了与Redis集群交互的实例,同时也包含了一些实用的工具类,使得开发者能够更方便地在Java应用中使用Redis作为数据存储。这个DEMO的主要目标是展示如何配置和...

    Redis集群弱/空密码问题整改

    使用redis安装用户,在命令行连接上redis集群后,执行命令:config set requirepass 【自定义的强密码】,如: config set requirepass mypassword@#75@~ 然后执行 config rewrite 将配置密码持久化到redis配置文件...

    springboot整合redis集群零配置

    本篇文章将深入探讨如何在Spring Boot中实现对Redis集群的零配置整合,并介绍使用AOP实现的自定义缓存注解。 首先,让我们来看看"Springboot整合Redis集群,零配置方式"。在Spring Boot中,我们可以通过引入`spring-...

    k8s集群搭建redis集群

    k8s集群搭建redis集群 k8s集群搭建redis集群 k8s集群搭建redis集群 k8s集群搭建redis集群 k8s集群搭建redis集群

    Redis集群下过期key监听的实现代码

    在使用redis集群时,发现过期key始终监听不到。网上也没有现成的解决方案。于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听。以上做法可能不尽人意,目前也没找到好的解决...

    SpringBoot集成Redis集群

    SpringBoot集成Redis集群 在本文档中,我们将指导您如何在SpringBoot 2.X中集成Redis集群。下面是相关的知识点: 集成Redis集群的必要性 在实际应用中,使用Redis集群可以提高系统的可扩展性和可靠性。Redis集群...

    Redis集群数据迁移操作文档

    《Redis集群数据迁移实战指南》 在IT领域,数据迁移是一项关键任务,特别是在使用Redis这样的高性能内存数据库时。本文将详细介绍如何进行Redis集群的数据迁移,包括全量和增量数据迁移,以及离线迁移的方法,主要...

    rancher2.3.6部署redis集群配置教程.pdf

    标题中的“rancher2.3.6部署redis集群配置教程.pdf”暗示了这份文档是针对特定版本的Rancher软件(版本号2.3.6)的使用教程,旨在指导用户如何部署Redis集群。Rancher是一款开源的容器管理平台,可以用来部署、管理...

    redis集群批量插入

    本文将详细讨论如何在Java环境下连接Redis集群并实现批量插入String类型的数据。 首先,我们需要理解Redis集群的基本概念。Redis集群是通过分片(Sharding)技术来分散数据到多个节点,每个节点存储一部分数据。在...

    spring + redis集群

    本文将深入探讨如何使用Spring Data Redis构建一个Redis集群,以及如何通过Spring框架来操作Redis集群,存储对象集合,并提供一个基于Maven的可运行项目示例。 首先,Spring Data Redis是Spring框架的一个模块,它...

    redis集群一键自动部署脚本.rar

    "redis集群一键自动部署脚本.rar" 提供了一种便捷的方式来在 CentOS 7.X 操作系统上搭建 Redis 集群。以下是关于Redis集群、shell脚本以及CentOS的相关知识点: 1. **Redis集群**: - **主从复制(Replication)**...

    springboot集成redis集群,redis安装包配置

    在本文中,我们将深入探讨如何在SpringBoot应用中集成Redis集群以及如何配置Redis服务器。首先,Redis是一个开源的、基于键值对的数据存储系统,常用于数据库、缓存和消息中间件。它以其高性能和易用性而备受青睐。...

    Redis集群搭建工具及教程

    在本资源包中,提供了搭建Redis集群所需的各种工具和教程,帮助你在Windows环境下进行操作。 首先,让我们来了解Redis集群的基础知识。Redis集群通过分片(Sharding)技术将数据分散到多个节点上,实现数据的冗余和...

    redis集群windows启动脚本

    在Windows环境下,设置和管理Redis集群可能相对复杂,但通过编写启动脚本可以实现一键启动,简化操作流程。以下将详细介绍如何创建并使用“redis集群windows启动脚本”。 1. **Redis集群概念** Redis集群是Redis...

    nginx+lua+redis 集群 连接插件和脚本

    本资源包“nginx+lua+redis集群 连接插件和脚本”正是为了解决这三者之间的协同工作,特别是针对原插件没有密码功能的问题进行了改进,使得安全性得到了提升。 首先,Nginx是一款轻量级的Web服务器/反向代理服务器...

    Redis集群测试

    Redis集群是一种分布式数据库解决方案,它允许用户将数据分散存储在多台服务器上,以提高系统的可扩展性和可用性。在“Redis集群测试”中,我们通常会关注以下几个关键知识点: 1. **集群架构**:Redis集群采用无...

    redis集群批处理一键搭建

    Redis集群批处理一键搭建是指通过一个简单的批处理脚本来快速构建和配置四个节点的Redis集群。这种方式极大地简化了安装和部署过程,使得在64位操作系统上启用Redis集群变得更加便捷。Redis是一个开源的、高性能的...

    Redis集群配置文件

    Redis集群配置文件是实现Redis高可用性和数据分片的关键组件。在Redis集群中,数据被分散存储在多个节点上,每个节点负责一部分数据,从而提高了系统的扩展性和容错性。以下将详细介绍Redis集群配置文件的相关知识,...

Global site tag (gtag.js) - Google Analytics