外观
KingBaseES 核心配置文件
配置文件概述
KingBaseES 的配置文件主要包括以下几类:
- 主配置文件:
kingbase.conf- 控制数据库服务的核心参数 - 连接认证文件:
pg_hba.conf- 控制客户端连接访问权限 - 恢复配置文件:
recovery.conf/kingbase.auto.conf- 控制备库恢复和复制行为 - 环境变量文件:
kb_envar.conf- 设置数据库服务的环境变量 - 日志配置文件:
log.conf- 控制日志输出格式和级别
主配置文件 (kingbase.conf)
kingbase.conf 是 KingBaseES 最核心的配置文件,位于数据目录下,控制数据库的各种行为和资源限制。
配置文件结构
配置文件采用键值对格式,每行一个配置项:
ini
# 注释行以 # 开头
parameter_name = value主要配置参数
1. 连接与认证
| 参数 | 默认值 | 说明 | 推荐值 |
|---|---|---|---|
listen_addresses | localhost | 监听的IP地址,*表示所有地址 | *(生产环境根据需要限制) |
port | 54321 | 数据库服务端口 | 保持默认或根据规划修改 |
max_connections | 100 | 最大并发连接数 | 根据业务需求调整,一般500-2000 |
superuser_reserved_connections | 3 | 为超级用户保留的连接数 | 5-10 |
unix_socket_directories | /tmp | Unix套接字文件目录 | 保持默认或设置为专用目录 |
2. 资源管理
| 参数 | 默认值 | 说明 | 推荐值 |
|---|---|---|---|
shared_buffers | 256MB | 共享缓冲区大小 | 系统内存的25%-30% |
work_mem | 4MB | 每个查询操作的工作内存 | 根据查询复杂度调整,一般8MB-32MB |
maintenance_work_mem | 64MB | 维护操作(如VACUUM)的内存 | 系统内存的10%,最大不超过2GB |
effective_cache_size | 1GB | 查询优化器假设的可用缓存大小 | 系统内存的50%-75% |
wal_buffers | -1 | WAL缓冲区大小,-1表示自动计算 | 保持默认或设置为64MB-256MB |
3. WAL 与归档
| 参数 | 默认值 | 说明 | 推荐值 |
|---|---|---|---|
wal_level | replica | WAL日志级别 | replica(主备复制)或logical(逻辑复制) |
archive_mode | off | 是否启用WAL归档 | on(生产环境必须启用) |
archive_command | '' | 归档命令 | 根据归档策略设置,如'cp %p /archive/%f' |
max_wal_senders | 10 | 最大WAL发送进程数 | 根据备库数量调整 |
wal_keep_size | 0 | 保留的WAL日志大小 | 1GB-10GB,根据备库延迟情况调整 |
checkpoint_timeout | 5min | 检查点超时时间 | 15min-30min |
max_wal_size | 1GB | 最大WAL文件大小 | 4GB-8GB |
min_wal_size | 80MB | 最小WAL文件大小 | 512MB-1GB |
4. 查询优化
| 参数 | 默认值 | 说明 | 推荐值 |
|---|---|---|---|
random_page_cost | 4.0 | 随机读取页面的成本 | 机械硬盘:4.0,SSD:1.1-1.5 |
seq_page_cost | 1.0 | 顺序读取页面的成本 | 保持默认 |
effective_io_concurrency | 1 | 假设的磁盘I/O并发数 | 机械硬盘:2-4,SSD:100-200 |
default_statistics_target | 100 | 统计信息收集目标 | 100-500 |
5. 日志配置
| 参数 | 默认值 | 说明 | 推荐值 |
|---|---|---|---|
logging_collector | off | 是否启用日志收集器 | on |
log_directory | 'log' | 日志目录 | 保持默认或设置为专用目录 |
log_filename | 'kingbase-%a.log' | 日志文件名格式 | 'kingbase-%Y-%m-%d_%H%M%S.log' |
log_rotation_age | 1d | 日志文件轮换时间 | 1h-1d |
log_rotation_size | 0 | 日志文件大小限制 | 100MB-500MB |
log_statement | 'none' | 记录的SQL语句类型 | 'ddl'或'mod' |
log_min_duration_statement | -1 | 记录执行时间超过此值的SQL | 1000(毫秒) |
6. 复制与高可用
| 参数 | 默认值 | 说明 | 推荐值 |
|---|---|---|---|
hot_standby | on | 备库是否允许只读查询 | on |
max_standby_streaming_delay | 30s | 备库应用WAL的最大延迟 | 30s-300s |
hot_standby_feedback | off | 备库是否向主库反馈查询状态 | on(减少主库VACUUM影响) |
配置文件加载顺序
KingBaseES 按以下顺序加载配置:
- 编译时默认值
kingbase.conf文件中的设置kingbase.auto.conf文件中的设置(自动生成,优先级高于kingbase.conf)- 命令行参数(优先级最高)
配置文件管理
1. 查看当前配置
sql
-- 查看所有配置参数
SHOW ALL;
-- 查看单个配置参数
SHOW shared_buffers;
-- 查看参数是否需要重启
SELECT name, setting, unit, short_desc, context FROM pg_settings WHERE name = 'shared_buffers';2. 修改配置
方法1:修改配置文件后重启数据库
bash
# 编辑配置文件
vi /data/kingbase/kingbase.conf
# 重启数据库
systemctl restart kingbase8d.service方法2:使用ALTER SYSTEM命令(无需重启)
sql
-- 修改参数,会自动写入kingbase.auto.conf
ALTER SYSTEM SET max_connections = 500;
-- 重新加载配置(适用于context为'sighup'的参数)
SELECT pg_reload_conf();连接认证文件 (pg_hba.conf)
pg_hba.conf 控制客户端如何连接到数据库,位于数据目录下。
配置文件格式
每行一个规则,格式如下:
# TYPE DATABASE USER ADDRESS METHOD参数说明
| 参数 | 取值范围 | 说明 |
|---|---|---|
TYPE | local, host, hostssl, hostnossl | 连接类型 |
DATABASE | 数据库名, all, sameuser, samerole, replication | 允许访问的数据库 |
USER | 用户名, all, +groupname | 允许访问的用户 |
ADDRESS | IP地址/掩码, samehost, samenet | 允许连接的IP地址 |
METHOD | trust, reject, md5, password, scram-sha-256, gss, sspi, ident, peer | 认证方法 |
常用认证方法
- md5:使用MD5加密密码认证(推荐生产环境使用)
- password:明文密码认证(不推荐)
- scram-sha-256:更安全的密码认证机制(KingBaseES V8 R7支持)
- peer:基于操作系统用户名的认证(仅本地连接)
- ident:基于Ident协议的认证
- trust:无条件信任(仅测试环境使用)
- reject:拒绝连接
典型配置示例
# 允许本地所有用户使用peer认证连接所有数据库
local all all peer
# 允许本地所有用户使用md5认证连接所有数据库
local all all md5
# 允许192.168.1.0/24网段的用户使用md5认证连接所有数据库
host all all 192.168.1.0/24 md5
# 允许10.0.0.0/8网段的repluser用户使用md5认证进行复制
host replication repluser 10.0.0.0/8 md5
# 拒绝来自192.168.2.1的所有连接
host all all 192.168.2.1/32 reject配置重载
修改 pg_hba.conf 后,需要重新加载配置:
sql
SELECT pg_reload_conf();恢复配置文件
1. KingBaseES V8 R6 - recovery.conf
在 KingBaseES V8 R6 中,备库恢复配置使用 recovery.conf 文件,位于数据目录下。
主要配置参数
| 参数 | 说明 | 示例 |
|---|---|---|
standby_mode | 是否处于备库模式 | on |
primary_conninfo | 主库连接信息 | 'host=192.168.1.101 port=54321 user=repluser password=repluser123' |
restore_command | 从归档恢复WAL的命令 | 'cp /archive/%f %p' |
recovery_target_timeline | 恢复目标时间线 | 'latest' |
trigger_file | 触发备库提升为主库的文件路径 | '/data/kingbase/promote_trigger' |
示例配置
ini
standby_mode = 'on'
primary_conninfo = 'host=192.168.1.101 port=54321 user=repluser password=repluser123'
restore_command = 'cp /archive/%f %p'
recovery_target_timeline = 'latest'
trigger_file = '/data/kingbase/promote_trigger'2. KingBaseES V8 R7 - kingbase.auto.conf
在 KingBaseES V8 R7 中,备库恢复配置集成到 kingbase.auto.conf 文件中,使用 ALTER SYSTEM 命令管理。
配置方法
sql
-- 在备库上执行
ALTER SYSTEM SET standby_mode = 'on';
ALTER SYSTEM SET primary_conninfo = 'host=192.168.1.101 port=54321 user=repluser password=repluser123';
ALTER SYSTEM SET recovery_target_timeline = 'latest';环境变量文件 (kb_envar.conf)
kb_envar.conf 用于设置数据库服务的环境变量,位于安装目录的 bin 子目录下。
主要环境变量
| 变量名 | 说明 | 示例 |
|---|---|---|
KINGBASE_HOME | 数据库安装目录 | /opt/Kingbase/ES/V8 |
KINGBASE_DATA | 数据目录 | /data/kingbase |
LD_LIBRARY_PATH | 动态库搜索路径 | $KINGBASE_HOME/lib |
PATH | 命令搜索路径 | $KINGBASE_HOME/bin:$PATH |
PGPORT | 默认端口 | 54321 |
PGUSER | 默认用户名 | system |
日志配置文件 (log.conf)
log.conf 控制日志输出格式和级别,位于数据目录下。
主要配置参数
| 参数 | 说明 | 示例 |
|---|---|---|
log_destination | 日志输出目标 | 'stderr,csvlog' |
logging_collector | 是否启用日志收集器 | on |
log_directory | 日志目录 | 'log' |
log_filename | 日志文件名格式 | 'kingbase-%Y-%m-%d_%H%M%S.log' |
log_rotation_age | 日志轮换时间 | '1d' |
log_rotation_size | 日志轮换大小 | 100MB |
log_min_messages | 日志消息级别 | 'warning' |
log_min_error_statement | 记录错误语句的级别 | 'error' |
配置文件最佳实践
1. 生产环境配置建议
- 备份原始配置文件:修改前先备份,便于回滚
- 使用版本控制:将配置文件纳入版本控制,便于追踪变更
- 分环境配置:开发、测试、生产环境使用不同的配置文件
- 逐步调整:每次只修改少量参数,观察效果后再调整其他参数
- 记录变更:记录每次配置变更的原因、时间和影响范围
2. 性能相关配置建议
- shared_buffers:设置为系统内存的25%-30%,不宜过大
- work_mem:根据查询复杂度调整,避免设置过大导致OOM
- effective_cache_size:设置为系统内存的50%-75%,帮助查询优化器做出更好的决策
- wal_buffers:对于写入频繁的系统,适当增大此参数
- checkpoint_timeout:适当增大此参数,减少检查点对性能的影响
3. 安全相关配置建议
- pg_hba.conf:遵循最小权限原则,只允许必要的IP和用户访问
- 认证方法:生产环境使用md5或scram-sha-256认证
- 监听地址:根据需要限制监听地址,避免暴露到公网
- 日志配置:启用慢查询日志和错误日志,便于问题排查
4. 高可用相关配置建议
- wal_level:设置为replica或logical,支持复制
- archive_mode:启用归档,确保数据可恢复
- wal_keep_size:设置足够大的值,避免备库因WAL缺失导致复制中断
- hot_standby_feedback:启用,减少主库VACUUM对备库的影响
常见问题
Q1: 修改配置后为什么没有生效?
解决方案:
- 检查参数的context类型,有些参数需要重启数据库
- 确认配置文件路径是否正确
- 执行
SELECT pg_reload_conf()重新加载配置 - 检查日志文件中是否有配置错误信息
Q2: 如何查看配置文件的语法错误?
解决方案:
bash
# 使用kingbase工具检查配置文件
kingbase --config-file=/data/kingbase/kingbase.conf --checkQ3: 如何备份和恢复配置文件?
解决方案:
bash
# 备份配置文件
tar -czvf kingbase_config_backup.tar.gz /data/kingbase/kingbase.conf /data/kingbase/pg_hba.conf /data/kingbase/kingbase.auto.conf
# 恢复配置文件
tar -xzvf kingbase_config_backup.tar.gz -C /Q4: 为什么有些参数在ALTER SYSTEM中无法修改?
解决方案:
- 检查参数的context类型,只有context为'superuser'或'user'的参数可以通过ALTER SYSTEM修改
- 有些参数需要重启数据库才能生效,只能通过修改配置文件
版本差异注意事项
V8 R6 与 V8 R7 配置差异
| 特性 | V8 R6 | V8 R7 |
|---|---|---|
| 恢复配置文件 | recovery.conf | kingbase.auto.conf |
| 认证方法 | 支持md5 | 支持md5和scram-sha-256 |
| ALTER SYSTEM | 支持基本参数 | 支持更多参数 |
| 日志配置 | 部分参数在log.conf | 统一在kingbase.conf |
| 动态参数调整 | 支持部分参数 | 支持更多参数动态调整 |
配置文件管理工具
1. KingBaseES Manager (KEM)
提供图形化界面管理配置文件,支持:
- 在线查看和修改配置参数
- 配置变更历史记录
- 配置文件备份和恢复
- 配置模板管理
2. 命令行工具
- ksql:用于执行SQL命令查看和修改配置
- pg_config:查看编译时配置
- pg_settings:系统视图,提供配置参数的详细信息
总结
KingBaseES 的配置文件是数据库运维的核心,合理配置这些文件对于数据库的性能、安全性和可靠性至关重要。DBA应该:
- 深入理解每个配置参数的含义和影响
- 根据业务需求和硬件环境调整配置
- 定期审查和优化配置
- 建立配置变更管理流程
- 备份配置文件,便于灾难恢复
通过合理配置KingBaseES的核心配置文件,可以充分发挥数据库的性能,提高系统的可靠性和安全性,为业务提供稳定高效的数据服务。
