openstack trove redis配置项

trove在mitaka版本更新了一个功能,configuration

具体如下:

trove help |grep configuration
configuration-attach Attaches a configuration group to an
configuration-create Creates a configuration group.
configuration-default Shows the default configuration of an
configuration-delete Deletes a configuration group.
configuration-detach Detaches a configuration group from an
configuration-instances Lists all instances associated with a
configuration group.
configuration-list Lists all configuration groups.
configuration-parameter-list Lists available parameters for a
configuration group.
configuration-parameter-show Shows details of a configuration parameter.
configuration-patch Patches a configuration group.
configuration-show Shows details of a configuration group.
configuration-update Updates a configuration group.
configuration, or replica source.

这个功能使得我们可以在实例或集群(部分集群支持)运行的时候,动态的修改数据库(datastore)的配置参数,同时可以批量的修改实例或集群(部分集群支持)。

以下是trove中收集到的有关redis的参数,从网上搜集了关于这些参数的解释,这可以让我们更好的使用configuration的功能。

tcp-backlog
客户端连接队列值,这个值是socket里面listen函数的参数。如果服务器caps很高,需要把这个参数改大些。 timeout
客户端空闲多少s后踢掉,0禁止 tcp-keepalive
检测挂掉的连接,单位s,0禁止 loglevel
日志的等级,debug,verbose,notice,warning databases
redis中有多少个数据库,默认即可 save
将redis内存数据序列化到磁盘的时间和频率
900s有1个key改变就会序列化,其他的读者可以自己看下 stop-writes-on-bgsave-error
序列化的时候是否停止写操作 rdbcompression
序列化的数据是否压缩 rdbchecksum
序列化的数据是否校验其完整性 slave-serve-stale-data
当slave丢失与master的连接时,或者slave仍然在于master进行数据同步时(还没有与master保 持一致),#slave可以有两种方式来响应客户端请求:
1) 如果 slave-serve-stale-data 设置成 'yes' (the default) slave会仍然响应客户端请求,此时可能会有问题。
2) 如果 slave-serve-stale data设置成 'no' slave会返回"SYNC with master in progress"这样的错误信息。 但 INFO 和SLAVEOF命令除外。 slave-read-only yes
slave是否为"只读" repl-diskless-sync
无硬盘复制功能可以通过来配置
repl-diskless-sync-delay用来配置当收到第一个请求时,等待多个slave一起来请求之间的间隔时间。
repl-ping-slave-period/repl-timeout
slave会每隔repl-ping-slave-period(默认10秒)ping一次master,如果超过repl-timeout(默认 60秒)都没有收到响应,就会认为Master挂了。如果Master明明没挂但被阻塞住了也会报这个错。可以适当调大repl-timeout repl-disable-tcp-nodelay
在slave和master同步后(发送psync/sync),后续的同步是否设置成TCP_NODELAY
假如设置成yes,则redis会合并小的TCP包从而节省带宽,但会增加同步延迟(40ms),造成master与slave数据不一致
假如设置成no,则redis master会立即发送同步数据,没有延迟 repl-backlog-size
设置备份的工作储备大小。工作储备是一个缓冲区,当从站断开一段时间的情况时,它替从站接收存储数据,因此当从站重连时,通常不需要完全备份,只需要一个部分同步就可以,即把从站断开时错过的一部分数据接收。
工作储备越大,从站可以断开并稍后执行部分同步的断开时间就越长。
只要有一个从站连接,就会立刻分配一个工作储备。 repl-backlog-ttl
主站有一段时间没有与从站连接,对应的工作储备就会自动释放。接下来这个选项用于配置释放前等待的秒数,秒数从断开的那一刻开始计算。
值为0表示不释放。 slave-priority
适用Sentinel模块(unstable,M-S集群管理和监控),需要额外的配置文件支持。slave的权重值,默认100.当master失效后,Sentinel将会从slave列表中找到权重值最低(>0)的slave,并提升为master。如果权重值为0,表示此slave为"观察者",不参与master选举 min-slaves-to-write
设置redis的min-slaves-to-write参数为1,将保证了至少有一个slave工作良好情况下才允许写入 min-slaves-max-lag
连接最大延迟 requirepass
连接密码 maxclients 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息 maxmemory
redis的maxmemory参数用于控制redis可使用的最大内存容量。如果超过maxmemory的值,就会动用淘汰策略来处理expaire字典中的键。 maxmemory-policy
内存不足"时,数据清除策略,默认为"volatile-lru"。 maxmemory-samples
Redis默认的灰选择3个样本进行检测,你可以通过maxmemory-samples进行设置 Appendonly
是一种能够提供非常好的持久化的模式,例如使用默认的Fsync方案,Redis能在发生服务器电源故障或操作系统仍然正常运行但Redis进程莫名挂掉的情况下,只丢失1秒的数据。 appendfsync
含义:Redis将OS数据缓冲区中数据刷新到磁盘的策略
# appendfsync always 只要有新添加的数据就fsync
appendfsync everysec 支持延迟fsync
# appendfsync no 不需要fsync no-appendfsync-on-rewrite
如果该参数设置为no,是最安全的方式,不会丢失数据,但是要忍受阻塞的问题。如果设置为yes呢?这就相当于将appendfsync设置为no,这说明并没有执行磁盘操作,只是写入了缓冲区,因此这样并不会造成阻塞(因为没有竞争磁盘),但是如果这个时候redis挂掉,就会丢失数据。丢失多少数据呢?在Linux的操作系统的默认设置下,最多会丢失30s的数据。 auto-aof-rewrite-percentage
auto-aof-rewrite-percentage 100 (当前写入日志文件的大小超过上一次rewrite之后的文件大小的百分之100时就是2倍时触发Rewrite) auto-aof-rewrite-min-size
指定触发rewrite的aof文件大小。若aof文件小于该值,即使当前文件的增量比例达到auto-aof-rewrite-percentage的配置值,也不会触发自动rewrite。即这两个配置项同时满足时,才会触发rewrite。 aof-load-truncated
指redis在恢复时,会忽略最后一条可能存在问题的指令。默认值yes。即在aof写入时,可能存在指令写错的问题(突然断电,写了一半),这种情况下,yes会log并继续,而no会直接恢复失败. lua-time-limit
Redis提供了lua-time-limit参数限制脚本的最长运行时间,默认为5秒钟。当脚本运行时间超过这一限制后,Redis将开始接受其他命令但不会执行(以确保脚本的原子性,因为此时脚本并没有被终止),而是会返回“BUSY”错误 cluster-node-timeout
cluster-node-timeout(可配置,秒级)时间内没有收到对方的回复,则单方面认为对端节点宕机,将该节点标为PFAIL状态。通过节点之间交换信息收集到quorum个节点都认为这个节点为PFAIL,则将该节点标记为FAIL,并且将其发送给其他所有节点,其他所有节点收到后立即认为该节点宕机。从这里可以看出,主宕机后,至少cluster-node-timeout时间内该主所负责的Slot的读写服务不可用。 cluster-slave-validity-factor
控制从节点FailOver相关的设置
设为0,从节点会一直尝试启动FailOver.
设为正数,失联大于一定时间(factor*节点TimeOut),不再进行FailOver Cluster-migration-barrier
最小从节点连接数 cluster-require-full-coverage
默认为Yes,丢失一定比例Key后(可能Node无法连接或者挂掉),集群停止接受写操作
设置为No,集群丢失Key的情况下仍提供查询服务 slowlog-log-slower-than
其中slowlog-log-slower-than表示slowlog的划定界限,只有query执行时间大于slowlog-log-slower-than的才会定义成慢查询,才会被slowlog进行记录。slowlog-log-slower-than设置的单位是微妙,默认是10000微妙,也就是10ms slowlog-max-len
slowlog-max-len表示慢查询最大的条数,当slowlog超过设定的最大值后,会将最早的slowlog删除,是个FIFO队列 latency-monitor-threshold
服务端内部的延迟监控稍微麻烦一些,因为延迟记录的默认阈值是0。尽管空间和时间耗费很小,Redis为了高性能还是默认关闭了它。所以首先我们要开启它,设置一个合理的阈值 notify-keyspace-events
notify-keyspace-events 带一个由 0 到多个字符组成的字符串参数。空字符串意思是通知被禁用。 hash-max-ziplist-entries
hash类型的数据结构在编码上可以使用ziplist和hashtable。ziplist的特点就是文件存储(以及内存存储)所需的空间较小,在内容较小时,性能和hashtable几乎一样.因此redis对hash类型默认采取ziplist。如果hash中条目的条目个数或者value长度达到阀值,将会被重构为hashtable。
这个参数指的是ziplist中允许存储的最大条目个数,,默认为512,建议为128 hash-max-ziplist-value
ziplist中允许条目value值最大字节数,默认为64,建议为1024 list-max-ziplist-entries
对于list类型,将会采取ziplist,linkedlist两种编码类型。解释同上。 list-max-ziplist-value
对于list类型,将会采取ziplist,linkedlist两种编码类型。解释同上。 set-max-intset-entries
intset中允许保存的最大条目个数,如果达到阀值,intset将会被重构为hashtable zset-max-ziplist-entries
zset-max-ziplist-value
zset为有序集合,有2中编码类型:ziplist,skiplist。因为"排序"将会消耗额外的性能,当zset中数据较多时,将会被重构为skiplist。 hll-sparse-max-bytes activerehashing
每100ms里面使用1ms时间进行rehash。 client-output-buffer-limit
client-output-buffer-limit slave 256mb 64mb 60
这里对是客服端是slave的做限制
256mb 是一个硬性限制,当output-buffer的大小大于256mb之后就会断开连接
64mb 60 是一个软限制,当output-buffer的大小大于64mb并且超过了60秒的时候就会断开连接 hz
Redis server执行后台任务的频率,默认为10,此值越大表示redis对"间歇性task"的执行次数越频繁(次数/秒)。 "间歇性task"包括"过期集合"检测、关闭"空闲超时"的连接等,此值必须大于0且小于500。此值过小就意味着更多的cpu周期消耗,后台task被轮询的次数更频繁。此值过大意味着"内存敏感"性较差。建议采用默认值。 aof-rewrite-incremental-fsync
aof rewrite过程中,是否采取增量文件同步策略,默认为“yes”。 rewrite过程中,每32M数据进行一次文件同步,这样可以减少aof大文件写入对磁盘的操作次数

更多openstack/trove的文章:http://www.cnblogs.com/S-tec-songjian/

此文章属博客园用户S-tec原创作品,受国家《著作权法》保护,未经许可,任何单位及个人不得做营利性使用;若仅做个人学习、交流等非营利性使用,应当指明作者姓名、作品名称,原文地址,并且不得侵犯作者依法享有的其他权利。

上一篇:java多线程(四)-自定义线程池


下一篇:JAVA多线程提高十四: 面试题