• Redis缓存数据迁移之迁移准备
    [color=#666666][size=3] 申请一台弹性云服务器。以下以Linux操作系统举例。要求如下:[/size][/color] [list] [*][size=3]弹性云服务器与缓存实例处于相同虚拟私有云以及子网。[/size] [*][size=3]弹性云服务器具有外网访问权限,配备弹性IP。用于下载Redis相关客户端以及转储备份数据。[/size] [*][size=3]导出数据存放目录所属分区的可用磁盘空间,须大于缓存实例已使用内存空间。[/size][color=#666666][size=3]例如:导出数据存放在/home目录下,需保证/home所在分区可用磁盘空间大于缓存实例已使用内存空间。[/size][/color] [*][size=3]客户端运行环境下已经安装好Python环境,在命令行输入python有类似如下Python版本信息说明已经安装好。[/size][code][root@test-server01 ~]$ python Python 2.7.5 (default, Apr 22 2017, 08:04:09) [GCC 4.8.3 20140911 (EulerOS 4.8.3-10)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> [/code][color=#666666][size=3]如果没有安装,请先[color=#066ff][url=https://www.python.org/downloads/source/]下载Python[/url][/color]并安装。[/size][/color] [/list]
  • Redis缓存数据迁移之迁移背景
    [p=30, 2, left]将基于Redis的缓存数据在DCS缓存实例、华为云上用户自建的Redis缓存服务、用户在非华为云上搭建的Redis服务之间进行数据导入导出。[/p][p=30, 2, left]Redis缓存数据迁移适用于以下场景:[/p][list] [*]用户将华为云DCS缓存实例的数据导出,然后导入其他新建缓存实例。 [*]用户将华为云上自建的Redis服务数据导出,然后导入到DCS缓存实例。 [*]用户将非华为云上的Redis服务数据导出,导入到DCS缓存实例。 [*]用户自行备份和保存DCS缓存实例数据。 [/list]
  • Redis 和 Memcached 的区别详解
    [i=s] 本帖最后由 云彩飞扬 于 2018-2-12 15:38 编辑 [/i] [align=left][font="][size=2]文章内容来自“码农网”[/size][/font][/align][align=left][p=30, 2, left][b][size=3]Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较:[/size][/b][/p][/align][list=1] [*][size=3]Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。[/size] [*][size=3]内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。[/size] [*][size=3]性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。 [/size] [/list][align=left][p=30, 2, left][b][size=3]具体为什么会出现上面的结论,以下为收集到的资料:[/size][/b][/p][/align][p=30, 2, left][size=3]1、数据类型支持不同[/size][/p][align=left][p=30, 2, left][size=3]与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多。最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。Redis内部使用一个redisObject对象来表示所有的key和value。redisObject最主要的信息如图所示:[/size][/p][/align][align=left][align=center][size=3][attach]10915[/attach][/size][/align][/align][align=left][font="][size=3][color=#088db][url=http://static.codeceo.com/images/2016/06/12a56f412c327e35a7cfdef3ce7a5330.jpg][img=1,254]http://static.codeceo.com/images/2016/06/12a56f412c327e35a7cfdef3ce7a5330.jpg[/img][/url][/color][/size][/font][/align][align=left][p=30, 2, left][size=3]type代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:type=string代表value存储的是一个普通字符串,那么对应的encoding可以是raw或者是int,如果是int则代表实际redis内部是按数值型类存储和表示这个字符串的,当然前提是这个字符串本身可以用数值表示,比如:”123″ “456”这样的字符串。只有打开了Redis的虚拟内存功能,vm字段字段才会真正的分配内存,该功能默认是关闭状态的。[/size][/p][/align][align=left][p=30, 2, left][size=3]1)String[/size][/p][/align][list] [*][size=3]常用命令:set/get/decr/incr/mget等;[/size] [*][size=3]应用场景:String是最常用的一种数据类型,普通的key/value存储都可以归为此类;[/size] [*][size=3]实现方式:String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr、decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。[/size] [/list][align=left][p=30, 2, left][size=3]2)Hash[/size][/p][/align][list] [*][size=3]常用命令:hget/hset/hgetall等[/size] [*][size=3]应用场景:我们要存储一个用户信息对象数据,其中包括用户ID、用户姓名、年龄和生日,通过用户ID我们希望获取该用户的姓名或者年龄或者生日;[/size] [*][size=3]实现方式:Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口。如图所示,Key是用户ID, value是一个Map。这个Map的key是成员的属性名,value是属性值。这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据。当前HashMap的实现有两种方式:当HashMap的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,这时对应的value的redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。 [/size] [/list][align=center][img=383,192]http://static.codeceo.com/images/2016/06/hash.jpg[/img][/align][p=30, 2, left][size=3]3)List[/size][/p][font="][size=3][list] [*]常用命令:lpush/rpush/lpop/rpop/lrange等; [*]应用场景:Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现; [*]实现方式:Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。 [/list][/size][/font][p=30, 2, left][size=3]4)Set[/size][/p][size=3][font="][list] [*]常用命令:sadd/spop/smembers/sunion等; [*]应用场景:Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的; [*]实现方式:set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。 [/list][align=left][p=30, 2, left]5)Sorted Set[/p][/align][list] [*]常用命令:zadd/zrange/zrem/zcard等; [*]应用场景:Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是**有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。 [*]实现方式:Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。 [/list][/font][/size][p=30, 2, left]2、内存管理机制不同[/p][size=3][font="][align=left][p=30, 2, left]在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘。Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。同时由于Redis将内存中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个操作,直到子线程完成swap操作后才可以进行修改。当从Redis中读取数据的时候,如果读取的key对应的value不在内存中,那么Redis就需要从swap文件中加载相应数据,然后再返回给请求方。 这里就存在一个I/O线程池的问题。在默认的情况下,Redis会出现阻塞,即完成所有的swap文件加载后才会相应。这种策略在客户端的数量较小,进行批量操作的时候比较合适。但是如果将Redis应用在一个大型的网站应用程序中,这显然是无法满足大并发的情况的。所以Redis运行我们设置I/O线程池的大小,对需要从swap文件中加载相应数据的读取请求进行并发操作,减少阻塞的时间。[/p][/align][/font][/size][align=left][align=left] 对于像Redis和Memcached这种基于内存的数据库系统来说,内存管理的效率高低是影响系统性能的关键因素。传统C语言中的malloc/free函数是最常用的分配和释放内存的方法,但是这种方法存在着很大的缺陷:首先,对于开发人员来说不匹配的malloc和free容易造成内存泄露;其次频繁调用会造成大量内存碎片无法回收重**用,降低内存利用率;最后作为系统调用,其系统开销远远大于一般函数调用。所以,为了提高内存的管理效率,高效的内存管理方案都不会直接使用malloc/free调用。Redis和Memcached均使用了自身设计的内存管理机制,但是实现方法存在很大的差异,下面将会对两者的内存管理机制分别进行介绍。[/align][align=left]Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。Slab Allocation机制只为存储外部数据而设计,也就是说所有的key-value数据都存储在Slab Allocation系统里,而Memcached的其它内存请求则通过普通的malloc/free来申请,因为这些请求的数量和频率决定了它们不会对整个系统的性能造成影响Slab Allocation的原理相当简单。 如图所示,它首先从操作系统申请一大块内存,并将其分割成各种尺寸的块Chunk,并把尺寸相同的块分成组Slab Class。其中,Chunk就是用来存储key-value数据的最小单位。每个Slab Class的大小,可以在Memcached启动的时候通过制定Growth Factor来控制。假定图中Growth Factor的取值为1.25,如果第一组Chunk的大小为88个字节,第二组Chunk的大小就为112个字节,依此类推。[/align] [/align][size=3][font="][align=left][align=center][attach]10917[/attach][/align][/align][align=left][color=#088db][url=http://static.codeceo.com/images/2016/06/114782d7cbbe662bfba6d3725d971af0.jpg][img=1,395]http://static.codeceo.com/images/2016/06/114782d7cbbe662bfba6d3725d971af0.jpg[/img][/url][/color][/align][align=left][p=30, 2, left]当Memcached接收到客户端发送过来的数据时首先会根据收到数据的大小选择一个最合适的Slab Class,然后通过查询Memcached保存着的该Slab Class内空闲Chunk的列表就可以找到一个可用于存储数据的Chunk。当一条数据库过期或者丢弃时,该记录所占用的Chunk就可以回收,重新添加到空闲列表中。从以上过程我们可以看出Memcached的内存管理制效率高,而且不会造成内存碎片,但是它最大的缺点就是会导致空间浪费。因为每个Chunk都分配了特定长度的内存空间,所以变长数据无法充分利用这些空间。如图 所示,将100个字节的数据缓存到128个字节的Chunk中,剩余的28个字节就浪费掉了。[/p][/align][align=left][align=center][attach]10918[/attach][/align][/align][align=left][color=#088db][url=http://static.codeceo.com/images/2016/06/88255d7e6104ae03101ff725ce36cbb6.png][img=1,142]http://static.codeceo.com/images/2016/06/88255d7e6104ae03101ff725ce36cbb6.png[/img][/url][/color][/align][align=left][p=30, 2, left]Redis的内存管理主要通过源码中zmalloc.h和zmalloc.c两个文件来实现的。Redis为了方便内存的管理,在分配一块内存之后,会将这块内存的大小存入内存块的头部。如图所示,real_ptr是redis调用malloc后返回的指针。redis将内存块的大小size存入头部,size所占据的内存大小是已知的,为size_t类型的长度,然后返回ret_ptr。当需要释放内存的时候,ret_ptr被传给内存管理程序。通过ret_ptr,程序可以很容易的算出real_ptr的值,然后将real_ptr传给free释放内存。[/p][/align][align=left][color=#088db][url=http://static.codeceo.com/images/2016/06/1589fe4ab621d486e71dc674cc965ee3.png][img=1,95]http://static.codeceo.com/images/2016/06/1589fe4ab621d486e71dc674cc965ee3.png[/img][/url][/color][/align][/font][/size][size=3][font="][align=left][font="][size=16px] Redis通过定义一个数组来记录所有的内存分配情况,这个数组的长度为ZMALLOC_MAX_ALLOC_STAT。数组的每一个元素代表当前程序所分配的内存块的个数,且内存块的大小为该元素的下标。在源码中,这个数组为zmalloc_allocations。zmalloc_allocations[16]代表已经分配的长度为16bytes的内存块的个数。[/size][/font]zmalloc.c中有一个静态变量used_memory用来记录当前分配的内存总大小。所以,总的来看,Redis采用的是包装的mallc/free,相较于Memcached的内存管理方法来说,要简单很多。[/align][/font][/size][p=30, 2, left]3、数据持久化支持[/p][size=3][font="][align=left][p=30, 2, left]Redis虽然是基于内存的存储系统,但是它本身是支持内存数据的持久化的,而且提供两种主要的持久化策略:RDB快照和AOF日志。而memcached是不支持数据持久化操作的。[/p][/align][align=left][p=30, 2, left]1)RDB快照[/p][/align][align=left][p=30, 2, left]Redis支持将当前数据的快照存成一个数据文件的持久化机制,即RDB快照。但是一个持续写入的数据库如何生成快照呢?Redis借助了fork命令的copy on write机制。在生成快照时,将当前进程fork出一个子进程,然后在子进程中循环所有的数据,将数据写成为RDB文件。我们可以通过Redis的save指令来配置RDB快照生成的时机,比如配置10分钟就生成快照,也可以配置有1000次写入就生成快照,也可以多个规则一起实施。这些规则的定义就在Redis的配置文件中,你也可以通过Redis的CONFIG SET命令在Redis运行时设置规则,不需要重启Redis。[/p][/align][align=left][p=30, 2, left]Redis的RDB文件不会坏掉,因为其写操作是在一个新进程中进行的,当生成一个新的RDB文件时,Redis生成的子进程会先将数据写到一个临时文件中,然后通过原子性rename系统调用将临时文件重命名为RDB文件,这样在任何时候出现故障,Redis的RDB文件都总是可用的。同时,Redis的RDB文件也是Redis主从同步内部实现中的一环。RDB有他的不足,就是一旦数据库出现问题,那么我们的RDB文件中保存的数据并不是全新的,从上次RDB文件生成到Redis停机这段时间的数据全部丢掉了。在某些业务下,这是可以忍受的。[/p][/align][align=left][p=30, 2, left]2)AOF日志[/p][/align][align=left][p=30, 2, left]AOF日志的全称是append only file,它是一个追加写入的日志文件。与一般数据库的binlog不同的是,AOF文件是可识别的纯文本,它的内容就是一个个的Redis标准命令。只有那些会导致数据发生修改的命令才会追加到AOF文件。每一条修改数据的命令都生成一条日志,AOF文件会越来越大,所以Redis又提供了一个功能,叫做AOF rewrite。其功能就是重新生成一份AOF文件,新的AOF文件中一条记录的操作只会有一次,而不像一份老文件那样,可能记录了对同一个值的多次操作。其生成过程和RDB类似,也是fork一个进程,直接遍历数据,写入新的AOF临时文件。在写入新文件的过程中,所有的写操作日志还是会写到原来老的AOF文件中,同时还会记录在内存缓冲区中。当重完操作完成后,会将所有缓冲区中的日志一次性写入到临时文件中。然后调用原子性的rename命令用新的AOF文件取代老的AOF文件。[/p][/align][align=left][p=30, 2, left]AOF是一个写文件操作,其目的是将操作日志写到磁盘上,所以它也同样会遇到我们上面说的写操作的流程。在Redis中对AOF调用write写入后,通appendfsync选项来控制调用fsync将其写到磁盘上的时间,下面appendfsync的三个设置项,安全强度逐渐变强。[/p][/align][list] [*]appendfsync no 当设置appendfsync为no的时候,Redis不会主动调用fsync去将AOF日志内容同步到磁盘,所以这一切就完全依赖于操作系统的调试了。对大多数Linux操作系统,是每30秒进行一次fsync,将缓冲区中的数据写到磁盘上。 [*]appendfsync everysec 当设置appendfsync为everysec的时候,Redis会默认每隔一秒进行一次fsync调用,将缓冲区中的数据写到磁盘。但是当这一次的fsync调用时长超过1秒时。Redis会采取延迟fsync的策略,再等一秒钟。也就是在两秒后再进行fsync,这一次的fsync就不管会执行多长时间都会进行。这时候由于在fsync时文件描述符会被阻塞,所以当前的写操作就会阻塞。所以结论就是,在绝大多数情况下,Redis会每隔一秒进行一次fsync。在最坏的情况下,两秒钟会进行一次fsync操作。这一操作在大多数数据库系统中被称为group commit,就是组合多次写操作的数据,一次性将日志写到磁盘。 [*]appednfsync always 当设置appendfsync为always时,每一次写操作都会调用一次fsync,这时数据是最安全的,当然,由于每次都会执行fsync,所以其性能也会受到影响。 [/list][align=left][p=30, 2, left]对于一般性的业务需求,建议使用RDB的方式进行持久化,原因是RDB的开销并相比AOF日志要低很多,对于那些无法忍数据丢失的应用,建议使用AOF日志。[/p][/align][/font][/size][p=30, 2, left]4、集群管理的不同[/p][size=3][font="][align=left][p=30, 2, left]Memcached是全内存的数据缓冲系统,Redis虽然支持数据的持久化,但是全内存毕竟才是其高性能的本质。作为基于内存的存储系统来说,机器物理内存的大小就是系统能够容纳的最大数据量。如果需要处理的数据量超过了单台机器的物理内存大小,就需要构建分布式集群来扩展存储能力。[/p][/align][align=left][p=30, 2, left]Memcached本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储。下图给出了Memcached的分布式存储实现架构。当客户端向Memcached集群发送数据之前,首先会通过内置的分布式算法计算出该条数据的目标节点,然后数据会直接发送到该节点上存储。但客户端查询数据时,同样要计算出查询数据所在的节点,然后直接向该节点发送查询请求以获取数据。[/p][/align][align=left][color=#088db][url=http://static.codeceo.com/images/2016/06/2b882c63788f2db89760ffc0e907066b.jpg][img=1,276]http://static.codeceo.com/images/2016/06/2b882c63788f2db89760ffc0e907066b.jpg[/img][/url][/color][/align][/font][/size][size=3][font="][align=left][font="][size=16px] 相较于Memcached只能采用客户端实现分布式存储,Redis更偏向于在服务器端构建分布式存储。最新版本的Redis已经支持了分布式存储功能。Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,具有线性可伸缩的功能。下图给出Redis Cluster的分布式存储架构,其中节点与节点之间通过二进制协议进行通信,节点与客户端之间通过ascii协议进行通信。在数据的放置策略上,Redis Cluster将整个key的数值域分成4096个哈希槽,每个节点上可以存储一个或多个哈希槽,也就是说当前Redis Cluster支持的最大节点数就是4096。Redis Cluster使用的分布式算法也很简单:crc16( key ) %[/size][/font]HASH_SLOTS_NUMBER。[/align][align=left][color=#088db][url=http://static.codeceo.com/images/2016/06/08f6212d0a7925d86d7dd8651fca0f98.jpg][img=1,347]http://static.codeceo.com/images/2016/06/08f6212d0a7925d86d7dd8651fca0f98.jpg[/img][/url][/color][/align][align=left] 为了保证单点故障下的数据可用性,Redis Cluster引入了Master节点和Slave节点。在Redis Cluster中,每个Master节点都会有对应的两个用于冗余的Slave节点。这样在整个集群中,任意两个节点的宕机都不会导致数据的不可用。当Master节点退出后,集群会自动选择一个Slave节点成为新的Master节点。[/align][align=left][color=#088db][url=http://static.codeceo.com/images/2016/06/bad86580978846460814ecb9f3584bbb.jpg][img=1,196]http://static.codeceo.com/images/2016/06/bad86580978846460814ecb9f3584bbb.jpg[/img][/url][/color][/align][/font][/size]
  • Redis主从复制机制
    [i=s] 本帖最后由 云彩飞扬 于 2018-2-7 11:50 编辑 [/i] [p=21, null, center][color=rgb(51, 51, 51)][font="][size=10.5pt][img=487,186]http://image.hw3static.com/hi/staticimages/hi3msg/images/2018/0126/18/5a6afd55b4fb8.jpg[/img][/size][/font][/color][/p][p=21, null, left] [font=微软雅黑] 1.启动一个Slave进程后,它会向Master发送一个SYNC Command,请求同步连接。[/font][/p][p=21, null, left][font=微软雅黑] 2.无论是第一次连接还是重新连接,Master都会启动一个后台进程,将数据快照保存到数据文件中,同时Master会记录所有修改数据的命令并缓存在数据文件中。[/font][/p][p=21, null, left][font=微软雅黑] 3.后台进程完成缓存操作后,Master就发送数据文件给Slave,Slave端将数据文件保存到硬盘上,然后将其在加载到内存中,接着Master就会所有修改数据的操作,将其发送给Slave端。[/font][/p][p=21, null, left][font=微软雅黑] 4.若Slave出现故障导致宕机,恢复正常后会自动重新连接,Master收到Slave的连接后,将其完整的数据文件发送给Slave。[/font][/p][p=21, null, left][font=微软雅黑] 5.如果Mater同时收到多个Slave发来的同步请求,Master只会在后台启动一个进程保存数据文件,然后将其发送给所有的Slave,确保Slave正常。[/font][/p] [p=21, null, left][color=rgb(51, 51, 51)][font="][size=10.5pt] [/size][/font][/color][/p][p=30, 2, left][font=微软雅黑]其优点:[/font][/p][p=30, 2, left][font=微软雅黑]1.同一个Master可以拥有多个Slaves。[/font][/p][p=30, 2, left][font=微软雅黑]2.Master下的Slave还可以接受同一架构中其它slave的链接与同步请求,实现数据的级联复制,即Master->Slave->Slave模式;[/font][/p][p=30, 2, left][font=微软雅黑]3.Master以非阻塞的方式同步数据至slave,这将意味着Master会继续处理一个或多个slave的读写请求;[/font][/p][p=30, 2, left][font=微软雅黑]4.Slave端同步数据也可以修改为非阻塞是的方式,当slave在执行新的同步时,它仍可以用旧的数据信息来提供查询;否则,当slave与master失去联系时,slave会返回一个错误给客户端;[/font][/p][p=30, 2, left][font=微软雅黑]5.主从复制具有可扩展性,即多个slave专门提供只读查询与数据的冗余,Master端专门提供写操作;[/font][/p][p=21, null, left][font=微软雅黑]通过配置禁用Master数据持久化机制,将其数据持久化操作交给Slaves完成,避免在Master中要有独立的进程来完成此操作。[color=rgb(51, 51, 51)] [/color][color=rgb(51, 51, 51)][size=10.5pt] [/size][/color][/font][/p]
  • 【数据库问题】平台redis连接失败排查步骤
    [i=s] 本帖最后由 云彩飞扬 于 2018-2-7 11:40 编辑 [/i] [align=left][p=30, 2, left]服务链接redis失败参考下面步骤排查问题。[/p][/align][align=left][p=30, 2, left]请按照顺序排查![/p][/align][align=left][p=30, 2, left][b]1.排查环境问题。[/b][/p][/align][align=left][font=微软雅黑] r[/font]edis连接失败一般都是redis服务端问题,如何确定是不是服务端的问题请看下面步骤。[/align][align=left][font=微软雅黑] 用ps -ef|grep =dr[/font][/align][align=left][align=center][font=微软雅黑][img]http://image.hw3static.com/hi/staticimages/hi3msf/images/2016/1126/11/5838fe82bed2d.png[/img][/font][/align][/align][align=left][font=微软雅黑] [/font]查看一下DR是否启动;(dr的配置文件位置在-c 后面)[/align][align=left][font=微软雅黑] 查看服务的appversion[/font][/align][align=left][align=center] [font=微软雅黑][img=766,0]http://image.hw3static.com/hi/staticimages/hi3msf/images/2016/1126/10/5838f0f381d85_900x213.png[/img][/font][/align][/align][align=left][font=微软雅黑] 结合DR的配置文件 vi /var/share/oss/manager/BusService/nginx/etc/nginx/conf/nginx_dr.conf[/font][/align][align=left][align=center][font=微软雅黑][img=453,0]http://image.hw3static.com/hi/staticimages/hi3msf/images/2016/1126/11/5838fe82bf535.png[/img][/font][/align][/align][align=left][font=微软雅黑] 找到链接reids的服务端IP和端口,用redis-cli去手动建立链接,看看是否能够成功链接。[/font][/align][align=left][font=微软雅黑] 排查redis服务端和证书问题。[/font][/align][align=left][font=微软雅黑] 1.1在 opt/redis/bin目录下执行:(若没有该目录表示直连redis,IP和端口在appversion里面,需要安装DBagent服务或者是其他节点拷贝一个redis-cli)[/font][/align][align=left][font=微软雅黑] ./redis-cli -h {ip} -p {port} -cipherdir /opt/oss/{租户}/etc/cipher/ -a {dbservername}@ossdbuser@Changeme@123[/font][/align][align=left][font=微软雅黑]如果连接成功说明redis服务端没问题和证书都没问题。[/font][/align][align=left][font=微软雅黑] 1.2如果不成功,需要用管理面的证书连接一下。[/font][/align][align=left][font=微软雅黑] ./redis-cli -h {ip} -p {port} -cipherdir /opt/oss/manageretc/cipher/ -a {dbservername}@ossdbuser@Changeme@123如果这个连接成功,表示redis服务端没问题,证书有问题。[/font][/align][align=left][font=微软雅黑] 排查DR问题。[/font][/align][align=left][font=微软雅黑] 1.3如果是通过DR代理链接redis的话,需要再用appversion中的本地的IP端口去链接试一下,如果不成功说明本地DR有问题,成功说明本地DR,redis服务端和证书都没有问题。[/font][/align][align=left][font=微软雅黑] ./redis-cli -h 127.0.0.1 -p {port} -cipherdir /opt/oss/manager/etc/cipher/ -a {dbservername}@ossdbuser@Changeme@123[/font][/align][align=left][font=微软雅黑] [b]2.服务redis配置有问题。[/b][/font][/align][align=left][font=微软雅黑] 如果是通过DR代理连接redis,需要查appversion中的dbserver**的端口和DR的配置文件中的配置中dbserver的配置是否有问题。比如端口是不是一致,端口是否**,IP是不会有错,实例是否是同一个等。[/font][/align][align=left][font=微软雅黑] [b]3.服务代码问题。[/b][/font][/align][align=left][font=微软雅黑] 这个情况常见的是redisname传值为null。导致获取链接失败。排查到这里还是有问题可以连接框架的接口人定位。[/font][/align]
  • 关于Redis 的介绍!
    [i=s] 本帖最后由 云彩飞扬 于 2018-2-7 10:58 编辑 [/i] [align=left][p=30, 2, left][b]一:[/b][b]Redis [/b][b]是什么?[/b][/p][/align][align=left][p=30, 2, left]Redis是基于内存、可持久化的日志型、Key-Value数据库高性能存储系统,并提供多种语言的API.[/p][/align][align=left][p=30, 2, left][b]二:出现背景[/b][/p][/align][list] [*][size=3]数据结构(Data Structure)需求越来越多, 但memcache中没有, 影响开发效率[/size] [*][size=3]性能需求, 随着读操作的量的上升需要解决,经历的过程有: 数据库读写分离(M/S)–>数据库使用多个Slave–>增加Cache (memcache)–>转到Redis[/size] [*][size=3]解决写的问题: 水平拆分,对表的拆分,将有的用户放在这个表,有的用户放在另外一个表;[/size] [*][align=left][size=3]可靠性需求 Cache的"雪崩"问题让人纠结 Cache面临着快速恢复的挑战[/size][/align] [*][align=left][size=3]开发成本需求 Cache和DB的一致性维护成本越来越高(先清理DB, 再清理缓存, 不行啊, 太慢了!) 开发需要跟上不断涌入的产品需求 硬件成本最贵的就是数据库层面的机器,基本上比前端的机器要贵几倍,主要是IO密集型,很耗硬件;[/size][/align] [*][align=left][size=3]维护性复杂 一致性维护成本越来越高; BerkeleyDB使用B树,会一直写新的,内部不会有文件重新组织;这样会导致文件越来越大;大的时候需要进行文件归档,归档的操作要定期做; 这样,就需要有一定的down time;[/size][/align] [/list][align=left][p=30, 2, left]基于以上考虑, 选择了Redis[/p][/align][align=left][p=30, 2, left][b]三:Redis 应用[/b][/p][/align][p=30, 2, left]Redis简介[/p][align=left][p=30, 2, left]1. 支持5种[b]数据结构[/b][/p][/align][align=left][p=30, 2, left]支持strings, hashes, lists, sets, sorted sets[/p][p=30, 2, left]string是很好的存储方式,用来做计数存储。sets用于建立索引库非常棒;[/p][/align][align=left][p=30, 2, left]2. K-V 存储 vs K-V 缓存[/p][/align][align=left][p=30, 2, left]新浪微博目前使用的98%都是持久化的应用,2%的是缓存,用到了600+服务器[/p][p=30, 2, left]Redis中持久化的应用和非持久化的方式不会差别很大:[/p][p=30, 2, left]非持久化的为8-9万tps,那么持久化在7-8万tps左右;[/p][p=30, 2, left]当使用持久化时,需要考虑到持久化和写性能的配比,也就是要考虑redis使用的内存大小和硬盘写的速率的比例计算;[/p][/align][align=left][p=30, 2, left]3. 社区活跃[/p][/align][align=left][p=30, 2, left]Redis目前有3万多行代码, 代码写的精简,有很多巧妙的实现,作者有技术洁癖[/p][p=30, 2, left]Redis的社区活跃度很高,这是衡量开源软件质量的重要指标,开源软件的初期一般都没有商业技术服务支持,如果没有活跃社区做支撑,一旦发生问题都无处求救;[/p][/align][align=left][p=30, 2, left]Redis基本原理[/p][/align][align=left][p=30, 2, left]redis持久化(aof) append online file:[/p][p=30, 2, left]写log(aof), 到一定程度再和内存合并. 追加再追加, 顺序写磁盘, 对性能影响非常小[/p][/align][align=left][p=30, 2, left]1. 单实例单进程[/p][/align][align=left][p=30, 2, left]Redis使用的是单进程,所以在配置时,一个实例只会用到一个CPU;[/p][p=30, 2, left]在配置时,如果需要让CPU使用率最大化,可以配置Redis实例数对应CPU数, Redis实例数对应端口数(8核Cpu, 8个实例, 8个端口), 以提高并发:[/p][p=30, 2, left]单机测试时, 单条数据在200字节, 测试的结果为8~9万tps;[/p][/align][align=left][p=30, 2, left]2. Replication[/p][/align][align=left][p=30, 2, left]过程: 数据写到master–>master存储到slave的rdb中–>slave加载rdb到内存。[/p][p=30, 2, left]存储点(save point): 当网络中断了, 连上之后, 继续传.[/p][align=left][p=30, 2, left]Master-slave下第一次同步是全传,后面是增量同步;[/p][/align][align=left][p=30, 2, left]3. 数据一致性[/p][/align][/align][align=left][p=30, 2, left]长期运行后多个结点之间存在不一致的可能性;[/p][p=30, 2, left]开发两个工具程序:[/p][p=30, 2, left]1.对于数据量大的数据,会周期性的全量检查;[/p][p=30, 2, left]2.实时的检查增量数据,是否具有一致性;[/p][/align][align=left][p=30, 2, left]对于主库未及时同步从库导致的不一致,称之为延时问题;[/p][p=30, 2, left]对于一致性要求不是那么严格的场景,我们只需要要保证最终一致性即可;[/p][p=30, 2, left]对于延时问题,需要根据业务场景特点分析,从应用层面增加策略来解决这个问题;[/p][p=30, 2, left]例如:[/p][p=30, 2, left]1.新注册的用户,必须先查询主库;[/p][p=30, 2, left]2.注册成功之后,需要等待3s之后跳转,后台此时就是在做数据同步。[/p][/align]
  • 如何优雅的分析 Redis 里存了啥?
    [i=s] 本帖最后由 云彩飞扬 于 2018-2-6 11:14 编辑 [/i] [align=left][size=2]文章来自:[url=http://www.infoq.com/cn/articles/analysis-redis]InfoQ[/url],作者:董明鑫 雪球 SRE 工程师[/size][/align][align=left][color=rgb(85, 85, 85)][backcolor=rgb(239, 239, 239)][font="][size=14px] [/size][/font][/backcolor][/color][/align][align=left][p=30, 2, left]Redis 是互联网产品开发中不可缺少的常备武器,它性能高、数据结构丰富、简单易用,但同时也是因为太容易用了,我们的开发同学不管什么数据、不管这数据有多大、不管数据有多少通通塞进去,最后导致的问题就是 Redis 内存使用持续上升,但是又不知道里面的数据是不是有用,是否可以拆分和清理。[/p][/align][align=left][p=30, 2, left]为了更好地使用 Redis,除了对 Redis 做一些使用规范,还需要对线上使用的 Redis 有充分的了解。那么问题来了:一个 Redis 的实例用了那么大的内存,里边到底存了啥?都有哪些 key?每个 key 占用了多少空间?[/p][align=left][p=30, 2, left]雪球当前有几十个 Redis 集群,近千个 Redis 实例,5T 的内存数据,我们也想要分析业务是否有误用,以提高资源利用率。当然,曾经我们也深深地被这个问题所困扰,今天我就来和大家分享下我是如何解决这个问题的,希望能给各位一些启发。[/p][/align][/align][align=left][p=30, 2, left]那有没有什么办法让我们安全高效的看到 Redis 内存消耗的详细报表呢?办法总比问题多,有需求就有解决方案。雪球 SRE 团队针对这个问题实现了一个 Redis 数据可视化平台 RDR (Redis Data Reveal)。RDR 可以非常方便的对 Reids 的内存进行分析,了解一个 Redis 实例里都有哪些 key,哪类 key 占用的空间是多少,最耗内存的 key 有哪些,占比如何,非常直观。[/p][/align][p=30, 2, left][b]设计思路[/b][/p][align=left][p=30, 2, left]我们先梳理下,有什么办法可以拿到 Redis 的所有数据。从我的角度看,大概有以下几种方法,我们分析一下个字的优缺点:[/p][/align][align=left][p=30, 2, left][color=#a0522d]1. 先通过 keys * 命令,拿到所有的 key,然后根据 key 再获取所有的内容。[/color][/p][/align][p=30, 2, left]优点:可以不使用 Redis 机器的硬盘,直接网络传输[/p][p=30, 2, left]缺点:如果 key 数量特别多,keys 命令可能会导致 Redis 卡住影响业务;需要对 Redis 请求非常多次,资源消耗多;遍历数据太慢[/p][align=left][p=30, 2, left][color=#a0522d]2. 开启 aof,通过 aof 文件获取到所有数据。[/color][/p][/align][p=30, 2, left]优点:无需影响 Redis 服务,完全离线操作,足够安全;[/p][p=30, 2, left]缺点:有一些 Redis 实例写入频繁,不适合开启 aof,普适性不强;aof 文件有可能特别大,传输、解析起来太慢,效率低。[/p][p=30, 2, left][color=#a0522d]3. 使用 bgsave,获取 rdb 文件,解析后获取数据[/color]。 [/p][p=30, 2, left]优点:机制成熟,可靠性好;文件相对小,传输、解析效率高;[/p][p=30, 2, left]缺点:bgsave 虽然会 fork 子进程,但还是有可能导致主进程卡住一段时间,对业务有产生影响的风险;[/p][align=left][p=30, 2, left]以上几种方式我们评估之后,决定采用低峰期在从节点做 bgsave 获取 rdb 文件,相对安全可靠,也可以覆盖所有业务的 Redis 集群。也就是说每个实例每天在低峰期自动生成一个 rdb 文件,即使报表数据有一天的延迟也是可以接受的。[/p][align=left][p=30, 2, left]拿到了 rdb 文件就相当于拿到了 Redis 实例的所有数据,接下来就是生成报表的过程了:[/p][/align][/align][p=30, 2, left][color=#a0522d]1.解析 rdb 文件,获取到 Key 和 Value 的内容;[/color][/p][p=30, 2, left][color=#a0522d]2.根据相对应的数据结构及内容,估算内存消耗等;[/color][/p][p=30, 2, left][color=#a0522d]3.统计并生成报表;[/color][/p][align=left][p=30, 2, left]逻辑很简单,所以设计思路很清晰。数据流图如下:[/p][p=30, 2, center][attach]10487[/attach][/p][/align][align=left][color=rgb(85, 85, 85)][font=Helvetica, "][size=14px][color=#286ab2][url=https://s3.amazonaws.com/infoq.content.live.0/articles/analysis-redis/zh/resources/3361-1517241187580.png][img]articles/analysis-redis/zh/resources/3361-1517241187580.png[/img][/url][/color][/size][/font][/color][/align][align=left][p=30, 2, left]我们再看下具体该如何实现,首先是语言选型,雪球 SRE 自研的组件基本都是用 Go 语言做的后端,所以语言选型没什么纠结,直接用 Go。然后就是刚刚说的那几个流程。[/p][/align][p=30, 2, left][color=#8b0000]1. 解析 RDB[/color][/p][align=left][p=30, 2, left]按照 Redis 的协议来做就可以了,这个在 GitHub 上搜索 parse rdb 就可以找到许多解析 rdb 文件的库,拿过来使用即可。[/p][/align][p=30, 2, left][color=#8b0000]2. 估算内存消耗[/color][/p][align=left][p=30, 2, left]一条记录会有哪些内存使用呢?[/p][/align][align=left][p=30, 2, left]我们知道 Redis 的实现里面有一些基础的数据结构,就是用这些结构来实现了对外暴露的各种数据类型:比如 sds、dict、intset、zipmap、adlist、ziplist、quicklist、skiplist 等等。只要根据这条记录的数据类型,找出使用了哪些数据结构,再计算出这些基础数据结构的内存消耗,再加上数据的内存使用,以及一些额外开销比如过期时间等,就可以估算出一条记录到底使用了多少内存。[/p][/align][align=left][p=30, 2, left]但是由于 Redis 做了非常多的优化,同样的一种数据类型,在不同场景下使用的数据结构有可能是不同的。比如 List ,比较老版本的 Redis,会根据 list 元素的数量来决定来使用哪种结构,较短的时候使用 adlist,长之后使用 ziplist,数值可以通过 list-max-ziplist-entries 来配置。[/p][/align][align=left][align=left][p=30, 2, left]3.2 版本以后全都使用了 quicklist。而不同结构对于内存的使用其实是有区别的,我们计算的时候也没办法拿到具体的配置,所以都按默认配置来计算,最后得出的值是一个估算的值,不过也基本可以反应使用情况了。如果大家对于 Redis 使用的各种数据结构感兴趣,想了解其设计及适用场景,可以多搜索一下相关的资料以及阅读 Redis 源码。[/p][/align][align=left][p=30, 2, left]举个计算内存使用的例子[color=rgb(85, 85, 85)]:[/color][/p][/align][/align][align=left][p=30, 2, left]假如我们通过解析 rdb,获取到了一个 key 为 hello,value 为 world,类型为 string ,ttl 为 1440 的一条记录,它的内存使用是这样的:[/p][/align][p=30, 2, left]一个 dictEntry 的消耗,Redis db 就是一个大 dict,每对 kv 都是其中的一个 entry ;[/p][p=30, 2, left]一 个 robj 的消耗,robj 是为了在同一个 dict 内能够存储不同类型的 value,而使用的一个通用的数据结构,全名是 Redis Object;[/p][p=30, 2, left]存储 key 的 sds 消耗,sds 是 Redis 中存储字符串使用的数据结构; [/p][p=30, 2, left]存储过期时间消耗;[/p][p=30, 2, left]存储 value 的 sds 消耗;[/p][p=30, 2, left]前四项基本是存储任何一个 key 都需要消耗的,最后一项根据 value 的数据结构不同而不同。[/p][p=30, 2, left]一个 dictEntry 有 2 个指针,一个 int64 的内存消耗;[/p][p=30, 2, left]一个 robj 有 1 指针,一个 int,以及几个使用位域的字段共消耗 4 字节;[/p][p=30, 2, left]过期时间也是存储为一个 dictEntry,时间戳为 int64;[/p][p=30, 2, left]存储 sds 需要存储 header 以及字符串长度 +1 的空间,header 长度根据字符串长度不同也会有所不同;[/p][p=30, 2, left]我们根据以上信息可以算出,向操作系统申请这些内存,真正需要多少内存。由于 Redis 支持多种 malloc 算法,我们就按 jemalloc 的分配方式算,这里也是可能存在误差的点。[/p][p=30, 2, left][color=#000000]所以最后 key 为 hello 的这条记录在 64 位操作系统上一共会消耗 92 字节。[/color][/p][p=30, 2, center][attach]10488[/attach][/p][align=left][color=rgb(85, 85, 85)][font=Helvetica, "][size=14px][color=#286ab2][url=https://s3.amazonaws.com/infoq.content.live.0/articles/analysis-redis/zh/resources/2672-1517241186919.png][img]articles/analysis-redis/zh/resources/2672-1517241186919.png[/img][/url][/color][/size][/font][/color][/align][align=left][p=30, 2, left]其他类型的计算也大致是同样的思路,只不过根据不同的数据结构需要计算不同的内存消耗,计算的时候要记得考虑内存对齐的情况。还有由于 zset 的算法涉及到了随机生成层数,我们也使用同样的算法来随机,但是算出来的值肯定不是精确的,也是一个误差点。[/p][/align][p=30, 2, left][color=#8b0000]3. 统计计数[/color][/p][align=left][p=30, 2, left]终于可以拿到任何一个 key 的内存使用了,哪些是最有意义最有价值的数据呢?[/p][/align][p=30, 2, left]top N,毫无疑问最大的前 N 个 key 一定是要关注的;[/p][p=30, 2, left]不同数据类型的 key 数量元素数量分布以及内存使用情况;[/p][p=30, 2, left]按照前缀分类,统一的前缀一般意味着某个特定的业务在使用,计算各个分类的 key 数量及内存使用情况;[/p][p=30, 2, left]这几个需求实现起来也都很容易:[/p][p=30, 2, left]维护一个小顶堆来存储前 N 个最大的即可,最后取出堆中的数据即可;[/p] [p=30, 2, left]计数即可;[/p] 一般都会有特定的分隔符,比如 :|._ 等字符,按照这些字符切出公共前缀再统计,同时把所有的数字都替换为 0,便于分类; [p=30, 2, left][color=#8b0000]4. 报表数据[/color][/p][p=30, 2, center][attach]10489[/attach][/p][p=30, 2, center][attach]10490[/attach][/p][p=30, 2, center][attach]10491[/attach][/p][align=left][color=rgb(85, 85, 85)][font=Helvetica, "][size=14px][color=#286ab2][url=https://s3.amazonaws.com/infoq.content.live.0/articles/analysis-redis/zh/resources/2193-1517241187181.png][img]articles/analysis-redis/zh/resources/2193-1517241187181.png[/img][/url][/color][/size][/font][/color][/align][align=left][color=rgb(85, 85, 85)][font=Helvetica, "][size=14px][color=#286ab2][url=https://s3.amazonaws.com/infoq.content.live.0/articles/analysis-redis/zh/resources/1824-1517241187338.png][img]articles/analysis-redis/zh/resources/1824-1517241187338.png[/img][/url][/color][/size][/font][/color][/align][align=left][color=rgb(85, 85, 85)][font=Helvetica, "][size=14px][color=#286ab2][url=https://s3.amazonaws.com/infoq.content.live.0/articles/analysis-redis/zh/resources/1625-1517241187475.png][img]articles/analysis-redis/zh/resources/1625-1517241187475.png[/img][/url][/color][/size][/font][/color][/align][align=left][align=left][p=30, 2, left]可以每天打开个网页就可以看到某个 Redis 实例的内存使用的详细情况,是件非常幸福的事情,Redis 的内存使用再也不是黑盒。[/p][/align][align=left][p=30, 2, left]这个系统上线一年以来对我们优化 Redis 资源使用、提高效率、节约成本提供了非常重要的数据支撑,而且在内部完全自动化,开发同学自己就可以看到当前 Redis 的使用情况是否符合预期,对于保障业务稳定也起到了非常重要的作用。这也是雪球的工程师团队一贯的做法,SRE 提供高效的工具,开发工程师可以自己运维自己的业务系统,可以极大的提高生产效率。[/p][/align][align=left][p=30, 2, left]这个项目参考了 redis-rdb-tool 这个开源项目,但是性能上比它高效几倍,为了回馈社区,也希望有机会帮到大家,所以我们决定开源出来。[/p][/align][/align][align=left][p=30, 2, left]雪球的内部系统根据自己的特殊场景做了自动化获取 rdb 文件并备份的逻辑,开源出来的版本去除了定制化,只保留了获取到 rdb 之后的分析逻辑以及页面。[/p][/align]
  • 怎么给分布式缓存实例配置运行参数?
    [i=s] 本帖最后由 云彩飞扬 于 2018-1-31 15:48 编辑 [/i] [align=left] [align=left] 为了确保分布式缓存服务发挥出最优性能,您可以根据自己的业务情况对分布式缓存实例的运行参数进行调整。[/align] 前提条件:只有单机和主备类型的处于“运行中”状态的缓存实例支持修改配置参数,集群实例不支持修改配置参数。 [/align][b][size=14px] [/size][size=3] 操作步骤[/size][/b][list=1] [*]登录华为云管理控制台。 [*]单击“数据库 > 分布式缓存服务”,进入分布式缓存服务信息页面。 [*]单击左侧菜单栏的“缓存管理”。 [*]在“缓存管理”页面,单击缓存实例的名称。 [*]单击“配置参数”页签进入配置界面。 [*]单击“修改”。 [*]根据需要修改相关参数。一般情况下,按照系统默认值设置参数即可 [/list][align=left] [p=30, 2, center][b]各参数的详细介绍见表1[/b][/p][/align][table=98%] [tr][td=11%][align=left][size=2]参数名[/size][/align][/td][td=17%][align=left][size=2]适用的缓存类型[/size][/align][/td][td][align=left][size=2]参数解释[/size][/align][/td][td=35%][align=left][size=2]取值范围[/size][/align][/td][td=8%][align=left][size=2]默认值[/size][/align][/td][/tr] [tr][td=11%][align=left][size=2]timeout[/size][/align][/td][td=17%][align=left][size=2]Redis、Memcached[/size][/align][/td][td][align=left][size=2]客户端与服务端连接空闲超时断开时间,参数设为0表示连接永不断开。[/size][/align][/td][td=35%][align=left][size=2]0~7200,单位:秒。[/size][/align][/td][td=8%][align=left][size=2]0[/size][/align][/td][/tr] [tr][td=11%][align=left][size=2]maxmemory-policy[/size][/align][/td][td=17%][align=left][size=2]Redis、Memcached[/size][/align][/td][td][align=left][align=left][size=2]内存使用达到上限时对缓存数据管理策略。[/size][/align][align=left][url=https://redis.io/topics/lru-cache][size=2]参数说明[/size][/url][/align][/align][/td][td=35%][align=left][size=2]volatile-lru[/size][/align][align=left][size=2]allkeys-lru[/size][/align][align=left][size=2]volatile-random[/size][/align][align=left][size=2]allkeys-random[/size][/align][align=left][size=2]volatile-ttl[/size][/align][align=left][size=2]noeviction[/size][/align][/td][td=8%][align=left][size=2]noeviction[/size][/align][/td][/tr] [tr][td=11%][align=left][size=2]hash-max-ziplist-entries[/size][/align][/td][td=17%][align=left][size=2]Redis[/size][/align][/td][td][align=left][size=2]当hash表中记录数少于参数值,使用ziplist编码格式,节约内存。[/size][/align][/td][td=35%][align=left][size=2]1~10000[/size][/align][/td][td=8%][align=left][size=2]512[/size][/align][/td][/tr] [tr][td=11%][align=left][size=2]hash-max-ziplist-value[/size][/align][/td][td=17%][align=left][size=2]Redis[/size][/align][/td][td][align=left][size=2]当hash表中各字段长度的最大值小于参数值时,使用ziplist编码格式,节约内存。[/size][/align][/td][td=35%][align=left][size=2]1~10000[/size][/align][/td][td=8%][align=left][size=2]64[/size][/align][/td][/tr] [tr][td=11%][align=left][size=2]list-max-ziplist-entries[/size][/align][/td][td=17%][align=left][size=2]Redis[/size][/align][/td][td][align=left][size=2]当列表中记录数少于参数值,使用ziplist编码格式,节约内存。[/size][/align][/td][td=35%][align=left][size=2]1~10000[/size][/align][/td][td=8%][align=left][size=2]512[/size][/align][/td][/tr] [tr][td=11%][align=left][size=2]list-max-ziplist-value[/size][/align][/td][td=17%][align=left][size=2]Redis[/size][/align][/td][td][align=left][size=2]当列表中各字段长度的最大值小于参数值时,使用ziplist编码格式,节约内存。[/size][/align][/td][td=35%][align=left][size=2]1~10000[/size][/align][/td][td=8%][align=left][size=2]64[/size][/align][/td][/tr] [tr][td=11%][align=left][size=2]set-max-intset-entries[/size][/align][/td][td=17%][align=left][size=2]Redis[/size][/align][/td][td][align=left][size=2]当一个集合仅包含字符串且整形元素数量少于参数值时,使用intset编码格式,节约内存。[/size][/align][/td][td=35%][align=left][size=2]1~10000[/size][/align][/td][td=8%][align=left][size=2]512[/size][/align][/td][/tr] [tr][td=11%][align=left][size=2]zset-max-ziplist-entries[/size][/align][/td][td=17%][align=left][size=2]Redis[/size][/align][/td][td][align=left][size=2]当有序集合中记录数少于参数值,使用ziplist编码格式,节约内存。[/size][/align][/td][td=35%][align=left][size=2]1~10000[/size][/align][/td][td=8%][align=left][size=2]128[/size][/align][/td][/tr] [tr][td=11%][align=left][size=2]zset-max-ziplist-value[/size][/align][/td][td=17%][align=left][size=2]Redis[/size][/align][/td][td][align=left][size=2]当有序集合中各字段长度的最大值小于参数值时,使用ziplist编码格式,节约内存。[/size][/align][/td][td=35%][align=left][size=2]1~10000[/size][/align][/td][td=8%][align=left][size=2]64[/size][/align][/td][/tr] [tr][td=11%][align=left][size=2]latency-monitor-threshold[/size][/align][/td][td=17%][align=left][size=2]Redis[/size][/align][/td][td][align=left][size=2]延时监控的采样时间阈值(最小值)。[/size][/align][align=left][size=2]当阈值设置为0时,不做监控,也不采样;当阈值设置为大于0时,将监控并记录执行耗时大于阈值的操作。[/size][/align][align=left][size=2]用户可以通过LATENCY等命令获取统计数据和配置、执行采样监控。详情参考[url=https://redis.io/topics/latency-monitor]Redis官网[/url][/size][/align][/td][td=35%][align=left][size=2]0~86400000,单位:毫秒。[/size][/align][/td][td=8%][align=left][size=2]0[/size][/align][/td][/tr] [tr][td=11%][align=left][size=2]maxclients[/size][/align][/td][td=17%][align=left][size=2]Redis、Memcached[/size][/align][/td][td][align=left][size=2]实例支持的最大客户端同时连接数量。[/size][/align][align=left][size=2]当连接数过多时,DCS实例对客户端请求的响应可能有所延迟。[/size][/align][align=left][size=2]用户可以根据实际需要,通过调整实例的连接数上限,确保DCS实例做快速响应或者支持更多的并发。[/size][/align][/td][td=35%][align=left][size=2]实例规格为64G时,可修改范围:1-12000。[/size][/align][align=left][size=2]其他实例规格,可修改范围:1-10000。[/size][/align][size=2]说明:[/size][list] [*][size=2]配置该参数时,不允许配置成比当前已建立的并发连接数小的值。[/size] [*][size=2]配置该参数后,禁止用户建立超过已配置的最大连接,否则可能会造成实例内部异常。[/size] [/list][/td][td=8%][align=left][size=2]5000[/size][/align][/td][/tr] [tr][td=11%][align=left][size=2]reserved-memory[/size][/align][/td][td=17%][align=left][size=2]Redis[/size][/align][/td][td][align=left][size=2]预留内存,主备实例才有此配置。[/size][/align][align=left][size=2]预留内存将被分配给实例所在虚拟机,保证DCS实例后台进程在做持久化和主从同步等任务时拥有足够的内存。[/size][/align][align=left][size=2]预留内存大小可以调高或者调低,但不能超过实例当前剩余的可用内存,以及最大可用内存的50%。其中实例最大可用内存可参考表2。[/size][/align][/td][td=35%][align=left][size=2]实例最大可用内存数的0-50%,同时不能超过实例当前剩余的可用内存,具体以界面提示为准,单位:MB。[/size][/align][/td][td=8%][align=left][size=2]0[/size][/align][/td][/tr] [tr][td=11%][align=left][size=2]notify-keyspace-events[/size][/align][/td][td=17%][align=left][size=2]Redis[/size][/align][/td][td][align=left][size=2]键空间通知,配置该参数后客户端可以通过Redis的订阅与发布功能,来接收那些以某种方式改动了Redis数据集的事件。[/size][/align][/td][td=35%][align=left][size=2]配置为空字符串""时,不支持该功能。[/size][/align][align=left][size=2]可配置为以下字符的任意组合,指定了服务器该发送哪些类型的通知:[/size][/align][size=2]说明:[/size][list] [*][size=2]有效值为[K|E|KE][A|g|l|s|h|z|x|e|$],即输入的参数中至少要有一个K或者E。[/size] [*][size=2]A为“g$lshzxe”所有参数的集合别名。A与“g$lshzxe”中任意一个不能同时出现。[/size] [*][size=2]例如,如果只想订阅键空间中和列表相关的通知,那么参数就应该设为Kl。若将参数设为字符串"AKE"表示发送所有类型的通知。[/size] [/list][align=left][size=2]K:键空间通知,所有通知以__keyspace@__为前缀。[/size][/align][align=left][size=2]E:键事件通知,所有通知以__keyevent@__为前缀。[/size][/align][align=left][size=2]g:DEL、EXPIRE、RENAME等类型无关的通用命令的通知。[/size][/align][align=left][size=2]$:字符串命令的通知。[/size][/align][align=left][size=2]l:列表命令的通知。[/size][/align][align=left][size=2]s:集合命令的通知。[/size][/align][align=left][size=2]h:哈希命令的通知。[/size][/align][align=left][size=2]z:有序集合命令的通知。[/size][/align][align=left][size=2]x:过期事件:每当有过期键被删除时发送。[/size][/align][align=left][size=2]e:驱逐(evict)事件:每当有键因为maxmemory政策而被删除时发送。[/size][/align][/td][td=8%][align=left][size=2]""[/size][/align][/td][/tr] [/table][align=center][size=2]表1 缓存实例配置参数说明[/size][/align] [img]http://support.huaweicloud.com/usermanual-dcs/public_sys-resources/icon-note.gif[/img] 说明:表1中的内存优化相关参数可以[url=https://redis.io/topics/memory-optimization]参考Redis官网[/url]说明。[align=left]latency-monitor-threshold参数一般在定位问题时使用。采集完latency信息,定位问题后,建议重新将latency-monitor-threshold设置为0,以免引起不必要的延迟。[/align][list=1] [*]单击“保存”。 [*]在弹出的修改确认对话框中,单击“OK”,确认修改参数。 [/list]
  • 分布式缓存服务与华为云其他服务的关系
    [i=s] 本帖最后由 云彩飞扬 于 2018-1-31 14:50 编辑 [/i] [align=left][b] 虚拟私有云[/b][/align][align=left] 分布式缓存服务运行于虚拟私有云,需要使用虚拟私有云创建的IP和带宽。通过虚拟私有云安全组的功能可以增强访问分布式缓存服务的安全性。[/align][b] 弹性云服务器[/b] 成功申请分布式缓存服务后,您需要通过弹性云服务器创建的弹性云主机连接使用分布式缓存实例。 [b] 云监控服务[/b] 云监控服务(CloudEye Service)是公有云提供的安全、可扩展的统一监控方案,通过云监控服务集中监控DCS的各种指标,基于云监控服务实现告警和事件通知。 [align=center]云监控服务对分布式缓存服务的监控指标项见表1和表2[/align][font=roboto, "] [table=98%] [tr][td=21%][align=left][size=2]指标名称[/size][/align][/td][td=37%][align=left][size=2]含义[/size][/align][/td][td=17%][align=left][size=2]取值范围[/size][/align][/td][td=25%][align=left][size=2]测量对象[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]CPU利用率[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计测量对象的CPU利用率,以百分比为单位。[/size][/align][/td][td=17%][align=left][size=2]0-100%[/size][/align][/td][td=25%][align=left][size=2]弹性云服务器[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]内存利用率[/size][/align][/td][td=37%][align=left][size=2]改指标用于统计测量对象的内存利用率,以百分比为单位。[/size][/align][/td][td=17%][align=left][size=2]0-100%[/size][/align][/td][td=25%][align=left][size=2]弹性云服务器[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]网络输入吞吐量[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计网口平均每秒的输入流量,以字节/秒为单位。[/size][/align][/td][td=17%][align=left][size=2]>= 0字节/秒[/size][/align][/td][td=25%][align=left][size=2]弹性云服务器[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]网络输出吞吐量[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计网口平均每秒的输出流量,以字节/秒为单位。[/size][/align][/td][td=17%][align=left][size=2]>= 0字节/秒[/size][/align][/td][td=25%][align=left][size=2]弹性云服务器[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]活跃的客户端数量[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计已连接的客户端数量,不包括来自从节点的连接,以个为单位。[/size][/align][align=left][size=2]包括DCS后台管理服务监控实例使用的客户端连接。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]客户端最长输出列表[/size][/align][/td][td=37%][align=left][size=2]指标用于统计客户端所有现存连接的最长输出列表,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]客户端最大输入缓冲[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计客户端所有现存连接的最大输入数据长度,以字节为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0字节[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]阻塞的客户端数量[/size][/align][/td][td=37%][align=left][size=2]该指标用于被阻塞操作挂起的客户端的数量。阻塞操作如BLPOP,BRPOP,BRPOPLPUSH,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]已用内存[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis已使用的内存字节数,以字节单位。[/size][/align][/td][td=17%][align=left][size=2]>=0字节[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]已用内存RSS[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis已使用的RSS内存。即实际驻留“在内存中”的内存数。包含和堆,但不包括换出的内存,以字节为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0字节[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]已用内存峰值[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis服务器启动以来使用内存的峰值,以字节为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0字节[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]Lua已用内存[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Lua引擎已使用的内存字节,以字节为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0字节[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]内存碎片率[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计当前的内存碎片率。其数值上等于used_memory_rss / used_memory。[/size][/align][/td][td=17%][align=left][size=2]>=0[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]总共收到的连接数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis服务器启动以来总共收到的连接数,以个为单位。[/size][/align][align=left][size=2]包括DCS后台服务管理的监控连接数。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]总共处理的命令数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis服务器启动以来总共处理的命令数。[/size][/align][align=left][size=2]包括DCS后台服务管理监控命令数。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]每秒并发操作数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计每秒处理的命令数,以操作/秒为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0操作/秒[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]网络总共收到字节数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis服务器启动以来总共收到的字节数,以字节为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0字节[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]网络总共发送字节数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis服务器启动以来总共发送的字节数,以字节为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0字节[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]网络瞬时输入流量[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计瞬时的输入流量,以千比特/秒为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0千比特/秒[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]网络瞬时输出流量[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计瞬时的输出流量,以千比特/秒为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0千比特/秒[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]已拒绝的连接数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis服务器启动以来总共因为超过maxclients而拒绝的连接数量,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]全量同步次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis服务器启动以来总共完成的全量同步次数,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]增量同步成功次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis服务器启动以来总共成功的增量同步次数,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]增量同步出错次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis服务器启动以来总共出错的增量同步次数,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]已过期的键数量[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis服务器启动以来总共过期的键数量,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]已挤出的键数量[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis服务器启动以来总共因为内存不足被挤出的键数量,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]Keyspace命中次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis服务器启动以来在主字典中总共的查找命中次数,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]Keyspace错过次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Redis服务器启动以来在主字典中总共的查找不命中次数,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]Pubsub通道个数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Pub/Sub通道个数,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]Pubsub模式个数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计Pub/Sub模式个数,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]AOF文件当前大小[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计AOF文件当前大小,以字节为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]最近Fork耗时[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计最近Fork耗时,以毫秒为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0毫秒[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [/table][size=2][color=#000][align=center][b]表1 [font=roboto, "]分布式缓存服务 Redis类型的缓存实例支持的监控指标[/font][/b][/align][/color][/size] [table=98%] [tr][td=21%][align=left][size=2]指标名称[/size][/align][/td][td=37%][align=left][size=2]含义[/size][/align][/td][td=17%][align=left][size=2]取值范围[/size][/align][/td][td=25%][align=left][size=2]测量对象[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]CPU利用率[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计测量对象的CPU利用率,以百分比为单位。[/size][/align][/td][td=17%][align=left][size=2]0-100%[/size][/align][/td][td=25%][align=left][size=2]弹性云服务器[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]内存利用率[/size][/align][/td][td=37%][align=left][size=2]改指标用于统计测量对象的内存利用率,以百分比为单位。[/size][/align][/td][td=17%][align=left][size=2]0-100%[/size][/align][/td][td=25%][align=left][size=2]弹性云服务器[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]网络输入吞吐量[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计网口平均每秒的输入流量,以字节/秒为单位。[/size][/align][/td][td=17%][align=left][size=2]>= 0字节/秒[/size][/align][/td][td=25%][align=left][size=2]弹性云服务器[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]网络输出吞吐量[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计网口平均每秒的输出流量,以字节/秒为单位。[/size][/align][/td][td=17%][align=left][size=2]>= 0字节/秒[/size][/align][/td][td=25%][align=left][size=2]弹性云服务器[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]活跃的客户端数量[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计已连接的客户端数量,不包括来自从节点的连接,以个为单位。[/size][/align][align=left][size=2]包括DCS后台管理服务监控实例使用的客户端连接。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]已用内存[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计已使用的内存字节数,以字节为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0字节[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]已用内存RSS[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计已使用的RSS内存。即实际驻留“在内存中”的内存数。包含和堆,但不包括换出的内存,以字节为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0字节[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]已用内存峰值[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计服务器启动以来使用内存的峰值,以字节为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0字节[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]内存碎片率[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计当前的内存碎片率。其数值上等于used_memory_rss / used_memory。[/size][/align][/td][td=17%][align=left][size=2]>=0[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]收到的连接数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计收到的连接数,以个为单位。[/size][/align][align=left][size=2]包括DCS后台服务管理的监控连接数。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]处理的命令数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计处理的命令数。[/size][/align][align=left][size=2]包括DCS后台服务管理监控命令数。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]每秒并发操作数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计每秒处理的命令数,以操作/秒为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0操作/秒[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]网络收到的字节数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计收到的字节数,以字节为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0字节[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]网络发送字节数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计发送的字节数,以字节为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0字节[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]网络瞬时输入流量[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计瞬时的输入流量,以千比特/秒为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0千比特/秒[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]网络瞬时输出流量[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计瞬时的输出流量,以千比特/秒为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0千比特/秒[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]已拒绝的连接数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计因为超过maxclients而拒绝的连接数量,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]全量同步次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计主从服务器间数据全量同步次数,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]增量同步成功次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计主从服务器间数据增量同步成功次数,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]增量同步出错次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计主从服务器间数据增量同步失败次数,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]已过期的键数量[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计过期的键数量,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]已驱逐的键数量[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计因为内存不足被删除的键数量,以个为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]AOF文件当前大小[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计数据持久化文件当前大小,以字节为单位。[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]数据查询请求次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计服务收到的数据查询请求次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]数据存储请求次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计服务收到的数据存储请求次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]数据清空请求次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计服务收到的数据清空请求次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]数据有效期修改请求次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计服务收到的数据有效期修改请求次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]数据查询命中次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计数据查询成功次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]数据查询未命中次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计数据因键不存在而失败的查询次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]数据删除命中次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计数据删除成功次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]数据删除未命中次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计因键不存在而失败的数据删除次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]算数加命中次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计算数加操作成功次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]算数加未命中次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计因键不存在而失败的算数加操作次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]算数减命中次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计算数减操作成功次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]算数减未命中次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计因键不存在而失败的算数减操作次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]CAS命中次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计CAS操作成功次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]CAS未命中次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计因键不存在而失败的CAS操作次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]CAS数值不匹配次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计因CAS值不匹配而失败的CAS次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]数据有效期修改命中次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计数据有效期修改成功次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]数据有效期修改未命中次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计因键不存在而失败的数据有效期修改次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]认证执行次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计认证请求次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]认证失败次数[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计认证失败次数[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [tr][td=21%][align=left][size=2]存储的数据条目[/size][/align][/td][td=37%][align=left][size=2]该指标用于统计存储的数据条目[/size][/align][/td][td=17%][align=left][size=2]>=0个[/size][/align][/td][td=25%][align=left][size=2]分布式缓存服务[/size][/align][/td][/tr] [/table][b][align=center][size=2][color=#000000][b]表2 [/b][font=roboto, "]分布式缓存服务Memcached类型的缓存实例支持的监控指标[/font][/color][/size][/align][/b][/font][font=roboto][color=#001000][size=14px] [/size][/color][/font][b] 云审计服务[/b][align=left] 云审计服务(Cloud Trace Service,简称CTS),为您提供云服务资源的操作记录,记录内容包括您从公有云管理控制台或者开放API发起的的云服务资源操作请求以及每次请求的结果,供您查询、审计和回溯使用。 当前CTS记录DCS的操作有: [list] [*]申请缓存实例。 [*]配置运行参数。 [*]启停缓删除缓存实例。 [*]存实例:开启、关闭、重启。 [*]修改缓存实例密码。 [*]修改缓存实例信息。 [/list][/align][b] 统一身份认证服务[/b] 通过统一身份认证服务,实现对分布式缓存服务的访问控制。
  • 分布式缓存服务兼容哪些Redis命令?
    [i=s] 本帖最后由 云彩飞扬 于 2018-1-31 11:48 编辑 [/i] [align=left][color=#666666][font=微软雅黑][size=3]分布式缓存服务Redis引擎支持绝大部分Redis命令,任何兼容Redis协议的客户端都可以访问分布式缓存服务。[/size][/font][/color][/align][align=left][font=微软雅黑][size=3]当用户执行比较耗时的命令(如flushall)时,可能会导致缓存实例在命令执行期间对外不响应用户的其它命令,造成状态监控失效,此时Console上缓存实例的状态会变成异常,命令执行结束后,实例状态会恢复正常。[/size][/font][/align][font=微软雅黑][size=3] [b]单机/主备版[/b][/size][/font][align=left][color=#666666][font=微软雅黑][size=3]DCS单机或者主备实例的Redis接口与开源Redis在数据访问方面完全兼容。但因易用性和安全性的原因,部分管理操作不能从Redis客户端发起,如下表所示。[/size][/font][/color][/align][font=微软雅黑][color=#6f7479][size=3][table=98%] [tr][td=16%][align=left][size=2][color=rgb(102, 102, 102)]禁用命令类型[/color][/size][/align][/td][td=84%][align=left][size=2][color=rgb(102, 102, 102)]禁用命令清单[/color][/size][/align][/td][/tr] [tr][td=16%][align=left][size=2][color=rgb(102, 102, 102)]Keys(键)[/color][/size][/align][/td][td=84%][align=left][size=2][color=rgb(102, 102, 102)]MIGRATE[/color][/size][/align][/td][/tr] [tr][td=16%][align=left][size=2][color=rgb(102, 102, 102)]Script(脚本)[/color][/size][/align][/td][td=84%][align=left][size=2][color=rgb(102, 102, 102)]EVAL,EVALSHA,SCRIPT EXISTS,SCRIPT FLUSH,SCRIPT KILL,SCRIPT LOAD[/color][/size][/align][/td][/tr] [tr][td=16%][align=left][size=2][color=rgb(102, 102, 102)]Server(服务器)[/color][/size][/align][/td][td=84%][align=left][size=2][color=rgb(102, 102, 102)]SLOWLOG,SLAVEOF,SHUTDOWN,SAVE,ROLE,[/color][/size][/align][align=left][size=2][color=rgb(102, 102, 102)]MONITOR,LASTSAVE,DEBUG SEGFAULT,[/color][/size][/align][align=left][size=2][color=rgb(102, 102, 102)]DEBUG OBJECT,CONFIG SET,CONFIG REWRITE,CONFIG RESETSTAT ,[/color][/size][/align][align=left][size=2][color=rgb(102, 102, 102)]CONFIG GET,COMMAND INFO,COMMAND GETKEYS ,[/color][/size][/align][align=left][size=2][color=rgb(102, 102, 102)]COMMAND COUNT,COMMAND,CLIENT SETNAME,CLIENT LIST,[/color][/size][/align][align=left][size=2][color=rgb(102, 102, 102)]CLIENT KILL,CLIENT GETNAME,BGSAVE,BGREWRITEAOF[/color][/size][/align][/td][/tr] [/table][/size][/color][size=2]注意:[/size][/font][font=微软雅黑][size=2]使用Redis客户端Redis-cli执行上述禁用命令时,会得到(error)ERR unknown command ‘xxx’的提示,但monitor命令在执行后会处于等待状态,此为Redis客户端Redis-cli的行为,其他Redis客户端也会出现同样的现象,DCS提供的服务在技术实现上无法约束客户端的行为。[/size][/font][font=微软雅黑][size=2] [/size][/font][font=微软雅黑][size=3] [b]集群版[/b][/size][/font][align=left][color=#666666][font=微软雅黑][size=3]集群版除了不支持单机/主备版禁止的命令外,也不支持如下所示。[/size][/font][/color][/align][font=微软雅黑][color=#6f7479][size=3][table=98%] [tr][td=20%][align=left][size=2][color=rgb(102, 102, 102)]禁用命令类型[/color][/size][/align][/td][td=80%][align=left][size=2][color=rgb(102, 102, 102)]禁用命令清单[/color][/size][/align][/td][/tr] [tr][td=20%][align=left][size=2][color=rgb(102, 102, 102)]String(字符串)[/color][/size][/align][/td][td=80%][align=left][size=2][color=rgb(102, 102, 102)]MSETNX[/color][/size][/align][/td][/tr] [tr][td=20%][align=left][size=2][color=rgb(102, 102, 102)]List(列表)[/color][/size][/align][/td][td=80%][align=left][size=2][color=rgb(102, 102, 102)]RPOPLPUSH[/color][/size][/align][/td][/tr] [tr][td=20%][align=left][size=2][color=rgb(102, 102, 102)]Set(集合)[/color][/size][/align][/td][td=80%][align=left][size=2][color=rgb(102, 102, 102)]SINTERSTORE,SINTER,SUNIONSTORE,SUNION ,[/color][/size][/align][align=left][size=2][color=rgb(102, 102, 102)]SDIFFSTORE,SDIFF,SMOVE[/color][/size][/align][/td][/tr] [tr][td=20%][align=left][size=2][color=rgb(102, 102, 102)]SortedSet(有序集合)[/color][/size][/align][/td][td=80%][align=left][size=2][color=rgb(102, 102, 102)]ZUNIONSTORE,ZINTERSTORE[/color][/size][/align][/td][/tr] [tr][td=20%][align=left][size=2][color=rgb(102, 102, 102)]HyperLogLog[/color][/size][/align][/td][td=80%][align=left][size=2][color=rgb(102, 102, 102)]PFMERGE,PFCOUNT[/color][/size][/align][/td][/tr] [tr][td=20%][align=left][size=2][color=rgb(102, 102, 102)]Transaction[/color][/size][/align][/td][td=80%][align=left][size=2][color=rgb(102, 102, 102)]DISCARD,EXEC,MULTI,UNWATCH,WATCH[/color][/size][/align][/td][/tr] [tr][td=20%][align=left][size=2][color=rgb(102, 102, 102)]Connection[/color][/size][/align][/td][td=80%][align=left][size=2][color=rgb(102, 102, 102)]SELECT[/color][/size][/align][/td][/tr] [tr][td=20%][align=left][size=2][color=rgb(102, 102, 102)]Keys[/color][/size][/align][/td][td=80%][align=left][size=2][color=rgb(102, 102, 102)]MOVE,SCAN[/color][/size][/align][/td][/tr] [tr][td=20%][align=left][size=2][color=rgb(102, 102, 102)]List[/color][/size][/align][/td][td=80%][align=left][size=2][color=rgb(102, 102, 102)]BLPOP,BRPOP,BRPOPLPUSH[/color][/size][/align][/td][/tr] [tr][td=20%][align=left][size=2][color=rgb(102, 102, 102)]Cluster[/color][/size][/align][/td][td=80%][align=left][size=2][color=rgb(102, 102, 102)]CLUSTER[/color][/size][/align][/td][/tr] [tr][td=20%][align=left][size=2][color=rgb(102, 102, 102)]codis相关[/color][/size][/align][/td][td=80%][align=left][size=2][color=rgb(102, 102, 102)]PSUBSCRIBE(),PUBLISH,PUNSUBSCRIBE,SUBSCRIBE ,[/color][/size][/align][align=left][size=2][color=rgb(102, 102, 102)]RANDOMKEY,UNSUBSCRIBE,DBSIZE,FLUSHALL ,[/color][/size][/align][align=left][size=2][color=rgb(102, 102, 102)]FLUSHDB,TIME,SLOTSINFO,SLOTSDEL ,[/color][/size][/align][align=left][size=2][color=rgb(102, 102, 102)]SLOTSMGRTSLOT,SLOTSMGRTONE,SLOTSCHECK ,[/color][/size][/align][align=left][size=2][color=rgb(102, 102, 102)]SLOTSMGRTTAGSLOT,SLOTSMGRTTAGONE[/color][/size][/align][/td][/tr] [/table][/size][/color][size=2]注意:[/size][/font][font=微软雅黑][size=2]使用redis客户端redis-cli执行上述禁用命令时,会得到(error)ERR unknown command ‘xxx’的提示,但PSUBSCRIBE、SUBSCRIBE、MONITOR等命令在执行后会处于等待状态,此为redis客户端redis-cli的行为,其他redis客户端也会出现同样的现象,DCS提供的服务在技术实现上无法约束客户端的行[/size][/font][font=微软雅黑][size=3]为。[/size][/font][font=微软雅黑][size=3] [/size][/font]
  • [技术干货] redis和mysql区别
    [align=left][color=rgb(51, 51, 51)][font="]Mysql将数据存储在磁盘,为中小型[color=rgb(0, 0, 0)][font="]的[/font][/color][color=rgb(63, 136, 191)][font="][url=https://www.baidu.com/s?wd=%E7%BD%91%E7%BB%9C%E6%95%B0%E6%8D%AE%E5%BA%93&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y1uW04uWmYrjNBnyn1mycY0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHfYP1mdPH03PWDzPjRdPjR3n0][color=rgb(0, 0, 0)]网络数据库[/color][/url][/font][/color],支持集群。[/font][/color][/align][align=left][color=rgb(51, 51, 51)][font="]Redis存储在内存,为支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。redis既可以用来做持久存储,也可以做缓存,大多只用来做 数据读取缓存、队列、锁、等等的使用。[/font][/color][/align][align=left][color=rgb(51, 51, 51)][font="]目前大多数公司的存储都是mysql + redis,mysql作为主存储,redis作为辅助存储被用作缓存,加快访问读取的速度,提高性能。[/font][/color][/align]
  • Redis安全漏洞影响及加固
    [url=http://forum.hwclouds.com/forum.php?mod=viewthread&tid=391&extra=page%3D1][size=6][font=微软雅黑, Microsoft Yahei, 华文细黑, STXihei, STHeiti, Arial, sans-serif][color=rgba(0, 0, 0, 0)][b][运维安全][/b][/color][/font][color=#333333][font=微软雅黑,] [/font][/color][color=rgb(51, 51, 51)][font=微软雅黑,]Redis安全漏洞影响及加固[/font][/color][/size][/url]
总条数:310 到第
上滑加载中