云服务器内容精选
-
约束与限制 2020年7月1日之前购买的RabbitMQ实例,不支持在控制台开启插件,如果需要开启,请在控制台提工单,技术人员在后台开启插件。 2020年11月14日之前购买的RabbitMQ实例,不支持在控制台开启rabbitmq_consistent_hash_exchange插件,如果需要开启,请在控制台提工单,技术人员在后台开启插件。 开启插件过程中,不会重启实例。 rabbitmq_shovel和rabbitmq_federation插件在特定场景下才支持开启,具体如表2所示。 表2 支持开启插件的场景 实例 rabbitmq_shovel rabbitmq_federation 未开启SSL的单机实例 支持 支持 已开启SSL的单机实例 不支持 不支持 未开启SSL的集群实例 不支持 支持 已开启SSL的集群实例 不支持 不支持
-
timescaledb插件不支持的部分接口 add_compress_chunks_policy add_drop_chunks_policy add_reorder_policy alter_job_schedule compress_chunk decompress_chunk drop_chunks interpolate locf move_chunk remove_compress_chunks_policy remove_drop_chunks_policy remove_reorder_policy reorder_chunk set_integer_now_func time_bucket_gapfill
-
插件说明 postgis 创建postgis插件时,会同步创建以下插件: postgis postgis_topology fuzzystrmatch postgis_tiger_geocoder address_standardizer address_standardizer_data_us 创建的postgis插件版本如果大于等于3.0.0,创建postgis插件时会同步创建postgis_raster插件。 创建postgis_topology和postgis_tiger_geocoder插件,会更改search_path。search_path对已经建立的连接不会更新,如果需要使用这两个插件功能,需要重新建立连接更新search_path设置。 plpgsql plpgsql 1.0插件支持提供SQL过程语言,默认内置安装,无需手动创建该插件。 earthdistance 安装earthdistance插件前,请先安装cube插件。 cube 如果已安装earthdistance插件,删除cube插件会导致earthdistance插件不可用。 timescaledb RDS for PostgreSQL的timescaledb插件不支持tsl协议的特性,具体请参见timescaledb插件不支持的部分接口。 wal2json 该插件是逻辑复制插件,您可以直接使用该插件,不需要通过control_extension安装。 该插件不能通过pg_available_extensions查询,查看是否支持wal2json插件可通过如下语句确认,执行不报错说明支持wal2json插件。 select pg_create_logical_replication_slot('tst_wal2json', 'wal2json'); 该条语句执行成功后,需要删除slot,否则会导致wal日志积压。 select pg_drop_replication_slot('tst_wal2json'); pg_profile_pro 因发现插件存在缺陷,现暂时关闭支持,我们会在缺陷修复后重新开放,给您造成不便敬请谅解。
-
约束与限制 目标集群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(不同集群加解密物料不同),以免恢复的应用无法成功运行。
-
安装插件 安装E-Backup插件后,请谨慎卸载,否则可能导致已有的备份无法恢复。因为E-Backup插件在执行备份恢复任务时,依赖自定义资源BackupStorageLocation及其Secret,该资源在卸载后重新安装会发生更改。 登录集群控制台。 在左侧导航栏中单击“插件管理”,在可安装插件栏中单击E-Backup插件下的“安装”按钮。 参照表1进行插件规格配置。 表1 E-Backup插件规格配置 参数 参数说明 插件规格 单实例部署。 容器 设置插件容器实例的资源配额。 velero:提供K8s元数据备份/恢复支持。 restic:提供应用数据存储卷备份/恢复支持。 说明: 集群中需要预留足够的资源,若资源不足,插件实例将无法调度。 申请值需小于等于限制值,否则无法成功创建。 请根据备份/恢复数据量大小,适当调整资源限制以避免插件故障。 进行参数配置,当前支持配置以下参数。 volumeWorkerNum:代表并发执行数据卷备份的工作数量,默认为3。 { "volumeWorkerNum": 3 } 单击“安装”后,返回“插件管理”页面查看已安装插件,插件状态为“运行中”,表明该插件已在当前集群中安装成功。
-
插件简介 E-Backup是云原生存储系统(Everest2.0)中负责云原生应用数据保护的子系统。它支持用户将应用数据(k8s资源)和业务数据(pv卷中的数据)备份到OBS桶中,也允许用户将某次备份数据恢复到指定的K8s集群中。 E-Backup通过备份和恢复两个子功能提供对以下使用场景的支持: 单集群下的容灾 周期性地对集群内部署的应用进行备份,在集群或者应用被破坏时通过恢复功能将应用重新部署到集群中,继续向外提供服务,实现应用的容灾。 同集群/跨集群的克隆 对于需要大批量部署到多个集群中的应用,特别是应用已经在某个集群工作一段时间后需要增添实例的情况。首先对处于工作状态的应用进行备份,随后恢复到同集群的不同Namespace下或者其他集群中,实现应用的克隆。 跨集群/跨云的迁移 由于网络、成本、业务地点变动等原因,需要将应用从某个集群迁移到跨Region的另一个集群,或者从其他云的集群迁入CCE。对迁出集群中的应用进行备份,而后恢复到迁入集群中,实现应用的迁移。
-
注意事项 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插件。 部分插件在小版本升级后不支持直接升级,如需升级请卸载后重新安装。
-
请求签名 func(map[string]string) interface{} 入参:性能测试服务内置参数以及自定义参数。 出参:interface需实现IResultV1接口,如有必要,请使用性能测试服务提供的IResultV1接口实现。 表1 性能测试服务内置参数 名称 含义 补充说明 __name 请求名称 - __goroutine_id 协程id - __executor_index 执行机索引 序号从0开始。 __executor_count 执行机总数 -
-
IResultV1接口实现 package main import ( "fmt" "time" ) const ( InnerVarName = "__name" InnerVarGoroutineId = "__goroutine_id" InnerVarExecutorIndex = "__executor_index" InnerVarExecutorCount = "__executor_count" ) type IResultV1 interface { GetName() string GetUrl() string GetMethod() string GetRequestHeader() map[string]string GetRequestBody() string GetSentBytes() int GetResponseCode() int GetResponseHeader() map[string]string GetResponseBody() string GetReceivedBytes() int GetFailureMessage() string IsSuccess() bool GetBeginTime() int64 GetEndTime() int64 GetSubResults() []interface{} } //acquireResult generates root result. //just call one time on the main func and generate sub result using parent.addSub() func acquireResult(name string) *Result { result := &Result{} result.Name = name result.RequestHeader = map[string]string{} result.ResponseHeader = map[string]string{} result.ResponseCode = 200 result.Success = true result.BeginTime = time.Now().UnixMilli() result.EndTime = time.Now().UnixMilli() return result } type Result struct { Name string Url string Method string RequestHeader map[string]string RequestBody string SentBytes int ResponseCode int ResponseHeader map[string]string ResponseBody string ReceivedBytes int FailureMessage string Success bool BeginTime int64 EndTime int64 SubResults []interface{} SubIndex int } func (r *Result) GetName() string { return r.Name } func (r *Result) GetUrl() string { return r.Url } func (r *Result) GetMethod() string { return r.Method } func (r *Result) GetRequestHeader() map[string]string { return r.RequestHeader } func (r *Result) GetRequestBody() string { return r.RequestBody } func (r *Result) GetSentBytes() int { return r.SentBytes } func (r *Result) GetResponseCode() int { return r.ResponseCode } func (r *Result) GetResponseHeader() map[string]string { return r.ResponseHeader } func (r *Result) GetResponseBody() string { return r.ResponseBody } func (r *Result) GetReceivedBytes() int { return r.ReceivedBytes } func (r *Result) GetFailureMessage() string { return r.FailureMessage } func (r *Result) IsSuccess() bool { return r.Success } func (r *Result) GetBeginTime() int64 { return r.BeginTime } func (r *Result) GetEndTime() int64 { return r.EndTime } func (r *Result) GetSubResults() []interface{} { return r.SubResults } //begin records begin time, do not forget call this function to update func (r *Result) begin() { r.BeginTime = time.Now().UnixMilli() } //end records end time, do not forget call this function to update func (r *Result) end() { r.EndTime = time.Now().UnixMilli() } //addSub adds sub result to parent, call this function adding sub result always. //if name is not empty, renaming will be disabled func (r *Result) addSub(name string) *Result { if name == "" { name = fmt.Sprintf("%s-%d", r.Name, r.SubIndex) r.SubIndex++ } else { name = fmt.Sprintf("%s-%s", r.Name, name) } sub := acquireResult(name) r.SubResults = append(r.SubResults, sub) return sub } 表2 IResultV1接口结构说明表 名称 含义 补充说明 Name 请求名称 根result需使用内置参数__name设置。 Url 请求地址 - Method 方法 用于HTTP的POST,GET等。 RequestHeader 请求头 用于HTTP。 RequestBody 请求数据 建议不要记录请求较大的数据,例如上传文件,仅记录摘要即可。 SentBytes 发送字节数 - ResponseCode 响应码 记录响应状态,可以用于HTTP状态码或者自定义状态码,用于报告统计响应状态数量用于分析。 响应码范围:[100,599] ResponseHeader 响应头 用于HTTP。 ResponseBody 响应数据 建议不要记录响应较大的数据,例如下载文件,仅记录摘要即可。 ReceivedBytes 接收字节数 - FailureMessage 失败信息 - Success 是否成功 - BeginTime 请求开始时间 单位:毫秒 EndTime 请求结束时间 单位:毫秒 SubResults 子请求 当自定义请求需要多个子请求共同完成,需要使用该字段记录各个子请求执行情况。 SubIndex 子请求索引 当使用父Result的addSub方法生成子Result时,如果不为子Result自定义名称,将使用该字段自增产生索引用于生成子Result名称。
-
基本使用 pg_stat_statements插件安装好之后,需要开启对应参数。默认参数配置如下,可根据不同业务进行调整。 表1 参数说明 参数名称 是否需要重启 值 允许值 描述 pg_stat_statements.max 是 5000 100~5,000,000 设置pg_stat_statements跟踪的最大语句数。 pg_stat_statements.save 否 on on,off 保存服务器关闭期间的pg_stat_statements统计信息。 pg_stat_statements.track 否 top top,all,none 控制哪个语句可以被该模块计数。 pg_stat_statements.track_planning 否 off on,off 选择是否由pg_stat_statements跟踪计划持续时间。 pg_stat_statements.track_utility 否 on on,off 选择是否由pg_stat_statements跟踪实用程序命令。 此时,可以通过查询pg_stat_statements视图,获取统计信息。 select * from pg_stat_statements; 查询最耗IO的SQL。 --消耗IO的前五条SQL select userid::regrole, dbid, query from pg_stat_statements order by (blk_read_time+blk_write_time) desc limit 5; 查询最耗共享内存的SQL。 select userid::regrole, dbid, query from pg_stat_statements order by (shared_blks_hit+shared_blks_dirtied) desc limit 5; 重置统计信息。 select pg_stat_statements_reset();
-
进阶使用 使用pg_stat_statements排查CPU过高问题。 为了方便排查CPU过高的问题,需要重置pg_stat_statements的计数器。 select pg_stat_statements_reset(); 等待一段时间,使pg_stat_statements能够统计到足够的信息。 获取最耗时的SQL。 select * from pg_stat_statements order by total_exec_time desc limit 10; 此步骤获取到的SQL会长时间占用用户态CPU时间,把这些SQL取出来分析。 获取读取Buffer次数最多的SQL。 select * from pg_stat_statements order by shared_blks_hit + shared_blks_read desc limit 10; 此步骤获取到的SQL可能由于缺少查询对应的索引,导致过多的buffer读,从而消耗大量CPU。 获取执行次数最多的SQL。 select * from pg_stat_statements order by calls desc limit 10; 有些比较简单的SQL单独执行耗时较低,但是在某些情况下(例如:在事务中循环执行、大量的并发执行)也会导致CPU的消耗增高。
-
支持的版本说明 PostgreSQL 10及以上版本的最新小版本支持该插件。 可通过以下SQL语句查询当前实例是否支持该插件: SELECT * FROM pg_available_extension_versions WHERE name = 'pg_stat_statements'; 如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。 RDS for PostgreSQL实例支持的插件,具体请参见支持的插件列表。
-
插件安装与卸载 查看当前数据库是否有安装pg_stat_statements插件,执行如下SQL: select * from pg_extension where extname = 'pg_stat_statements'; 如果显示结果为空说明未安装该插件,如果显示插件的信息说明已安装该插件。 pg_stat_statements已默认预加载在shared_preload_libraries参数中,直接通过如下方式进行插件安装。 安装插件 SELECT control_extension('create', 'pg_stat_statements'); 删除插件 SELECT control_extension('drop', 'pg_stat_statements'); 更多信息,请参见通过界面安装和卸载插件和通过SQL命令安装和卸载插件。
-
插件安装与卸载 安装插件 SLEECT control_extension('create', 'rds_hwdrs_ddl'); 在安装完该插件后,可以通过查看系统视图查看该插件创建的对象。 -- 查看hwdrs_ddl_info表 select relname, relowner::regrole, relacl from pg_class where relname = 'hwdrs_ddl_info'; relname | relowner | relacl ----------------+----------+------------------------------- hwdrs_ddl_info | root | {root=arwdDxt/root,=ard/root} -- 查看hwdrs_ddl_function函数 select proname, proowner::regrole from pg_proc where proname = 'hwdrs_ddl_function'; proname | proowner --------------------+---------- hwdrs_ddl_function | root (1 row) -- 查看hwdrs_ddl_event触发器 select evtname, evtevent from pg_event_trigger; evtname | evtevent -----------------+----------------- hwdrs_ddl_event | ddl_command_end (1 row) 卸载插件 SELECT control_extension('drop', 'rds_hwrds_ddl'); 更多信息,请参见通过界面安装和卸载插件和通过SQL命令安装和卸载插件。
-
支持版本说明 PostgreSQL 12、 13、14最新的小版本支持该插件。可通过以下SQL语句查询当前实例是否支持该插件: SELECT * FROM pg_available_extension_versions WHERE name = 'pgaudit'; 如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。 RDS PostgreSQL实例支持的插件,具体请参见支持的插件列表。
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格