云服务器内容精选

  • 视图接口说明 表3 视图接口说明 序号 视图 列 说明 1 rds_pg_sql_ccl.get_all_enabled_rule dbid oid, queryid bigint, max_concurrency int, max_wait int 查看所有生效的限流规则。 2 rds_pg_sql_ccl.get_activity_query_status queryid bigint, wait_start_time timestamptz, pid int, dbid oid 查看当前实例每个SQL的运行状态(queryid,是否等待等)。 3 rds_pg_sql_ccl.get_current_db_ccl_rule rule_id bigint, query_id bigint , query_string, max_concurrency int, max_waiting int, search_path text, create_time timestamptz, enabled bool 查看当前数据库创建的限流规则(不一定生效)。
  • 绑定变量的SQL限流 JDBC等驱动支持prepare statement,对参数化SQL进行预编译,在输入参数后实际执行SQL。在pg_stat_statements视图中会以绑定变量的方式呈现。对于参数是绑定变量的SQL,内核计算的query id值与参数为实际值的SQL不一致,因此无法直接通过添加SQL语句方式进行限流。 对于这类SQL而言,只能通过实际执行后手动添加的方式进行限流。 首先实际执行一次带绑定变量的SQL,这样内核会计算其query id。基于JDBC的prepare statement程序示例如下: String sql = "select pg_sleep(?);"; PreparedStatement preparedStatement = conn.prepareStatement(sql); preparedStatement.setInt(1, 500); ResultSet resultSet = preparedStatement.executeQuery(); 而后在pg_stat_statements视图可以查询到该SQL的query id。 select queryid from pg_stat_statements where query like '%select pg_sleep%'; 通过查询到的query id添加限流规则。 select rds_pg_sql_ccl.add_ccl_rule_by_queryid($queryid); 通过上一条SQL的返回值(rule_id)使该规则生效。 select rds_pg_sql_ccl.enable_ccl_rule($rule_id); 从插件提供的get_all_enabled_rule视图可以获取到当前所有生效的限流规则。 select * from rds_pg_sql_ccl.get_all_enabled_rule;
  • 函数接口说明 表2 函数接口说明 序号 函数名 参数 返回值 功能 1 rds_pg_sql_ccl.get_query_id query_string text, search_path text default 'public' queryid 计算SQL的queryid。 2 rds_pg_sql_ccl.add_ccl_rule_by_query query_string text, max_concurrency int default 0, max_waiting int default 0, search_path text default 'public' ruleid 通过SQL语句添加限流规则。 3 rds_pg_sql_ccl.add_ccl_rule_by_queryid query_id bigint, max_concurrency int default 0, max_waiting int default 0, search_path text default 'public' ruleid 通过queryid添加限流规则。 5 rds_pg_sql_ccl.enable_ccl_rule rule_id bigint bool 通过ruleid让限流规则生效。 6 rds_pg_sql_ccl.disable_ccl_rule rule_id bigint bool 通过ruleid让限流规则失效。 7 rds_pg_sql_ccl.disable_all_ccl_rule - void 让所有限流规则失效。 8 rds_pg_sql_ccl.delete_ccl_rule rule_id bigint void 通过ruleid删除限流规则。 9 rds_pg_sql_ccl.update_ccl_rule new_rule_id bigint, new_max_concurrency int, new_max_waiting int void 通过ruleid更新限流规则。 部分参数说明: max_concurrency:最大并发数,并发执行该类型SQL的最大数量。 max_wait:最大等待时间,达到最大并发数之后,该类型的新SQL的最大等待时间,超过这个时间,则执行失败。 new_max_concurrency:新的最大并发数。 new_max_wait:新的最大等待时间。
  • 创建规则 同一个数据库中,不能创建重复(query id相同)的限流规则;不同的数据库中,可以创建重复的限流规则。 规则创建后不会立刻生效,需要调用enable_ccl_rule函数让规则生效。 get_query_id函数获取不到绑定变量的SQL的queryid,add_ccl_rule_by_query限制不了绑定变量SQL。 绑定变量SQL的queryid可以通过pg_stat_statements插件获取,之后可以通过add_ccl_rule_by_queryid创建规则,可参考后续绑定变量SQL限流。
  • 简介 高并发和消耗资源过多的SQL会导致实例不稳定,对此,RDS for PostgreSQL提供了限流能力,是由华为云自研插件rds_pg_sql_ccl实现,其中ccl是concurrent control的缩写,合理地使用SQL限流可以保障实例的稳定性,可以很好地做到性能优化和资源保护,应对的场景有: 业务量突增:通过限制某类SQL的执行保障实例的稳定性。 保障核心任务:通过限制其他SQL的执行从而降低资源的消耗保障核心任务的顺利完成。 该插件提供了两种限流方式: 方式1: 限制同一时刻同时执行SQL数量( 由rds_pg_sql_ccl.max_concurrent_sql参数控制,默认值为-1,即不限制)。 方式2: 限制某一类SQL(query id相同)同一时刻并发执行的数量,由限流规则控制,限流规则见下文。
  • 支持的版本 PostgreSQL16.2, 15.4, 14.8, 13.11, 12.15, 11.20及以上的最新小版本支持该插件。可通过以下SQL语句查询当前实例是否支持该插件: SELECT * FROM pg_available_extension_versions WHERE name = 'rds_pg_sql_ccl'; 如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。 RDS for PostgreSQ L实例 支持的插件,具体可参见支持的插件列表。
  • URI URI格式 GET /v3/{project_id}/instances/{instance_id}/extensions?database_name={database_name}&offset={offset}&limit={limit} 参数说明 表1 参数说明 名称 是否必选 说明 project_id 是 租户在某一Region下的项目ID。 获取方法请参见获取项目ID。 instance_id 是 实例ID。 database_name 是 数据库名称。 offset 否 索引位置,偏移量。从第一条数据偏移offset条数据后开始查询,默认为0(偏移0条数据,表示从第一条数据开始查询),必须为数字,不能为负数。 limit 否 查询记录数。默认为100,不能为负数,最小值为1,最大值为100。
  • 响应消息 正常响应要素说明 表2 要素说明 名称 参数类型 说明 extensions Array of objects 插件列表信息。 详情请参见表3。 total_count Integer 总插件数。 表3 extensions元素结构说明 名称 参数类型 说明 name String 插件名称。 database_name String 数据库名称。 version String 插件版本。 version_update String 可更新的插件版本。如果和version字段值不一致,说明插件可更新。 shared_preload_libraries String 依赖预加载库。 created Boolean 插件是否已创建。 description String 插件描述。 正常响应样例 { "extensions" : [ { "name" : "pg_cron", "database_name" : "db1", "version" : "1.0", "version_update" : "1.0", "shared_preload_libraries" : "pg_cron", "created" : false, "description" : "pg_cron access method - signature file based index" }, { "name" : "dblink", "database_name" : "db1", "version" : "1.2", "version_update" : "1.2", "shared_preload_libraries" : "", "created" : false, "description" : "connect to other PostgreSQL databases from within a database" } ], "total_count" : 2 } 异常响应 请参见异常请求结果。
  • 名词解释 插件:是包含函数、连接器、公共库的聚合。插件有自定义插件和商业插件两种类型,其中,自定义的插件可以在集市中显示,也可以在剧本中使用。 插件集:是具有相同业务场景的插件集合。 函数:是可以在剧本中选用的执行函数,在剧本中执行特定的行为。 连接器:是用于连接数据源,将告警、事件等安全数据接入 安全云脑 ,包括事件触发和定时触发两种连接器类型。 公共库:是一个公共模块,包含在其他组件中会使用到的API调用和公共函数。
  • 支持的版本说明 PostgreSQL 12及以上版本的最新小版本支持该插件。可通过以下SQL语句查询当前实例支持该插件的版本: SELECT * FROM pg_available_extension_versions WHERE name = 'pg_cron'; 如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。 RDS for PostgreSQL实例支持的插件,具体请参见支持的插件列表。
  • 插件介绍 标准cron语法,*表示每个时间段运行,特定数字表示仅在此时间。 ┌───────────── min (0 - 59) │ ┌────────────── hour (0 - 23) │ │ ┌─────────────── day of month (1 - 31) │ │ │ ┌──────────────── month (1 - 12) │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to │ │ │ │ │ Saturday, or use names; 7 is also Sunday) │ │ │ │ │ │ │ │ │ │ 例如每周六9:30 AM(GMT)的语法为: 30 9 * * 6
  • 注意事项 pg_cron需要后台守护进程,因此启动数据库前,需要将pg_cron放到shared_preload_libraries中。 定时任务不会在备机上运行,但当备机升主后,定时任务会自动启动。 定时任务会以任务创建者的权限执行。 定时任务使用GMT时间执行。 一个实例可以并行运行多个任务,但同一时间某个任务仅能运行一个。 某个任务,需要等待前一个定时任务结束,那么该任务会进入等待队列,且会在前一个任务结束后尽快启动。 使用前,需要将cron.database_name修改为创建定时任务的数据库,并且只能设为单个数据库,不支持设置多个数据库。
  • 操作场景 服务Operator是OSC管理的最大粒度实体,服务运行载体是一个Operator,当服务对应的服务实例首次安装时,容器集群中如果没有对应的服务Operator,OSC会自动安装。 OSC将在首次部署服务的集群中创建三个新的命名空间osc-global、osc-oc、osc-system,并运行Operator或Helm插件。例如,Redis服务将在osc-global命名空间中部署一个redis-operator插件,这个插件就是Redis服务的管理插件。
  • 安装插件 安装E-Backup插件后,请谨慎卸载,否则可能导致已有的备份无法恢复。因为E-Backup插件在执行备份恢复任务时,依赖自定义资源BackupStorageLocation及其Secret,该资源在卸载后重新安装会发生更改。 登录集群控制台。 在左侧导航栏中单击“插件管理”,在可安装插件栏中单击E-Backup插件下的“安装”按钮。 参照表1进行插件规格配置。 表1 E-Backup插件规格配置 参数 参数说明 插件规格 单实例部署。 容器 设置插件容器实例的资源配额。 velero:提供K8s元数据备份/恢复支持。 restic:提供应用数据存储卷备份/恢复支持。 说明: 集群中需要预留足够的资源,若资源不足,插件实例将无法调度。 申请值需小于等于限制值,否则无法成功创建。 请根据备份/恢复数据量大小,适当调整资源限制以避免插件故障。 进行参数配置,当前支持配置以下参数。 volumeWorkerNum:代表并发执行数据卷备份的工作数量,默认为3。 { "volumeWorkerNum": 3 } 单击“安装”后,返回“插件管理”页面查看已安装插件,插件状态为“运行中”,表明该插件已在当前集群中安装成功。
  • 约束与限制 目标集群Kubernetes版本需为1.15及以上,且集群中至少包含一个可用节点。 集群在安装插件时,需要保证集群可正常拉取SWR镜像。 备份/恢复过程中,需尽量保证集群处于稳态,不要触发增、删、改等变更行为,以免出现备份/恢复失败或不完整的情况。若集群发生变更,建议等15分钟后,集群处于稳态,再做备份操作。 E-Backup插件集成开源的Restic组件完成PV数据备份,会对备份时间点的数据做自有快照,并上传数据,不影响用户后续数据的读写,但Restic不进行文件内容的校验和业务一致性校验,其特性遵循restic约束。 Restic组件占用内存大小与初次备份的PV卷数据大小有关。若PV卷数据大于300G,建议采用 云存储 提供的迁移方式。若使用应用数据管理功能迁移大量PV数据,可修改restic实例的资源配额,具体操作方式请参见修改插件资源配额。 E-Backup插件遵循开源Velero和Restic插件的约束,例如在恢复过程中Service会清除ClusterIP以适应源集群和目标集群间的差异。 若在CCE集群中使用了扩展加密的Secret类型(cfe/secure-opaque),在恢复到其他集群时,需要提前手动创建同名、同类型的Secret(不同集群加解密物料不同),以免恢复的应用无法成功运行。