【GaussDB国庆献礼】GaussDB 100 HA架构技术建议书(1)
1 前言
GaussDB 100是一款对标Oracle的OLTP数据库,支持HA和分布式架构部署。本文是针对HA架构的技术建议书,从使用者的角度介绍数据库的关键技术点和使用注意事项,帮助读者快速了解数据库的能力和优化数据库配置,从而达到最优的应用效果。
2 安装部署和配置
2.1 架构
GaussDB 100支持主备复制(包括级联备)和冷双机两种HA架构。主备复制的方式通过物理复制的方式实现增量同步,是推荐的架构,下面对比下两种架构的对比:
主备复制 | 冷双机 | |
RTO | 同城AZ之间切换时间小于30s,异地小于2分钟 | 3-5分钟 |
RPO | 同城AZ间为0,异地小于10s | 0 |
存储类型 | 本地磁盘或共享存储 | 必须用共享存储 |
数据副本 | 每个备机是一个副本 | 数据只有一个副本,存储需要做RAID |
读写分离 | 支持,备机支持只读 | 不支持 |
双机软件 | 高斯提供 | 业务提供 |
浮动IP | 需要 | 需要 |
主备复制支持一主多备还支持级联备,数据最多有9个副本。级联备是把备机作为同步的主机,可以减轻主机的压力。级联备增加了集群的复杂度,一般不建议使用。
下面是三种架构的示意图:
冷双机
技术建议:
1.主备复制是推荐的架构,支持两地三中心部署,支持failover检测和切换。
2.如果使用冷双机,需要业务提供双机监控和切换软件,存储的高可用由RAID保证。
2.3.6 归档模式
商用系统一般使用归档模式,主备模式必须使用归档模式。
Ø 归档日志的最大空间占用
需要配置归档日志的最大大小,默认是16GB,对应系统参数MAX_ARCH_FILES_SIZE。归档日志建议放在磁盘阵列或者单独磁盘上,支持配置多个路径。
Ø 归档日志的清理
默认情况下,如果数据没有做过备份或者没有同步到备机,即使归档日志空间占用达到上限后台仍然不会自动清理。如果希望强制清理,需要配置对应参数。
ARCH_CLEAN_IGNORE_STANDBY建议配置为TRUE,否则备机故障会导致REDO一直无法清理;如果不会定期做物理备份,ARCH_CLEAN_IGNORE_STANDBY需要配置为TRUE,否则会导致REDO一直无法清理。
参数名 | 描述 | 默认值 | 建议配置 | 动态生效 |
MAX_ARCH_FILES_SIZE | 数据库产生的归档日志允许占据的最大空间。当归档日志超过最大容量空间时,系统会按时间顺序对这些日志进行清除。 | 16G | 根据业务产生redo的速度和空间配置 | 是 |
ARCH_CLEAN_IGNORE_BACKUP | 是否忽略归档日志已经做过物理备份 | FALSE | 如果不做备份,归档日志不会清理 | 是 |
ARCH_CLEAN_IGNORE_STANDBY | 在归档自动清理时,是否忽略备机 | FALSE | 如果备机宕机并且配置为FALSE会导致归档日志无法清理,建议配置为TRUE | 是 |
技术建议:
1.推荐使用归档模式,有备机必须使用归档模式。
2.归档日志建议放在磁盘阵列或者单独磁盘上。
3. ARCH_CLEAN_IGNORE_STANDBY建议配置为TRUE,否则备机故障会导致REDO一直无法清理;如果不会定期做物理备份,ARCH_CLEAN_IGNORE_STANDBY需要配置为TRUE,否则会导致REDO一直无法清理。
2.3.7 兼容性配置
下面是涉及不同数据库兼容性的系统级配置:
参数名 | 描述 | 默认值 | 建议配置 | 动态生效 |
UPPER_CASE_TABLE_NAMES | 是否将对象名称转为大写 | TRUE | 如果要兼容Mysql和Sybase,配置为FALSE,对象名大小写敏感 | 否 |
EMPTY_STRING_AS_NULL | 空串是否等价于NULL | TRUE | 如果要兼容Mysql和Sybase,配置为FALSE,null和空串不等价 | 否 |
ZERO_DIVISOR_ACCEPTED | 是否允许除数为0开关,开启后如果除数为0则计算结果为NULL,关闭时如果除数为0则直接抛出异常 | FALSE | 如果要兼容Mysql,配置为FALSE | 否 |
USE_NATIVE_DATATYPE | 解决不同数据库之间的兼容性,丰富数据库的数据类型,GaussDB 100提供参数USE_NATIVE_DATATYPE用于区分数值类型的关键词, 对一些混淆的数值类型关键词进行映射。 | TRUE | 建议配置为True | 否 |
USE_NATIVE_DATATYPE配置为FALSE,类型的映射关系如下:
USE_NATIVE_DATATYPE配置为FALSE会有一些使用限制,不建议修改为FALSE。
技术建议:
1.如果从Oracle迁移,UPPER_CASE_TABLE_NAMES、EMPTY_STRING_AS_NULL建议配置为TRUE,ZERO_DIVISOR_ACCEPTED配置为FALSE,其他数据库根据源数据库的特性修改。
2. USE_NATIVE_DATATYPE建议配置为TRUE,使用原生类型性能好、问题少。不过需要注意,高斯int的最大值是2^32-1,而Oracle的int是number(38),比高斯的范围大。
2.3.8 数据库字符集
技术建议:
服务端支持UTF8和GBK,推荐使用UTF8。
2.4 系统资源配置
2.4.1 内存配置
(1)内存池
内存池的内存都是预分配的,即使没用到也需要占用,备机同样需要,所以主备合设时配置内存参数时一定要考虑备机对内存的占用。
参数名 | 描述 | 默认值 | 建议配置 | 动态生效 |
DATA_BUFFER_SIZE | 数据BUFFER区用于缓存最近访问的数据 | 128M | 可用物理内存的40%左右 | 否 |
SHARED_POOL_SIZE | 共享池大小,包括对象和SQL解析的缓冲 | 128M | 可用物理内存的5%左右 | 否 |
TEMP_BUFFER_SIZE | 类似Oracle的PGA | 32M | 可用物理内存的10%左右 | 否 |
CR_POOL_SIZE | 一致性读页面缓存区(即CR pool )的大小,PCR时有效 | 32M | DATA_BUFFER_SIZE的10%,不超过2G | 否 |
(2)会话和连接
1)每个session大概占用2M的内存,所以session数量对内存占用影响较大。
2)_AGENT_STACK_SIZE跟工作线程数相关,当单个SQL有较多的变量和表达式时需要配置较大的值,否则SQL执行会报错。
3)MAX_ALLOWED_PACKET跟工作线程数相关,默认值为64M,建议调整为16M,该参数预计会在930版本废弃。
参数名 | 描述 | 默认值 | 建议配置 | 动态生效 |
_AGENT_STACK_SIZE | 设置线程数据栈的大小,与工作线程数相关 | 1M | 当单个SQL有较多的变量和表达式时需要配置较大的值,否则SQL执行会报错 | 否 |
_THREAD_STACK_SIZE | 设置线程栈大小,和C语言调用深度有关,与工作线程数相关 | 512K | 一般不用修改 | 否 |
_INIT_CURSORS | 一个session上的初始游标个数 | 32 | 如果内存紧张,可以配置为1,可以动态申请游标 | 否 |
MAX_ALLOWED_PACKET | 通信允许的最大报文大小 | 64M | 建议配置为16M | 否 |
技术建议:
1.内存池要根据可用内存配置,主备合设时备机也要占用同样的内存。
2.会话数和工作线程数对内存影响较大,需要合理设置。
3. MAX_ALLOWED_PACKET默认64M,不合理,建议修改为16M,预计930版本废弃。
2.4.2 连接配置
高斯是多线程模式,数据库的线程池的线程数由参数OPTIMIZED_WORKER_THREADS配置,默认值100。当session数量小于工作线程数时,线程是独占模式;反之则进入共享模式,后台线程在多个session之前切换。
共享模式切换的前提不是按照时间片切换的,而是要执行完当前的消息请求,包括一次SQL/存储过程执行或者一次FETCH。
线程数和Session数的配置大小对系统资源尤其是内存影响较大,需要合理配置。
参数名 | 描述 | 默认值 | 建议配置 | 动态生效 |
OPTIMIZED_WORKER_THREADS | 工作线程数,并发数超过该值变为共享模式 | 100 | 如果内存紧张,可以适当调小 | 否 |
SESSIONS | 最大会话数,上限是8000 | 200 | 根据业务需要设置,过多的会话会占用较多内存 | 是 |
技术建议:
1. SESSIONS最大支持8000,需要根据系统资源和业务应用配置。
2. OPTIMIZED_WORKER_THREADS根据系统资源和负载情况配置,如果系统资源充足并且对性能要求较高,建议OPTIMIZED_WORKER_THREADS和SESSIONS配置一样。
2.4.3 IO配置
Ø 异步IO & directIO
高斯当前只支持文件系统,文件系统会有缓存,默认不是direct IO。direct IO是绕过文件系统缓存直接读磁盘。
默认是同步IO,如果配置为异步IO可以提升预读(多块读)和后台写的效率,通过合并IO减少物理IO的次数。异步IO默认使用direct IO。
正常情况下,异步IO效果比同步IO好。
不过,当读多(尤其是索引读)写少,并且IO能力很差时,使用文件系统缓存比direct IO效果好。
如果使用异步IO,FILESYSTEMIO_OPTIONS配置为ASYNCH。如果配置为NONE则为同步IO。对于同步IO并且IO能力特别差的场景,FILESYSTEMIO_OPTIONS参数还提供了两个优化选项:DSYNC和FDATASYNC,具体用法参考版本资料。
Ø DBWR_PROCESSES
高斯后台通过DBWR_PROCESSE将脏页刷盘,如果配置异步IO,DBWR_PROCESSES建议配置为1,这样可以最大的发挥异步IO的效果;如果是同步IO,DBWR_PROCESSES需要配置为4-8,配置太小可能导致脏页无法及时刷盘。脏页刷新情况可以通过视图DV_BUFFER_POOL_STATS(CNUM_WRITE列)了解。
(3)CHECKPOINT_PERIOD和CHECKPOINT_PAGES
这两个参数是对CHECKPOINT的配置,描述见下表,一般不用修改。
参数名 | 描述 | 默认值 | 建议配置 | 动态生效 |
FILESYSTEMIO_OPTIONS | 在支持的平台上,对文件系统开启或关闭Direct I/O或异步I/O功能 | NONE | ASYNCH:启用异步I/O。该参数对IO影响较大。 | 否 |
CHECKPOINT_PERIOD | 设定两次checkpoint之间的间隔时间,当达到预设值时,则触发一次增量checkpoint,单位:秒 | 300 | 如果希望即时让脏页落盘,可以改小 | 否 |
CHECKPOINT_PAGES | 两次checkpoint之间的脏页数,当该数目达到此设定值将触发checkpoint | 100000 | 如果希望即时让脏页落盘,可以改小 | 否 |
DBWR_PROCESSES | 后台写脏页面线程的个数 | 1 | 如果未开启异步IO,建议设置为8,否则设置为1 | 否 |
技术建议:
1. 一般建议使用异步IO,可以减少物理IO次数,需要操作系统支持。
2. 当读多(尤其是索引读)写少,并且IO能力很差时,使用文件系统缓存比同步IO(direct IO)效果更好。
3. 异步IO的 DBWR_PROCESSES配置为1;同步IO的DBWR_PROCESSES要配置大些。
2.5 系统空间配置
高斯的表空间默认是bigfile,单个文件支持到8T。
2.5.1 SYSTEM表空间
在930版本前,System表空间保存数据字典、统计信息、锁、WSR快照等信息,至少需要规划15G的表空间;930版本把统计信息和WSR快照转移到了单独的表空间SYSAUX中,至少需要规划5G。
2.5.2 SYSAUX表空间
WSR快照默认保留2天,SYSAUX表空间至少需要预留10G,如果增加WSR快照的保留时间,需要相应增大SYSAUX表空间。
2.5.3 Undo和Undo2表空间
UNDO表空间要根据UNDO_RETENTION_TIME配置,建议不要配置过大, UNDO的大小一般要小于DATA_BUFFER_SIZE/2。UNDO一般不使用自动扩展,如果使用的话必须设置合理的上限。
如果DB_ISOLEVEL=CC,UNDO_RETENTION_TIME和UNDO表空间都可以配置为较小的值。
UNDO对应非NOLOGGING表,类似ORACLE的UNDO表空间,UNDO2对应NOLOGGING表;如果没有大量使用NOLOGGING表,UNDO2表空间可以配置为较小的值。
UNDO_RETENTION_TIME类似ORACLE的UNDO_RETENTION,如果需要对长SQL执行一致读或者闪回,需要配置为一个较大的值。。
参数名 | 描述 | 默认值 | 建议配置 | 动态生效 |
UNDO_RETENTION_TIME | 回滚段commit后保留时间,单位:秒 | 100 | 如果DB_ISOLEVEL=CC模式,建议调整为32以下,减少undo占用data buffer | 是 |
2.5.4 Temp和Temp2表空间
一般不使用自动扩展,如果使用的话必须设置合理的上限。
Temp类似Oracle的Temp表空间;Temp2对应nologging表,如果没有大量使用nologging表,Temp2表空间可以配置为较小的值。
技术建议:
1.系统相关表空间要设置一个合理的值。
2. UNDO和TEMP不能无限扩展。
3. UNDO_RETENTION_TIME需要根据业务情况配置,UNDO的大小一般要小于DATA_BUFFER_SIZE/2。
2.5.5 REDO
REDO的配置对DML语句的性能有较大影响。如果业务有大批量的DML操作,建议REDO配置大小,避免出现Redo切换的等待事件log file switch (checkpoint incomplete)。
技术建议:
REDO的总大小:根据业务负载,中等负载建议配置为10-20G。
单个REDO文件的大小:单个REDO文件建议为0.5-2G;每个REDO文件最好配置一样的大小。
2.6 安全配置
2.6.1 访问控制
Ø IP白名单和IP**
GaussDB 100 支持配置IP白名单和IP**,对远程客户端进行访问控制。
IP白名单:配置TCP_INVITED_NODES参数,限制只能从指定IP访问数据库。
IP**:配置TCP_EXCLUDED_NODES参数,限制不能从指定IP访问数据库。
IP检测开关:配置TCP_VALID_NODE_CHECKING参数,开启或关闭IP检测功能。
Ø 用户白名单
GaussDB 100 也支持配置用户白名单,建立用户和IP映射关系,对远程客户端进行访问控制。用户白名单:可通过添加zhba.conf有效条目,以限制指定用户只能从限定的IP访问数据库。
2.6.2 SSL连接
GaussDB 100 支持通过SSL加密客户端和服务器之间、主机和备机之间的通讯,为敏感数据在Internet上的传输提供了一种安全保障手段。需要从CA认证中心申请到正式的服务器、客户端的证书和密钥。
SSL开销主要在建立连接上,需要使用连接池避免频繁建立连接。
2.6.3 用户管理
数据库用户(USER) 主要用途是连接数据库、访问数据库对象和执行SQL语句。
角色(ROLE)是一组权限(系统权限和对象权限)的集合,不具有登录数据库并执行SQL语句的能力。
可以使用角色(ROLE)进行权限组织及划分,角色赋予用户,则用户具有了此角色的所有权限。
系统默认用户 | 描述 |
SYS | 数据库初始超级管理员用户,具有数据库的最高权限,并且具有所有的系统权限和对象权限,建议数据库安装后及时修改SYS初始密码。 |
PUBLIC | 系统预置的公共用户(无法登录数据库),它表示所有数据库用户的集合。如果某个权限赋于了PUBLIC,那么所有数据库的用户都可以有这个权限。为了保障数据库的数据安全,请勿向PUBLIC用户授予对象权限。 |
系统默认角色 | 描述 |
DBA | 系统管理员角色,拥有系统所有权限。建议用户限制赋予其他用户DBA角色。 |
RESOURCE | 创建基础对象的角色,拥有CREATE PROCEDURE、CREATE SEQUENCE、CREATE TABLE和CREATE TRIGGER共4种权限。 |
CONNECT | 连接角色,拥有CREATE SESSION权限。 |
STATISTICS | 具有创建、删除、查看WSR快照、生成WSR报告的权限。 |
2.6.4 账户安全策略
create profile为用户创建安全策略。
alter profile为用户修改安全策略。
drop profile为用户删除安全策略。
支持的安全策略如下:
参数名 | 描述 | 取值 |
FAILED_LOGIN_ATTEMPTS | 帐户被锁定之前所允许尝试登录的最大次数。 | 默认值:10次 |
PASSWORD_LIFE_TIME | 指用户密码所允许使用的天数 | 默认值:180天 可以设置分数,例如1分钟 =(1/1440)天,(1秒钟=1/86400)天。 |
PASSWORD_LOCK_TIME | 指定登录尝试失败次数到达后帐户的锁定时间 | 默认值:1天,可设置分数 |
PASSWORD_GRACE_TIME | 指定宽限天数,数据库发出警告到登录失效前的天数。 | 默认值:7天,可设置分数 |
PASSWORD_REUSE_TIME | 指定密码在多少天内不能重复使用。 | 默认值: UNLIMITED没有限制 ,可设置分数 |
PASSWORD_REUSE_MAX | 指密码经过多少次变更之后才可以重用 | 默认值: UNLIMITED没有限制 |
SESSIONS_PER_USER | 用户会话最大连接数 | 默认值: UNLIMITED没有限制 |
2.6.5 权限管理
Ø 系统中的权限
系统权限:是指用户进行创建、删除、更改、查询对象和其他如登录、授权等操作的能力。
对象权限:是指对数据库对象执行各种操作的权限,对象权限包括SELECT、INSERT、UPDATE、DELETE等。
Ø 通过角色继承权限:
当给一组权限相同的用户授权时,不需对这些用户逐一授权;
通过将角色赋给一个用户可使得该用户拥有这个角色中的所有权限;
一个用户可以属于不同的角色,拥有不同角色的权限;
2.6.6 安全审计
GaussDB 100支持将用户对数据库的所有操作写入审计日志。
数据库管理员可以利用这些日志信息,重现导致数据库现状的一系列事件,找出非法操作的用户、时间和内容等。
各审计项的参数支持动态加载,在数据库运行期间修改审计开关的值,不需要重启数据库便可生效。
配置项 | 描述 |
AUDIT_LEVEL | 审计开关,设置审计日志的级别,默认值为3,表示DDL及DCL审计打开。 |
_AUDIT_MAX_FILE_SIZE | 单个日志文件大小,默认单位为字节,默认值为10M。 |
_AUDIT_BACKUP_FILE_COUNT | 备份日志文件的最大个数,默认值为10,最大值不能超过128。 |
_LOG_FILE_PERMISSIONS | 日志文件权限,默认值为600。备份日志文件权限会自动去除写权限(拥有者、群组、其他)。 |
_LOG_PATH_PERMISSIONS | 日志目录权限,默认值为700。可影响run日志、debug日志和audit日志本层及上层目录,alarm日志本层目录的权限。 |
通过设置AUDIT_LEVEL参数,开启审计功能,默认值为3,表示审计DDL和DCL级别。
日志类型 | 审计范围 | 十进制取值 | 二进制取值 |
DDL | 数据库对象的创建、修改、删除,包括:表、索引、视图、同名词、数据库、序列、用户、角色、表空间、profile、会话等 | 1 | 00000001 |
DCL | 设置或更改数据库事务、用户权限、锁表等 | 2 | 00000010 |
DML | 对数据库表中的数据进行操作,如插入、更新、删除,也包括查询审计 | 4 | 00000100 |
PL | 对存储过程的解析与执行进行审计,如EXECUTE(可简写为EXEC)与CALL等操作的调用。 | 8 | 00001000 |
ALL | 审计所有项 | 255 | 11111111 |
技术建议:
1.根据业务需要选择安全配置。
2. SSL要用连接池,对传输性能会有10%左右的性能损失。
2.7 内核其他配置
2.7.1 回收站和闪回
如果开启了回收站,truncate和drop表会把数据保留到回收站中,支持数据flashback。如果希望彻底删除可以在truncate和drop命令上使用purge或者直接用purge命令清空回收站。
Ø 基于时间点的闪回
基于时间点的闪回依赖回滚段保留时间和回滚段的大小,如果回滚段的数据已经被覆盖了,那么闪回会报错。
技术建议:
1.要特别注意,回收站对truncate也生效。
2.如果开启回收站,注意定期清理回收站。表空间满了会覆盖回收站中最老的内容。
3.基于时间点的闪回依赖回滚表空间保留时间和回滚表空间的大小。
2.7.2 WSR任务
WSR定时主任务默认每30分钟收集一次快照,收集系统、SQL、Segement、LongSQL等数据;准实时任务默认每30秒收集一次快照,收集session、事务、锁等数据。
默认保留两天的快照,每天凌晨删除过期快照,实际最多保留三天的数据,平均每个快照大约50M。
WSR提供了系统级、SQL级、会话级和Segment级的性能统计数据,还提供了每30秒的关键资源的快照信息,可以分析出绝大部分性能问题。
技术建议:
1.根据需要修改WSR的配置,需要预留足够的空间保留快照数据。
2.WSR报告是性能问题分析的重要工具,建议开启该功能。
- 点赞
- 收藏
- 关注作者
评论(0)