配置组成部分

Pegasus的配置为ini格式,主要有以下组成部分:

  • core:一个Pegasus Service内核引擎运行时的相关参数配置。
  • network:RPC组件的相关参数配置。
  • 线程池相关:Pegasus进程中启动的各个线程池的相关参数配置。
  • app相关:app是rDSN中的一个概念,可以理解成分布式系统中的“组件”或者“job”,例如Pegasus中的MetaServer、ReplicaServer就各是一个app。一个进程内可以启动多个app,针对每个app,可以分别配置其行为,譬如名字、端口、线程池等。
  • task相关:task也是rDSN中的一个概念,可以理解成“异步任务”。比如一个RPC异步调用、一个异步文件IO操作、一个超时事件,都是一个task。每种task都有定义一个唯一的名字。针对每种task,都可以配置其相关的行为,譬如trace、profiler等。
  • 一致性协议相关:一致性replication协议的相关参数配置。
  • 其他杂项:Pegasus中一些组件模块的参数配置,譬如日志、监控、Zookeeper配置等。配置文件中会涉及到一些rDSN的概念,对这些概念的进一步理解,请参见rDSN的项目

下面列举出了Pegasus配置文件的部分说明。这些配置项有些是和client通用的,比如app、task、threadpool等,其他是server端所独有的。要理解这些配置的真正含义,建议先阅读PacificA论文,并了解清楚rDSN项目和Pegasus架构。

