云服务器内容精选

  • 获取驱动链接-公网地址 登录CCE控制台。 创建节点,在节点规格处选择要创建的GPU节点,选中后下方显示的信息中可以看到节点的GPU显卡型号。 登录到nvidia网站。 如图2所示,在“NVIDIA驱动程序下载”框内选择对应的驱动信息。其中“操作系统”必须选Linux 64-bit。 图2 参数选择 驱动信息确认完毕,单击“搜索”按钮,会跳转到驱动信息展示页面,该页面会显示驱动的版本信息如图3,单击“下载”到下载页面。 图3 驱动信息 获取驱动软件链接方式分两种: 方式一:如图4,在浏览器的链接中找到url=/tesla/470.103.01/NVIDIA-Linux-x86_64-470.103.01.run的路径,补齐全路径为https://us.download.nvidia.com/tesla/470.103.01/NVIDIA-Linux-x86_64-470.103.01.run,该方式节点需要绑定EIP 。 方式二:如图4,单击“下载”按钮下载驱动,然后上传到OBS,获取软件的链接,该方式节点不需要绑定EIP。 图4 获取链接
  • 约束与限制 下载的驱动必须是后缀为“.run”的文件。 仅支持Nvidia Tesla驱动,不支持GRID驱动。 安装或重装插件时,需要保证驱动下载链接正确且可正常访问,插件对链接有效性不做额外校验。 gpu-device-plugin插件仅提供驱动的下载及安装脚本执行功能,插件的状态仅代表插件本身功能正常,与驱动是否安装成功无关。 如您使用A100/A800的多GPU卡机型,您需要手动安装与版本驱动对应的nvidia-fabricmanager服务才可以正常使用,详情请参见安装nvidia-fabricmanager服务。
  • 安装插件 登录U CS 控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”。 在“可安装插件”中找到gpu-device-plugin,单击“安装”。 在安装插件页面,填写插件配置。 插件规格:可配置“默认”或“自定义”规格,请根据实际情况选择。 容器:选择“自定义”规格时支持设置。 Nvidia驱动:您可使用CCE提供的驱动地址或手动填写自定义Nvidia驱动的地址,集群下全部GPU节点将使用相同的驱动。 GPU虚拟化功能仅支持470.57.02、470.103.01、470.141.03、510.39.01、510.47.03版本的GPU驱动。 建议您使用CCE提供的驱动地址,以满足驱动版本的要求。 如果下载链接为公网地址,例如地址为nvidia官网地址https://us.download.nvidia.com/tesla/470.103.01/NVIDIA-Linux-x86_64-470.103.01.run,则各GPU节点均需要绑定EIP。获取驱动链接方法请参考获取驱动链接-公网地址。 若下载链接为OBS上的链接,无需绑定EIP 。获取驱动链接方法请参考获取驱动链接-OBS地址。 请确保Nvidia驱动版本与GPU节点适配。 更改驱动版本后,需要重启节点才能生效。 对于linux 5.x内核系统,如华为云欧拉操作系统 2.0或ubuntu 22.04,建议使用470及以上版本驱动。 图1 安装gpu-device-plugin 驱动选择:若您不希望集群中的所有GPU节点使用相同的驱动,CCE支持以节点池为单位安装不同的GPU驱动。 插件将根据节点池指定的驱动版本进行安装,仅对节点池新建节点生效。 新建节点更新驱动版本后,需重启节点生效。非新建节点不支持更新驱动版本。 插件卸载会自动删除已安装的GPU驱动。 GPU虚拟化:选择开启GPU虚拟化,支持GPU单卡的算力、显存分割与隔离。 若集群中未安装volcano插件,将不支持开启GPU虚拟化,您可单击“一键安装”进行安装。如需配置volcano插件参数,请单击“自定义安装”,详情请参见volcano。 若集群中已安装volcano插件,但插件版本不支持使用GPU虚拟化,您可单击“一键升级”进行升级。如需配置volcano插件参数,请单击“自定义升级”,详情请参见volcano。 单击“安装”,安装gpu-device-plugin插件的任务即可提交成功。
  • 安装nvidia-fabricmanager服务 A100/A800 GPU支持 NvLink & NvSwitch,若您使用多GPU卡的机型,需额外安装与驱动版本对应的nvidia-fabricmanager服务使GPU卡间能够互联,否则可能无法正常使用GPU实例。 本文以驱动版本470.103.01为例,您可参考以下步骤进行安装,请根据实际情况需要替换驱动版本。 登录需要安装nvidia-fabricmanager服务的GPU节点,该节点需绑定EIP用以下载nvidia-fabricmanager服务。 安装与驱动版本对应的nvidia-fabricmanager服务,您可通过官方下载操作系统和驱动版本对应的安装包。 CentOS操作系统 以CentOS 7为例: driver_version=470.103.01 wget https://developer.download.nvidia.cn/compute/cuda/repos/rhel7/x86_64/cuda-drivers-fabricmanager-${driver_version}-1.x86_64.rpm rpm -ivh nvidia-fabric-manager-${driver_version}-1.x86_64.rpm Ubuntu等其他操作系统 以Ubuntu 18.04为例: driver_version=470.103.01 driver_version_main=$(echo $driver_version | awk -F '.' '{print $1}') wget https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu1804/x86_64/nvidia-fabricmanager-${driver_version_main}_${driver_version}-1_amd64.deb dpkg -i nvidia-fabricmanager-${driver_version_main}_${driver_version}-1_amd64.deb 启动nvidia-fabricmanager服务。 systemctl enable nvidia-fabricmanager systemctl start nvidia-fabricmanager 查看nvidia-fabricmanager服务状态。 systemctl status nvidia-fabricmanager
  • 注意事项 plpgsql为内置插件,不允许卸载。 decoderbufs, wal2json等逻辑复制插件可以直接使用,不需要安装。 部分插件依赖“shared_preload_libraries”参数,只有在加载相关库之后,才能安装成功。 pg_cron插件当前仅支持PostgreSQL 12(12.11.0及其以上版本)、PostgreSQL 13及以上版本。使用时需要先修改参数“cron.database_name”为需要使用的数据库(仅支持单个数据库),同时修改“cron.use_background_workers”为“on”。 pltcl插件在PostgreSQL 13.2版本实例暂不支持使用,如需使用该插件,请先升级到最新小版本。 部分插件安装或卸载时,会同步安装或卸载其依赖插件,以及相关依赖表。例如:创建插件postgis_sfcgal时,需要先创建postgis插件,这时会同步创建postgis_sfcgal插件;同时,卸载postgis插件时,会同步卸载postgis_sfcgal插件。 部分插件在小版本升级后不支持直接升级,如需升级请卸载后重新安装。
  • SQL审计功能验证 执行sql语句。 create table t1 (id int); insert into t1 values (1); select * from t1; id ---- 1 (1 rows) 在界面上通过“SQL审计”页签进行审计日志下载。 审计日志包含以下内容: AUDIT: OBJECT,1,1,READ,SELECT,TABLE,public.t1,select * from t1; AUDIT:表示这是一个审计日志条目。 OBJECT:表示这是一个对象级别的审计日志。 第一个1:表示对象的 ID。 第二个1:表示对象的子 ID。 READ:表示这是一个读取操作。 SELECT:表示这是一个 SELECT 查询。 TABLE:表示对象类型是表。 public.t1:表示表的名称和模式。 select * from t1:表示执行的 SQL 查询语句。
  • 支持版本说明 PostgreSQL 12及以上版本的最新小版本支持该插件。可通过以下SQL语句查询当前实例是否支持该插件: SELECT * FROM pg_available_extension_versions WHERE name = 'pgaudit'; 如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。 RDS PostgreSQ L实例 支持的插件,具体请参见支持的插件列表。
  • 基本使用 设置pgaudit扩展 首先需要在插件管理中预加载pgaudit插件,因为pgaudit扩展会安装用于审核数据定义语言 (DDL) 语句的事件触发器。 默认插件管理中已预加载pgaudit插件,也可通过如下命令查看是否加载成功。 show shared_preload_libraries; shared_preload_libraries --------------------------------------------------------------------------------- pg_stat_statements,pgaudit,passwordcheck.so,pg_sql_history,auth_delay,pglogical (1 row) 加载成功后再进行创建插件,请参考插件安装/卸载。 插件安装好后,需要开启审计日志。 如需开通审计日志功能,请联系客服申请。 在控制台上单击实例名称,在概览页面,选择“SQL审计”页签。 单击“设置SQL审计”。 在弹框中,开启审计日志开关,可选择审计日志保留天数。 图1 设置SQL审计 开启审计日志后,还需要配置参数。 在界面“参数修改”页签,搜索“pgaudit.log”参数(指定会话审计日志将记录哪些类型的语句)并设置为适合业务需要的值,可以捕获对日志的插入、更新、删除和其他一些类型的更改。“pgaudit.log”参数取值如下: 表1 参数值说明 参数值 描述 none 这是原定设置值。不记录任何数据库更改。 all 记录所有内容(read、write、function、role、ddl、misc)。 ddl 记录所有数据定义语言(DDL)语句(不包括在 ROLE 类中)。 function 记录函数调用和DO块。 misc 记录其他命令,例如:DISCARD、FETCH、CHECKPOINT、VACUUM、SET read 当源为关系(例如表)或查询时记录SELECT和COPY。 role 记录与角色和权限相关的语句,例如:GRANT、REVOKE、CREATE ROLE、ALTER ROLE、DROP ROLE write 当目标为关系(表)时,记录INSERT、UPDATE、DELETE、TRUNCATE和COPY。 pgaudit还有一些参数,可根据业务需要在界面上进行设置。 表2 参数说明 参数名称 描述 pgaudit.log 指定会话审计日志记录将记录哪些类的语句。 pgaudit.log_catalog 指定在语句中的所有关系都在pg_catalog中的情况下,应该启用会话日志记录。 pgaudit.log_client_authentication 控制是否记录用户认证的信息。 pgaudit.log_extra_field 控制是否记录PID、IP、用户名、数据库等字段。 pgaudit.log_file_rotation_age 设置独立审计日志的轮转时间。 pgaudit.log_parameter 指定审核日志记录应该包含与语句传递的参数。 pgaudit.log_relation 指定会话审核日志记录是否应该为SELECT或DML语句中引用的每个关系(表、视图等)创建单独的日志项。 pgaudit.log_rows 指定审计日志记录应包括语句检索或影响的行。 pgaudit.log_write_txid 控制是否记录写操作(insert/update等)的txid。 pgaudit.logstatementonce 指定日志记录是否包含语句、文本和参数。 pgaudit.log_client 指定审计日志是否发送到客户端。 pgaudit.log_level 指定用于日志条目的日志级别。 pgaudit.write_into_pg_log_file 控制是否仍旧向PostgreSQL的运行日志记录审计信息。 如果您需要在客户端上显示审计日志,可以通过修改以下参数进行配置: “pgaudit.write_into_pg_log_file”和“pgaudit.log_client”参数值同时为on,再根据“pgaudit.log_level”参数选择客户端显示的日志级别(例如notice),客户端再次进行查询时,可以在客户端显示对应级别的审计日志。 “pgaudit.write_into_pg_log_file”和“pgaudit.log_client”参数只要有一个值为off,客户端不会显示审计日志。 “pgaudit.log_level”仅在“pgaudit.log_client”打开时启用。
  • 视图接口说明 表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会导致实例不稳定,对此,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 PostgreSQL实例支持的插件,具体可参见支持的插件列表。
  • 函数接口说明 表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:新的最大等待时间。
  • 绑定变量的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;
  • 创建规则 同一个数据库中,不能创建重复(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限流。
  • 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。