-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Pika ChangeLog
SongZhao edited this page Jun 8, 2017
·
25 revisions
- 修复nemo-rocksdb在open时可能过早schedule autocompaction而崩溃的问题
- 修复在出现EPOLLERR或EPOLLHUP时,造成内存泄漏的问题
- pika从2.1.4推荐需要使用gcc 4.8+版本编译,更新gcc后执行make distclean && make __REL=1编译
- 仅支持从2.1.0+版本平滑升级到2.2.3,如果从更早版本升级,请看2.1.0的注意事项
- 修复如果主从同步数据的连接意外断开,将不会继续同步的问题
- 修复ttl,persit接口在某些已删除key返回值不正确的问题
- 修复scan命令当count传0时崩溃的问题
- 如果编译环境安装tcmalloc,则默认使用tcmalloc,并额外提供tcmalloc命令来进行内存查询及管理
- 整理pikatests目录,改名为tests
该命令仅在编译pika的环境安装tcmalloc时才生效
具体用法:
- tcmalloc stats: 打印tcmalloc的stats信息
- tcmalloc list: 打印tcmalloc的FreeList详细信息
- tcmalloc rate: 打印tcmalloc的FLAGS_tcmalloc_release_rate值
- tcmalloc rate [0-10]: 设置tcmalloc的FLAGS_tcmalloc_release_rate值 【不要轻易改动】
- tcmalloc free: 强制tcmalloc尽可能多的释放自身缓存的内存,还给操作系统
- pika从2.1.4推荐需要使用gcc 4.8+版本编译,更新gcc后执行make distclean && make __REL=1编译
- 仅支持从2.1.0+版本平滑升级到2.2.2,如果从更早版本升级,请看2.1.0的注意事项
- 修复BinlogSender使用阻塞write,在slave卡死(如盘坏)的情况下,连带卡死master的问题
- 修复bit接口中正确性的问题
- 修复执行monitor造成内存泄漏的问题
- 修复在bind时可能崩溃的问题
- 修复在主从级联:A<-B<-C时,C执行slaveof no one后B主从状态没有更新的问题
- 修复当正在执行后台compaction任务时,pika不能正常退出的问题
- 新增配置项compact-cron,支持在每天指定时段内检测并在必要时进行全局compact
- 新增slaveof ip port force命令,强行全同步,适合主库db是从其他实例拷贝并加载而来,此时可以用此命令来为其挂从库
- rocksdb自身LOG按512M大小进行切分
- 慢日志记录更多信息(命令,key,value等),单条最长1K
- 精简部分日志
- 重写ssdb_to_pika工具,可以更快速的将ssdb数据迁移至pika
pika推荐使用tcmalloc来进行内存管理
- pika从2.1.4推荐需要使用gcc 4.8+版本编译,更新gcc后执行make distclean && make __REL=1编译
- 仅支持从2.1.0+版本平滑升级到2.2.1,如果从更早版本升级,请看2.1.0的注意事项
- 修复在scan含有过期key的时候可能出现的死循环的问题
- 修复在range操作中可能出现的读不出来key的问题
- 修复在大量短连接情况下执行慢请求造成fd耗尽的问题
- 修复bgsave和info同时执行在极小概率下出现死锁的问题
- 支持对过期及已删除meta key的compact回收
- 提高range操作的性能
- 提高写入性能(set接口提高30%)
- select命令限制dbnum上限(16)
- 支持接入codis
- 支持Geo
- 支持Hyperloglog
- 解耦rocksdb,重新实现nemo依赖的引擎特性,支持后续快速跟进官方版本,2.2.0使用rocksdb v5.0.1
- 支持多线程compact
- pika从2.1.4推荐需要使用gcc 4.8+版本编译,更新gcc后执行make distclean && make __REL=1编译
- 仅支持从2.1.0+版本平滑升级到2.2.0,如果从更早版本升级,请看2.1.0的注意事项
- 修复strlen在记录不存在时不返回0的错误
- 新增dbsize命令
- 提高手动compact任务在任务队列中的优先级,防止被由于大量del或spop产生小compact任务推迟
- 调整glog逻辑,INFO、WARNING、ERROR、FATAL互不重叠,减小日志冗余
- 设置引擎max_manifest_file_size配置为64M,防止由于服务时间很长加之compact过于频繁而导致引擎MANIFEST文件过大
- 在tools中用对应的代码文件更换二进制文件,通过make现编译生成工具,减少仓库大小;对lib下glog的so文件采用同样策略;支持make distclean方便彻底clean掉pika及submodule项目
- pika从2.1.4推荐需要使用gcc 4.8+版本编译,更新gcc后执行make distclean && make __REL=1编译
- 仅支持从2.1.0+版本平滑升级到2.1.4,如果从更早版本升级,请看2.1.0的注意事项
- 修复nemo中spop出现的可能卡死或崩溃的错误
- 修复pika在收到错误redis协议(如结尾多一个\r\n)时崩溃的错误
- 修复由于重复close而导致的极少情况下出现问题的错误
- 修复master端在binlogsender连接失败后没有delete相应对象的错误
- 修复nemo中sunionstore、sinterstore中对于multi key需要顺序加锁的问题
- 调整底层pink结构
- 将trysync的读写超时设置为30s,避免重复发送请求导致master恢复already exist的错误
- 定时检查rsync服务是否正确关闭,修复由于某些异常问题导致rsync服务在该关闭的情况下依旧打开的错误
##注意事项
仅支持从2.1.0、2.1.1及2.1.2平滑升级到2.1.3,如果从更早版本升级,请看2.1.0的注意事项
- 新增指定网卡配置项network-interface,解决2.1.1在绑定网卡后导致客户端使用127.0.0.1无法连接pika的问题,默认为不绑定任何网卡
- 新增slaveof配置项,可以将主从配置写在配置文件中,pika启动后自动建立主从关系,默认为空
- 修改info中use_memory计算方式,改为rocksdb memtable+tablecache的大小
- 修改部分info信息,原db_size、log_size、use_memory改为以字节为单位,并新增db_size_human、log_size_human、use_memory_human为对应以M为单位的显示
仅支持从2.1.0及2.1.1平滑升级到2.1.2,如果从更早版本升级,请看2.1.0的注意事项
- 修复master在记录待全同步slave的列表时由于没有加锁而导致可能出现的问题(出现概率较低)
- 修复slave在小概率下与master断开并无法继续建立主从关系的bug(出现概率较低)
- 修复在执行ltrim key 1 -1之后,rpush返回失败的bug
- 新增指定网卡的配置项
- 新增config resetstat
- binlog_sync工具不需要指定端口
- binlog_sender工具支持对文件进行范围指定
仅支持从2.1.0平滑升级到2.1.1,如果从更早版本升级,请看2.1.0的注意事项
- monitor修复二进制的显示(转为16进制)
- zcard命令无法在从库执行的bug(检查其它接口是否存在相同问题)、select变成写入命令的bug
- 修复由于后台执行info keyspace 1 而导致pika无法正常shutdown的问题
- 修复zrange系列范围问题
- 修复scan无法对多数据结构使用match的问题
- 内部info信息继续修正,config get/set修正,目前与redis共有部分保持一致,并且新增了用来查看引擎内存占用(近似值)的db_memtable_usage和db_tablereader_usage信息,分别对应引擎的memtable大小和indexblock缓存大小,注意还有一个used_memory,该信息主要是配合公司dba同事进行redis监控的兼容,具体值是db_size对应的字节数,并无实际意义
- 新版备份功能(秒级备份),大幅度提高备份及全同步的速度
- slave在尝试同步失败后,出连接失败重试之外,其他从主返回的错误都进入down状态,不再重试;
- log信息显示优化,目前包含INFO、ERROR等级,推荐使用INFO
- 端口占用间隔由100改成1000
- 启动后如果发现open files配置太小,会尝试修改为maxclients+5000的大小并打出日志,修改失败则报错退出
- 自动获取default网卡ip,不写死eth0;
- 新增info keyspace off命令来支持手动停止后台keyspace扫描
- binlog文件(write2file)增加时间戳信息,提供新旧binlog的转换工具
- binlog文件(write2file)的配套解析、导入、导出、紧急修复工具
- 新增max-cache-files配置项,用来配置引擎缓存的tablecache的数量,默认是5000,可以通过调小来是pika内存占用变小,不过会影响性能__(慎用)__
由于pika 2.1叫之前版本在配置文件和binlog格式上存在着不兼容,如果继续使用老的版本会导致pika 2.1无法正常使用,在使用前需要做如下准备:
使用2.1的配置文件去覆盖老版本的配置文件
- 编译tools/binlog_tools
- 使用编译生成的
binlog_parse
来完成新旧Binlog的转换,具体用法:./binlog_parser -c old2new -i old_binlog_path/write2file0,write2file1,write2file3... -o new_binlog_path , -i 旧路径后跟需要转换的write2file文件名,一般情况下仅需要转换后几个最大的write2file文件即可,转换成功后,将
new_binlog_path下的新版binlog和manifest文件拷回覆盖
old_binlog_path`目录即可正常启动
pika 2.1 binlog带有时间戳,因此可以根据指定时间戳根据binlog恢复对应时间段内的数据到某个pika实例。
-
工具目录:pika/tools/binlog_tools/binlog_sender
-
使用参数:
- -h 显示帮助
- -a 口令
- -t 日志类型,old 或new
- -i pika实例的ip
- -p pika实例的port
- -n 输入的binlog的路径
- -f 要转换的binlog号
- -s 规定的起始时间点, 默认: '2001-00-00 00:59:01'
- -e 规定的结束时间点, 默认: '2100-01-30 24:00:01'
-
样例: ./binlog_sender -n /data2/wangwenduo/newlog/ -t new -i 127.0.0.1 -p 10221 -s '2001-10-11 11:11:11' -e '2020-12-11 11:11:11' -f 526,527
-
注意:因为依次发送binlog,过程中可能会丢部分请求。因此当使用binlog_sender回放后,不要删掉对应的文件以防丢数据
- 安装使用
- 支持的语言和客户端
- 当前支持的Redis接口以及兼容情况
- 配置文件说明
- 数据目录说明
- info信息说明
- 部分管理指令说明
- 差异化命令
- Pika Sharding Tutorials
- Pika订阅
- 配合sentinel(哨兵)实现pika自动容灾
- 如何升级到Pika3.0
- 如何升级到Pika3.1或3.2
- Pika多库版命令、参数变化参考
- Pika分片版本命令
- 副本一致性使用说明
- Pika内存使用
- Pika最佳实践
- 整体架构
- 线程模型
- 全同步
- 增量同步
- 副本一致性
- 快照式备份
- 锁的应用
- nemo存储引擎数据格式
- blackwidow存储引擎数据格式
- Pika源码学习--pika的通信和线程模型
- Pika源码学习--pika的PubSub机制
- Pika源码学习--pika的命令执行框架
- Pika源码学习--pika和rocksdb的对接
- pika-NoSQL原理概述
- pika在codis中的探索
- Pika 笔记
- pika 主从同步原理