配置文件部分说明

  1. [apps..default] ;各个app配置项的默认模板
  2. run = true
  3. count = 1
  4. [apps.meta] ;meta app的配置项
  5. type = meta
  6. name = meta
  7. arguments =
  8. ports = 34601 ;meta的运行端口
  9. ; meta app运行时需要的线程池
  10. pools = THREAD_POOL_DEFAULT,THREAD_POOL_META_SERVER,THREAD_POOL_META_STATE,THREAD_POOL_FD,THREAD_POOL_DLOCK
  11. run = true
  12. count = 3 ;meta app的实例个数,每个实例的运行端口依次为ports, ports+1...;可以用参数-app_list meta@1的方式启动指定的app
  13. [apps.replica] ; replica app的配置项目
  14. type = replica
  15. name = replica
  16. arguments =
  17. ports = 34801
  18. pools = THREAD_POOL_DEFAULT,THREAD_POOL_REPLICATION_LONG,THREAD_POOL_REPLICATION,THREAD_POOL_FD,THREAD_POOL_LOCAL_APP
  19. run = true
  20. count = 3
  21. [core] ;pegasus内核引擎运行参数
  22. tool = nativerun ;rDSN相关概念,参见rDSN文档
  23. toollets = profiler ;rDSN相关概念,参见rDSN文档
  24. pause_on_start = false ;启动时是否暂停以等待交互输入
  25. cli_local = true ;是否开启本地命令行控制
  26. cli_remote = true ;是否开启远程命令行
  27. perf_counter_factory_name = pegasus::server::pegasus_perf_counter ;pegasus监控metrics的实现类
  28. start_nfs = true ;是否开启NFS服务
  29. logging_start_level = LOG_LEVEL_DEBUG ;logging级别
  30. logging_factory_name = dsn::tools::simple_logger ;logging的实现类
  31. logging_flush_on_exit = true ;进程退出时是否将缓存的日志数据刷出到文件系统
  32. data_dir = /home/work/data/pegasus/@cluster@ ;默认的数据文件夹
  33. [network] ;网络相关配置
  34. io_service_worker_count = 4 ;负责网络IO的线程个数
  35. [threadpool..default] ;线程池相关配置的默认模板
  36. worker_count = 4 ;线程池的默认线程数
  37. [threadpool.THREAD_POOL_REPLICATION] ;线程池THREAD_POOL_REPLICATION的配置
  38. name = replica ;线程池名称
  39. partitioned = true ;rDSN相关概念,partitioned = ture表示每个线程有一个自己的任务队列,且task会根据hash分派到特定的线程执行
  40. max_input_queue_length = 2048 ;线程队列最大长度
  41. worker_priority = THREAD_xPRIORITY_NORMAL ;线程在OS中的调度优先级
  42. worker_count = 23 ;线程池中的线程数,如果没有配置则使用默认模板的值
  43. [threadpool.XXXXX] ;线程池XXXXX的相关配置
  44. .....
  45. [meta_server] ; meta_server的相关配置
  46. server_list = 127.0.0.1:34601,127.0.0.1:34602,127.0.0.1:34603 ;MetaServer的地址列表
  47. cluster_root = /pegasus/my-cluster ;MetaServer在元数据存储服务上的根目录,一个集群的不同meta_server要配成相同的值,不同的集群用不同的值
  48. meta_state_service_type = meta_state_service_zookeeper ;元数据存储服务的实现类
  49. meta_state_service_parameters = ;元数据存储服务的初始化参数
  50. distributed_lock_service_type = distributed_lock_service_zookeeper ;分布式锁服务的实现类
  51. distributed_lock_service_parameters = /pegasus/onebox/127.0.0.1 ;分布式锁服务的初始化参数
  52. stable_rs_min_running_seconds = 600 ;判断一个ReplicaServer是不是稳定运行的时间阈值
  53. max_succssive_unstable_restart = 5 ;一个ReplicaServer最多可以崩溃的次数,如果崩溃太频繁,就会上MetaServer的黑名单
  54. server_load_balancer_type = greedy_load_balancer ;负载均衡器的实现类
  55. replica_assign_delay_ms_for_dropouts = 300000 ;当一个secondary被移除后,等待它回来的最长时间阈值
  56. node_live_percentage_threshold_for_update = 50 ;如果不可用节点比例太高,MetaServer会进入freezed的保护状态
  57. min_live_node_count_for_unfreeze = 3 ;如果不可用的节点个数太少,MetaServer也会进入freezed的保护状态
  58. hold_seconds_for_dropped_app = 604800 ;表删除后在回收站中默认的保留时间
  59. meta_function_level_on_start = steady ;MetaServer启动时的默认function_level状态,steady表示不进行负载均衡的稳定状态
  60. recover_from_replica_server = false ;如果为true, 集群启动时就会进入“元数据恢复”流程
  61. max_replicas_in_group = 4 ;一个replica group中最多保留的副本数(可用副本+尸体)
  62. [replication.app] ;集群在bootstrap时默认要创建的表
  63. app_name = temp ;表名
  64. app_type = pegasus ;type表征了存储引擎,pegasus表示我们基于rocksdb实现的存储引擎
  65. partition_count = 8 ;分片数
  66. max_replica_count = 3 ;每个分片的副本个数
  67. stateful = true ;rDSN参数,对于app_type = pegasus需要设置为true
  68. package_id =
  69. [replication] ;一致性协议相关配置,很多概念和PacificA相关
  70. slog_dir = /home/work/ssd1/pegasus/@cluster@ ;shared log存储的文件夹路径
  71. data_dirs = tag1:/home/work/ssd2/pegasus/@cluster@,tag2:/home/work/ssd3/pegasus/@cluster@ ;replica数据存储的文件夹路径列表,建议一块磁盘配置一个项,tag为磁盘的标记名
  72. data_dirs_black_list_file = /home/mi/.pegasus_data_dirs_black_list ;黑名单文件,文件中每行是一个需忽略掉的文件夹,主要用于过滤坏盘
  73. deny_client_on_start = false ;ReplicaServer启动时是否要拒绝掉客户端写
  74. delay_for_fd_timeout_on_start = false ;ReplicaServer启动时是否等待一段时间后才开始连接MetaServer
  75. verbose_log_on_commit = false ;是否打印commit log的调试信息
  76. empty_write_disabled = false ;primary会定期生成一个空的写操作以检查group状态,是否禁止该特性
  77. prepare_timeout_ms_for_secondaries = 1000 ;prepare的超时时间
  78. prepare_timeout_ms_for_potential_secondaries = 3000 ;给learnerprepare的超时时间
  79. batch_write_disabled = false ;是否禁止掉客户端写请求的batch功能
  80. staleness_for_commit = 20 ;保留多少个已经commit的写请求在队列中
  81. max_mutation_count_in_prepare_list = 110 ;prepare_list的容量
  82. mutation_2pc_min_replica_count = 2 ;想要成功进行一次写操作,最少需要多少个副本
  83. group_check_disabled = false ;primary会定期推送group状态给其他成员,是否禁用该特性
  84. group_check_interval_ms = 100000 ;group check的时间间隔
  85. checkpoint_disabled = false ;是否禁用定期checkpoint的生成
  86. checkpoint_interval_seconds = 100 ;checkpoint的尝试触发时间间隔,尝试触发并不一定生成checkpoint
  87. checkpoint_min_decree_gap = 10000
  88. checkpoint_max_interval_hours = 1 ;checkpoint的强制触发时间间隔,强制触发会将memtable的数据刷出
  89. gc_disabled = false ;是否禁用WAL的垃圾回收
  90. gc_interval_ms = 30000
  91. gc_memory_replica_interval_ms = 300000 ;如果一个replica需要关闭,在内存中保留多长时间
  92. gc_disk_error_replica_interval_seconds = 172800000 ;一个因为IO错误关闭掉的replica,在磁盘保留多长时间
  93. fd_disabled = false ;failure detector是否禁止
  94. fd_check_interval_seconds = 5
  95. fd_beacon_interval_seconds = 3
  96. fd_lease_seconds = 10
  97. fd_grace_seconds = 15
  98. log_private_file_size_mb = 32 ;每一个private log多大,超过了该阈值就滚动到下一个文件
  99. log_private_batch_buffer_kb = 512 ;private log一个batch的最小容量
  100. log_private_batch_buffer_count = 512 ;private log一个batch的最小条数
  101. log_private_batch_buffer_flush_interval_ms = 100000 ;超过该事件没写private log, 则强制刷一次
  102. log_private_reserve_max_size_mb = 0
  103. log_private_reserve_max_time_seconds = 0
  104. log_shared_file_size_mb = 32 ;shared log多大,超过该阈值就滚动到下一个文件
  105. log_shared_file_count_limit = 32
  106. log_shared_batch_buffer_kb = 0
  107. log_shared_force_flush = false
  108. config_sync_disabled = false ;replica server会定期和meta server同步本机所服务的replica, 是否禁止这一特性
  109. config_sync_interval_ms = 30000
  110. lb_interval_ms = 10000 ;meta server跑负载均衡的周期
  111. [pegasus.server]
  112. ;;; rocksdb相关配置
  113. rocksdb_verbose_log = false ;是否打印rocksdb中一些调试日志
  114. rocksdb_write_buffer_size = 10485760
  115. updating_rocksdb_sstsize_interval_seconds = 30
  116. ;;; 监控相关配置,部分和小米的开源监控系统open-falcon相关
  117. perf_counter_cluster_name = onebox
  118. perf_counter_update_interval_seconds = 10 ;监控项的汇报周期
  119. perf_counter_enable_stat = true ;是否允许直接向service拉去监控项
  120. perf_counter_enable_logging = false ;是否允许把所有监控项打印到日志
  121. perf_counter_enable_falcon = false ;是否允许把监控项推送到falcon
  122. falcon_host = 127.0.0.1
  123. falcon_port = 1988
  124. falcon_path = /v1/push
  125. [task..default] ; task相关配置模板,里面的概念都和rDSN相关
  126. is_trace = false
  127. is_profile = false
  128. allow_inline = false
  129. fast_execution_in_network_thread = false
  130. rpc_call_header_format = NET_HDR_DSN
  131. rpc_call_channel = RPC_CHANNEL_TCP
  132. rpc_timeout_milliseconds = 5000
  133. disk_write_fail_ratio = 0.0
  134. disk_read_fail_ratio = 0.0
  135. [task.RPC_L2_CLIENT_READ] ; task RPC_L2_CLIENT_READ的相关配置,选项均继承模板,自定义的部分表示该task需要监控的内容
  136. is_profile = true
  137. profiler::inqueue = false
  138. profiler::queue = false
  139. profiler::exec = false
  140. profiler::qps = false
  141. profiler::cancelled = false
  142. profiler::latency.server = false
  143. ;;;;;; 以下是各种各样的杂项配置
  144. [components.pegasus_perf_counter_number_percentile_atomic] ;监控实现类相关
  145. counter_computation_interval_seconds = 10
  146. [zookeeper] ; zookeeper相关
  147. hosts_list = 127.0.0.1:22181
  148. timeout_ms = 10000
  149. logfile = zoo.log
  150. [tools.simple_logger] ;logger的实现类相关
  151. short_header = false
  152. fast_flush = false
  153. max_number_of_log_files_on_disk = 100000
  154. stderr_start_level = LOG_LEVEL_FATAL

配置建议

一些配置建议:

  • 配置文件中所有需要使用机器名的地方,都建议使用IP地址。
  • 大部分配置项,建议使用默认值。
  • 对于高级用户,可以根据需要自行配置,但是前提是需要理解配置项的作用和影响。
  • 由于文档不能面面俱到,对配置项的作用不太清楚的,可以直接查看源代码。