Releases: apache/incubator-pegasus
Releases · apache/incubator-pegasus
v1.9.1
v1.9.0
兼容性
- 重要:集群升级1.9版本后,有可能无法回退到1.9之前的老版本;
- 由于修复了json的格式问题,该版本json序列化/反序列化与之前版本有区别,主要影响是zookeeper上记录冷备份信息的
backup_policy
节点下的数据无法兼容; - 为了解决这个问题,从1.9版本开始,将zookeeper上的冷备份信息存储在新节点
back
下面,原节点backup_policy
弃用; - 如果集群启用了冷备份功能(通过shell的ls_backup_policy命令可查看有没有启动冷备份),需遵循特定的步骤进行升级,具体参见下面的“升级流程”;
- 如果集群没有启用冷备份功能,则不存在兼容性问题,可按照常规方式升级;
- 对客户端的兼容性没有影响;
升级流程
- disable掉所有的backup policy,并记录下disable了哪些policy;
- 检查所有的policy,保证没有正在进行中的备份,如果有则等待其完成,并记录下所有的policy信息;
- 使用shell的cluster_info命令,获取集群的zookeeper_hosts和zookeeper_cluster_name(zookeeper_root的后缀);
- 使用json fix工具迁移zookeeper的backup_policy节点至back节点:
./old2new.sh <zookeeper_hosts> <zookeeper_cluster_name>
; - 修改配置文件后,使用pegasus_rolling_update.sh工具升级一台机器:
./script/pegasus_rolling_update.sh <cluster> <meta-list> one 0
; - 升级一台后观察几分钟,没有问题再升级所有机器:
./script/pegasus_rolling_update.sh <cluster> <meta-list> all 1
; - 观察升级后集群是否正常,使用shell命令查看各统计指标是否正常;
- 检查所有的back policy,与升级前信息是否一致;
- 重新enable之前disable掉的policy;
功能改进
- 改进manual compact:可以通过app envs设置
rocksdb.manual_compact.disabled=true
关闭compact功能,取消已发起但未开始执行的compact;在compact完成后立即统计存储用量; - 改进collector:如果不指定email地址,则不发送可用度统计和报警邮件;增加可用度统计结果写回Pegasus表的重试次数,降低写入失败的概率,避免丢失统计结果;
- 改进日志打印:在meta-server中执行set/del/clear app envs时打印相关日志;
Bug修复
- 修复json库:修复其不能按照标准序列化和反序列化map数据的问题;修复其不能按照标准序列化和反序列化浮点数的问题;支持bool变量从true/false反序列化;
- 修复server_stat:修复获取统计数据时依赖的perf counter不正确的问题;
- 修复collector:修复detect table不存在时进程会core的问题;
- 修复shell工具:修复并发使用shell工具时可能出现的配置文件冲突覆盖的问题;
- 修复build和test脚本:修复
exit -1
非法参数的问题;修复单元测试脚本不能发现测试失败的问题; - 修复rdsn:将RPC_GROUP_CHECK的任务优先级改为HIGH,避免group check请求处理不及时造成超时而引发config change的问题;
- 修复pegasus_server:修复了pegasus_extract_user_data()中可能使用已经被释放的string的bug;
性能优化
- 改进checkpoint_timer,使trigger checkpoint随机化,避免集中触发flush操作,提升系统稳定性;
Shell工具
- 在启动onebox时增加
--collector
选项,用于启动collector进程; - 在shell的count_data命令中增加
--run_seconds
选项,用于控制命令的运行时间以提前结束统计; - 改进shell工具,用linenoise库替换readline库,支持命令自动补全,支持历史命令记录,支持用法的hint提示;
脚本工具
- 改进pegasus_manual_compact.sh脚本,增加
--wait_only
选项,使其更易用; - 改进scripts文件夹下的各种脚本,在脚本执行时生成的临时文件名中加入PID,避免脚本在并发执行时的冲突覆盖问题;
其他
- 编译时增加
--clear_thirdparty
选项,可以清理掉已下载的thirdparty库; - 编译时增加
--compiler
选项,方便指定特定的C和C++编译器;修复clang编译器发现的一些问题; - 编译支持ccache,减少unit-test中不必要的sleep,提升编译速度;
- 改进配置模板
src/server/config.ini
,修改一些配置项的推荐值,增加collector使用的配置项; - 改进README,增加相关项目的链接;
v1.8.1
功能改进
- 支持通过config sync定期更新app envs;
- 冷备份在删除过期文件夹时,调用FDS接口选择不进入回收站,实现彻底删除,以支持GDPR;
- MetaServer的load balance支持黑名单机制,以避免往特定节点增加备份;
- 改进manual compact,通过app envs方式控制执行,支持periodic和once两种触发模式,并支持指定options;
- 在pegasus_server_impl的读写操作打印日志时增加打印远程RPC地址,以方便定位问题;
- 增加pegasus_event_listener,用来监听rocksdb的flush和compaction事件,并增加统计flush和compaction的perf-counter;
- 增加partition killer,支持随机关闭replica,提高kill测试的覆盖能力;
Bug修复
- 修复replica close时并发存取app造成非法访问core的问题;
- 修复info collector中将stat_timer的间隔时间单位用错的bug;
- 修复configuration中处理uint64类型可能溢出的bug;
性能优化
- 默认开启rocksdb的bloom filter功能,bits_per_key设置为10,读操作的延迟下降约10%;
- 默认开启rocksdb的block cache功能,使用LRUCache,capacity设置为10GB;
- 程序动态链接tcmalloc库,整体性能提升10%~20%;
- 通过随机化设置rocksdb的write_buffer_size和level0_file_num_compaction_trigger配置项,避免因为同时触发flush和compaction执行而形成CPU和IO使用高峰,提升服务稳定性;
rdsn模块的化简与重构
- 移除rpc_address相关的C接口;
- 引入rpc_holder工具类,方便编写RPC交互逻辑;
- 引入pipeline机制,方便编写更清晰和易测试的异步交互逻辑;
- 重构tls memory allocator,移除无用的memory provider;
- 移除rdsn的layer2层的RPC_L2_CLIENT_READ/WRITE,简化rpc code的注册与分派逻辑;
- 引入format库,提供ddebug_replica系列日志宏,简化日志打印;
- 引入replica_base类,提供replica的get_gpid()和replica_name()公共方法;
- 移除task和task_tracker相关的C接口,并用future_task替换原来的safe_late_task,提升代码可读性;
- 重构configuration相关的API;
- 重构pegasus_server_impl的写流程,使代码结构更清晰;
rocksdb模块
- 为pegasus-rocksdb项目增加travis-ci支持;
- 改进CompactRange函数,在ReFitLevel完成后打印lsm_state,帮助进行性能分析;
- 改进FlushMemTable函数,不再返回NoNeedOperate错误码;
Shell工具
- 增加操作app envs的相关命令,包括get_app_envs/set_app_envs/del_app_envs/clear_app_envs;
- 改进ls命令,不再显示envs列;
- 改进app命令,修改health状态的统计项;
- 改进app_stat命令,重新整理统计数据列,调整对齐格式;
- 改进help命令,支持帮助信息的自动换行;
脚本工具
- 增加pegasus_set_usage_scenario.sh,用于设置表的使用场景,支持normal/preper_write/bulk_load三种场景;
- 改进download-thirdparty.sh,支持在下载第三方库时检查md5sum;
- 增加pegasus_offline_node_list.sh,用于下线一批机器;
- 改进pegasus_manual_compact.sh,支持periodic和once两种触发模式,支持指定options;
- 改进pack_server.sh,不再打包pegasus_rproxy程序;
其他
- 为pegasus项目增加travis-ci支持;
- 将pegasus项目的默认编译模式从debug改为了release;
- 将rdsn共享库的名字由dsn_layer2_stateful_type1改为dsn_replica_server;
- 修复因为缺少__STDC_FORMAT_MACROS宏引发的编译问题;
- 修改src/server/config.ini,提供更合理的推荐配置;
v1.8.0
- 接口改进:在MultiGetOptions中增加reverse参数,支持逆向扫描查找数据;
- 项目重构:移除java文件夹,将Java Client放到单独的项目中;移除rocksdb文件夹,将RocksDB作为submodule放到单独的项目中,并catch到最近的主线版本;
- 功能改进:改进load-balance使负载更均衡;增加配置参数,支持数据以非压缩方式存储;支持远程命令触发的manual compact功能;增加对异常查询的统计和日志;
- rdsn重构:移除不必要的文件;移除gpid相关的C接口;改进perf-counter使其可以多次实例化;
- bug修复:修复了learn过程中分布式协议上的一处bug;修复获取local ipv4地址的bug;
- 工具改进:增加pegasus_manual_compact.sh脚本;改进模板配置文件src/server/config.ini,用于业务的分布式部署;改进shell的count_data命令,增加top_count选项;修复pack打包工具;修复client sample示例代码;
v1.7.0
- 改进冷备份功能:重构了冷备份打checkpoint的流程;支持统计单次冷备份的总大小;修复冷备policy启动时间漂移的问题;修复冷备份恢复的一个bug;
- 代码重构与化简:文件结构重整;移除了大部分C-API接口;移除了layer1 app model;移除了dmodule load功能;移除了windows平台下的服务;移除__TITLE宏;
- 改进NFS模块:移除对裸指针的使用;增加copy失败重试机制;使用random robin queue以提高learn app的并发能力;
- 增加remote-command:lb.assign_delay_ms;lb.add_secondary_enable_flow_control;lb.add_secondary_max_count_for_one_node;
- Bug修复:修复了aio core的bug;修复了task_tracker析构时的bug;修复new replica时的内存泄漏问题;修复disk stat时不正确使用右值引用的bug;修复gc_checkpoints中边界处理bug;
- 性能优化:优化了replica_stub中对锁的使用;优化mutation中对blob的使用,避免不必要的memcpy;优化error_code的解析功能;优化rocksdb checkpoint功能,降低加锁时间和失败率;
- 工具改进:改进pegasus_rolling_update.sh,减小热升级对服务可用度的影响;增加pegasus_offline_node.sh,以支持节点下线;改进shell工具,提升交互体验;改进pack工具,以拷贝依赖的系统库;