关键配置文件
postgresql.conf
关键参数
-
参数说明:设置在维护性操作(比如VACUUM、CREATE INDEX、ALTER TABLE ADD FOREIGN KEY等)中可使用的最大的内存。该参数的设置会影响VACUUM、VACUUM FULL、CLUSTER、CREATE INDEX的执行效率。
设置建议:建议设置此参数的值大于work_mem可以改进清理和恢复数据库转储的速度。参数值建议在64MB~20GB区间内。
默认值:16MB
-
参数说明: 设置Vastbase使用的共享内存大小。增加此参数的值会使Vastbase比系统默认设置需要更多的System V共享内存。
取值范围: 整型,16 ~ 1073741823,单位为8KB。
设置建议:shared_buffers需要设置为BLCKSZ的整数倍,BLCKSZ目前设置为8KB,即shared_buffers需要设置为8KB整数倍。改变BLCKSZ的值会改变最小值。建议取值为系统内存的25%~40%。
-
参数说明: 设置列存所使用的共享缓冲区的大小。
取值范围: 整型,16384~1073741823,单位为KB。
设置建议:列存表使用cstore_buffers设置的共享缓冲区,几乎不用shared_buffers。因此在列存表为主的场景中,应减少shared_buffers,增加cstore_buffers。
-
参数说明:设置优化器在一次单一的查询中可用的磁盘缓冲区的有效大小。设置这个参数,还要考虑Vastbase的共享缓冲区以及内核的磁盘缓冲区。另外,还要考虑预计的在不同表之间的并发查询数目,因为它们将共享可用的空间。
设置建议: 建议取值为系统内存的75% 。
-
参数说明: 设置一个数据库节点可用的最大物理内存。
设置建议:建议计算公式如下:(物理内存大小 - vm.min_free_kbytes) * 0.7 / (1 + 主节点个数)。该系数的目的是尽可能保证系统的可靠性,不会因数据库内存膨胀导致节点OOM。这个公式中提到vm.min_free_kbytes,其含义是预留操作系统内存供内核使用,通常用作操作系统内核中通信收发内存分配,至少为5%内存。即,max_process_memory = 物理内存 * 0.665 / (1 + 主节点个数)。
-
如数据库版本号≥V2.2 Build 5.75且低于V2.2 Build 11,本参数应设置为off。
license_path
license文件路径为绝对路径,且需要指定到文件名级别。
数据库安装后会自动生成临时许可文件,当没有license文件时,无需配置postgresql.conf,可直接启动数据库。临时许可文件有效期90天。
更多参数说明参见GUC参数说明。
文件内容
以下为以系统内存为128GB时的参数配置,其中
Base Configuration基础配置应结合用户具体环境修改,重点关注参数信息参见postgresql.conf文件重要参数;
For Replication部分注意添加,需对应实际集群ip。
synchronous_standby_names参数用于设定主备实时同步、异步同步状态,注意按需配置。
#
后为参考值。#Base Configuration for OS_MEM=128GB license_path='/home/vastbase/vasthome/${license_name} //根据实际情况填写 port=5432 maintenance_work_mem=2GB # 64MB~20GB shared_buffers=48GB # 40% OS_MEM cstore_buffers=16MB effective_cache_size=100GB # 80% OS_MEM max_process_memory=100GB # 80% OS_MEM archive_mode=on archive_dest='/data/archive_wals' vacuum_cost_limit=10000 autovacuum=on autovacuum_mode=mix autovacuum_max_workers=5 autovacuum_naptime=20s autovacuum_vacuum_cost_delay=0 autovacuum_vacuum_scale_factor = 0.2 autovacuum_analyze_scale_factor = 0.1 track_sql_count=on session_timeout=0 enable_cbm_tracking=on enable_thread_pool = off password_encryption_type=0 max_wal_senders=10 log_statement='ddl' log_duration = on log_line_prefix = '%m %r %d %u [%p]' shared_preload_libraries = 'pg_stat_statements' pg_stat_statements.max = 10000 pg_stat_statements.track = all track_activity_query_size=4096 #For Replication replication_type = 1 application_name = 'vdb1' recovery_max_workers = 1 password_encryption_type=0 replconninfo1 = 'localhost=192.xx.xx.1 localport=26001 localheartbeatport=26002 localservice=26003 remotehost=192.xx.xx.2 remoteport=26001 remoteheartbeatport=26002 remoteservice=26003' wal_level=hot_standby hot_standby=on vastbase_login_info=false synchronous_commit=on synchronous_standby_names = '*' # * for sync, empty for async remote_read_mode='non_authentication'
vb.yml
关键参数
在主、备库的配置vb.yml文件,用户注意对应实际情况修改,重要配置参数说明按模板出现顺序如下:
restapi
设置连接与监听信息,具体含义参考注释即可。
restapi: listen: 192.xx.xx.1:8008 # has服务监听的套接字,192.xx.xx.1为本节点的IP地址,下面的配置信息涉及192.xx.xx.2均表示本节点IP地址 connect_address: 192.xx.xx.1:8008 # 高可用集群内,其他节点通过本参数的地址访问本节点的has服务
dcs
设置has集群使用的dcs地址。
etcd: hosts: 192.xx.xx.1:2379,192.xx.xx.2:2379,192.xx.xx.3:2379 # dcs地址集
bootstrap.postgresql.parameters
此处配置的是公共部分的参数,设置集群以及数据库实例初始化配置,所有节点生成的配置文件都是一致的。
如有个性化需求,请在下面的postgresql.parameters部分进行个性化配置。
license_path: '/home/vastbase/vasthome/${license_name}' # license证书路径,根据实际情况填写 max_connections: 2048 # 根据使用情况设置,如果开启并行查询,需要设置较大值 max_process_memory: 100GB #以系统内存128G为例,建议物理内存80%左右 wal_keep_segments: 128 # 建议设置128及以上,如果太小,在主库重新加入集群时有可能造成增量build失败并触发全量build max_prepared_transactions: 2048 # 不能小于max_connections
pg_hba:
设置has执行vb_initdb初始化实例后,追加至pg_hba.conf的配置信息,如果不是通过has初始化的实例,该部分参数不会被追加。
- host all all 0.0.0.0/0 md5 # 此行配置必须在最后;如果是IPV6地址,需要替换IP为IPV6,例如:- host all all ::0/0 md5
postgresql.callbacks:
callbacks: listen: 0.0.0.0:5432 #设置数据库的监听地址,此处的配置会覆盖postgresql.conf的listen_addresses和port参数,如果此处没有配置端口号,默认监听5432端口。此处无论是否配置端口号,postgresql.conf配置的port参数都会被覆盖 connect_address: 192.xx.xx.1:5432 data_dir: /home/vastbase/data/vastbase # 数据库实例路径 config_dir: /home/vastbase/data/vastbase # 数据库实例配置文件路径 bin_dir: /home/vastbase/local/vastbase/bin # 数据库可执行文件路径 vastbase_lib_dir: /home/vastbase/local/vastbase/lib:/home/vastbase/local/vastbase/jre/lib/amd64:/home/vastbase/local/vastbase/jre/lib/amd64/server # 数据库共享库路径 amd64 for x86, aarch64 for arm vastbase_home: /home/vastbase/local/vastbase # 数据库安装路径 #vastbase_log: /usr/local/has/vb_log #Has版本若为2022年9月及以后版本,必须添加vastbase_log参数,即此处需取消#注释
authentication.replication:
配置has连接vastbase的用户信息,如果是由has初始化数据库实例,会自动创建不存在的用户。
authentication: replication: username: vbadmin #不能与初始化实例的用户同名 password: Vbase@admin #需提前将用户的密码修改为本配置项的取值。即本样例中应在部署has前将vbadmin用户的密码修改为Vbase@admin。 superuser: username: vbadmin #不能与初始化实例的用户同名 password: Vbase@admin #需提前将用户的密码修改为本配置项的取值。即本样例中应在部署has前将vbadmin用户的密码修改为Vbase@admin。
如数据库版本号≥V2.2 Build 5(Patch No.75)且 < V2.2 Build 11,则建议在数据库执行如下命令,使普通用户首次登录或连接不强制要求修改密码。否则在has连接vastbase时会被强制修改密码,导致集群搭建失败。
echo "password_force_alter= off" >> $PGDATA/postgresql.conf
个性化参数配置部分。
parameters: # 个性化配置部分,以下配置项建议写到该部分 application_name: vdb1 # 数据库节点名称,建议与第3行的name参数保持一致,否则synchronous_mode开后后不生效,此外,此参数不要写在bootstrap部分 replconninfo1: 'localhost=192.xx.xx.1 localport=55434 localheartbeatport=55435 localservice=55436 remotehost=192.xx.xx.2 remoteport=55434 remoteheartbeatport=554 #当localhost和remotehost配置为主机名时,需要确保主机名映射IP地址唯一
文件内容
scope: vastbase_ha_inst # 集群实例名称 namespace: /vastbase/ # 集群实例所在的命名空间,默认是/service name: 'vdb1' # 节点在集群内的名称,每个节点都必须不一样,通过hasctl list命令查看高可用集群状态时,在Member显示该名称 restapi: listen: 192.xx.xx.1:8008 # has服务监听的套接字,192.xx.xx.1为本节点的IP地址,下面的配置信息涉及192.xx.xx.1均表示本节点IP地址 connect_address: 192.xx.xx.2:8008 # 高可用集群内,其他节点通过本参数的地址访问本节点的has服务 etcd: hosts: 192.xx.xx.1:2379,192.xx.xx.2:2379,192.xx.xx.3:2379 # dcs地址集 bootstrap: dcs: ttl: 30 # 持有单个DCS key的最长时间,单位秒,例如主节点持有leader key,如果不能再该时间内更新leader key,那么可以认为发生failover loop_wait: 10 # has两次执行工作之间的时间间隔,单位秒 retry_timeout: 10 # 重试次数 maximum_lag_on_failover: 1048576 # 从库允许被参与选举主库,最大的延迟字节数 synchronous_mode: 'true' # 是否开启同步模式,开启后,has会决定哪个节点是同步备库并覆盖数据库配置文件内的synchronous_standby_names参数 postgresql: use_pg_rewind: true # 是否使用rewind,必须开启 use_slots: true # 是否使用复制槽,必须开启 parameters: # 此处配置的是公共部分的参数,所有节点生成的配置文件都是一致的,如有个性化需求,请在下面的postgresql.parameters部分配置 license_path: '/home/vastbase/vasthome/${license_name}' # license证书路径,根据实际情况填写 vastbase_login_info: 'off' # 高可用环境必须关闭 listen_addresses: '*' # 一般情况下,设置为*即可。特殊情况根据使用设置 port: 5432 # 非必须参数,根据实际情况调整 max_connections: 2048 # 根据使用情况设置,如果开启并行查询,需要设置较大值 session_timeout: 10min client_min_messages: warning # 输出到客户端的信息级别,如无特殊需求,设置为warning即可 log_min_messages: warning # 日志级别 log_destination: 'stderr' # 日志文件以何种方式输出 logging_collector: on # 是否开启日志收集,如果特殊情况,一般开启 log_directory: 'log' # 日志文件存放目录,如果配置相对路径,则该目录在数据库实例目录下 log_filename: 'postgresql-%Y-%m-%d_%H%M%S.log' # 日志文件名称 log_rotation_size: 50MB # 日志文件大小达到该值时,触发日志文件切换 log_duration: off # 记录sql语句的执行时长,如果特殊需求,一般关闭 log_statement: 'all' # 根据需要设置,POC测试等功能测试或者试生产阶段等不追求性能的场景可以设置为all,否则根据实际情况考虑 track_activities: on # 必须开启,控制收集每个会话中当前正在执行命令的统计数据,否则pg_stat_replication视图查询不到数据 enable_instr_track_wait: on # 是否开启等待事件信息实时收集功能 enable_instr_rt_percentile: off # 是否开启计算机中85%,90%的SQL的响应时间功能。可根据需要开启 track_counts: on # 是否收集表和索引上的统计信息,默认为on track_sql_count: off enable_instr_cpu_timer: off enable_instance_metric_persistent: off enable_logical_io_statistics: off enable_user_metric_persistent: off enable_resource_track: off instr_unique_sql_count: 0 plog_merge_age: 0 shared_buffers: 50GB # 以系统内存128G为例,实际设置建议物理内存40%左右 max_process_memory: 100GB # DBMS_RANDOM建议物理内存80%左右 work_mem: 48MB # tpcc中1mb是可以的,业务测试中建议适当加大,根据业务特点设置大小,参考开发者指南。设置内部排序操作和Hash表在开始写入临时磁盘文件之前使用的内存大小。ORDER BY,DISTINCT和merge joins都要用到排序操作。Hash表在散列连接、散列为基础的聚集、散列为基础的IN子查询处理中都要用到。 cstore_buffers: 16MB # 如果没有列存或者用不到列存,保持最小的16MB就好 maintenance_work_mem: 20GB # 建议适当加大 max_files_per_process: 100000 # 允许同时打开的files的最大数量 max_prepared_transactions: 2048 # 不能小于max_connections bulk_write_ring_size: 2GB wal_level: hot_standby # xlog日志级别,如果开启极致RTO,设置为archive,否则设置为hot_standby wal_log_hints: on # 设置为on即可 advance_xlog_file_num: 10 # 提前初始化xlog文件的数量,默认值为10,高负载环境下建议适当调大一些 wal_buffers: 1GB xloginsert_locks: 16 enable_xlog_prune: off max_wal_senders: 8 # walsender最大数量,根据备机数量设置,建议设置为备机数量的2倍 wal_keep_segments: 128 # 建议设置128及以上,如果太小,在主库重新加入集群时有可能造成增量build失败并触发全量build max_replication_slots: 8 synchronous_commit: on # 可选值 off、on、remote_receive、remote_write、remote_apply,建议至少为on enable_mergejoin: on enable_nestloop: on enable_hashjoin: on enable_bitmapscan: on enable_material: on enable_codegen: false enable_opfusion: off #生产环境中,两个fusion参数均关闭 enable_beta_opfusion: off query_dop: 1 # 2.2.4版本加入的参数,此参数为1,表示不开启并行查询功能。如果query_dop>1,则为开启并行查询的并行度,对于复杂的嵌套查询,可以提升查询性能,但是也会消耗大量的max_connections资源,所以如果query_dop>1,加大max_connections(建议设置为2万以上) autovacuum: on autovacuum_mode: vacuum autovacuum_max_workers: 10 autovacuum_naptime: 20s autovacuum_vacuum_cost_delay: 10 autovacuum_vacuum_scale_factor: 0.02 autovacuum_analyze_scale_factor: 0.1 enable_save_datachanged_timestamp: false vacuum_cost_limit: 10000 autoanalyze_timeout: 900 enable_incremental_checkpoint: on # 开启增量检查点 incremental_checkpoint_timeout: 60s checkpoint_segments: 1024 checkpoint_timeout: 3min # 默认设置15分钟,如果设置过长,在持续高负载环境下,会产生大量脏页造成停库时间比较久,因此根据需要调整,可以适当设置得比默认值小,例如3分钟 checkpoint_completion_target: 0.9 checkpoint_warning: 5min checkpoint_wait_timeout: 60s pgxc_node_name: 'vastbase_ha_inst' # 建议与第一行参数scope保持一致 synchronous_standby_names: '*' # 设置为*即可,开启synchronous_mode后,该参数会被has重写 password_encryption_type: 0 most_available_sync: on # 根据需要设置,如果此参数为on,为最大可用模式,备库停机不影响主库业务连续性。但此时不能保证主备数据安全性。 remote_read_mode: non_authentication hot_standby_feedback: off # 根据需要设置,如果需要保证备库复杂查询不出错,就是设置为on enable_data_replicate: off hot_standby: on # 备库是否接受只读连接,如果开启极致RTO,请设置为off,如果在高负载下进行高可用切换测试,建议开启极致RTO,开启方式请参考wiki上的《部署指南》 replication_type: 1 # 标记HA模式,设置为1即可。0 表示主备从模式 1 表示使用一主多备模式 recovery_max_workers: 8 # 开启并行回放时设置最大并行回放线程个数 recovery_parallelism: 1 # 只读参数,实际的回放线程个数,设置为默认值1即可,数据库启动时自动重新计算 recovery_parse_workers: 1 # 极致RTO特征,并行恢复时解析XLOG线程的个数,若与recovery_max_workers同时大于1,则以recovery_parse_workers为准,并行回放特性失效 recovery_redo_workers: 1 # 极致RTO特性,每个解析XLOG线程拥有的REDO线程的个数 recovery_time_target: 0 # 流控参数,设置为0即可,即不开启日志流控 enable_page_lsn_check: on # 默认打开即可 audit_enabled: off # 审计日志配置,若无特别需要,直接关闭审计功能 audit_login_logout: 7 audit_user: '*' audit_user_locked: 1 audit_grant_revoke: 1 audit_system_object: 12295 audit_dml_state: 0 audit_dml_state_select: 0 audit_function_exec: 0 audit_copy_exec: 0 audit_set_parameter: 1 # whether audit set parameter operation audit_operation_result: 0 # selective audit based on audit results (0 disables the feature, 1 success, 2 failure) fsync: on # 必须开启 full_page_writes: off # 开启增量检查点,full_page_writes会被关闭 enable_double_write: on # 必须开启,增量检查点开关打开时,不再使用full_page_writes防止半页写问题,而是依赖双写特性保护 allow_concurrent_tuple_update: true enable_alarm: off use_workload_manager: off transaction_isolation: 'read committed' default_transaction_isolation: 'read committed' update_lockwait_timeout: 20min pagewriter_sleep: 5ms # ------线程池部分,根据实际平台进行配置------ enable_thread_pool: on # 根据实际情况开启 numa_distribute_mode: 'all' # all/none:只有在aarch64平台release版本才支持all,其他平台都是none initdb: - encoding: UTF8 pg_hba: - host all ${initdb_user} 192.xx.xx.1/32 trust # 配置集群内所有节点的${initdb_user}用户远程访问为trust,否则增量build失败,${initdb_user}为初始化实例的用户,一般与操作系统用户同名;如果是IPV6地址,需要替换IP为IPV6,例如:- host all ${initdb_user} 2001:0:3238:e1:63::133/24 trust - host all ${initdb_user} 192.xx.xx.2/32 trust - host all ${initdb_user} 192.xx.xx.3/32 trust - host all all 0.0.0.0/0 md5 # 此行配置必须在最后;如果是IPV6地址,需要替换IP为IPV6,例如:- host all all ::0/0 md5 postgresql: callbacks: on_start: /usr/local/has/has_vip.sh # 回调脚本路径,一般用于管理VIP on_stop: /usr/local/has/has_vip.sh on_role_change: /usr/local/has/has_vip.sh listen: 0.0.0.0:5432 connect_address: 192.xx.xx.1:5432 use_unix_socket: true use_extreme_rto: false # 如果开启极致RTO,该参数必须设置为true,开启极致RTO后,备机不可读 pg_ctl_timeout: 600 # 数据库启动超时时间,根据实际情况设置 data_dir: /home/vastbase/data/vastbase # 数据库实例路径 config_dir: /home/vastbase/data/vastbase # 数据库实例配置文件路径 bin_dir: /home/vastbase/local/vastbase/bin # 数据库可执行文件路径 vastbase_lib_dir: /home/vastbase/local/vastbase/lib:/home/vastbase/local/vastbase/jre/lib/amd64:/home/vastbase/local/vastbase/jre/lib/amd64/server # 数据库共享库路径 amd64 for x86, aarch64 for arm vastbase_home: /home/vastbase/local/vastbase # 数据库安装路径 authentication: replication: username: vbadmin #不能与初始化实例的用户同名 password: Vbase@admin #需提前将用户的密码修改为本配置项的取值。即本样例中应在部署has前将vbadmin用户的密码修改为Vbase@admin。 superuser: username: vbadmin #不能与初始化实例的用户同名 password: Vbase@admin #需提前将用户的密码修改为本配置项的取值。即本样例中应在部署has前将vbadmin用户的密码修改为Vbase@admin。 parameters: # 个性化配置部分,以下配置项建议写到该部分 application_name: vdb1 # 数据库节点名称,建议与第3行的name参数保持一致,否则synchronous_mode开后后不生效,此外,此参数不要写在bootstrap部分 archive_mode: on # 是否开启归档,根据实际情况 archive_command: 'cp %p /data/archive/%f' # 根据实际情况配置 archive_dest: '/data/archive' # 直接指定归档目录,效率比archive_command高,设置本参数后archive_command参数失效 unix_socket_directory: '/tmp' replconninfo1: 'localhost=192.xx.xx.1 localport=55434 localheartbeatport=55435 localservice=55436 remotehost=192.xx.xx.2 remoteport=55434 remoteheartbeatport=55435 remoteservice=55436'