华为云用户手册

  • 约束与限制 资源发放时默认CN数量为3,用户可以根据实际发放节点数量调整CN数量,范围为2~20。 增删CN节点过程中不允许执行其他运维操作。 增加CN过程会消耗大量的CPU和IO资源,因此会对用户作业性能影响较大,用户应该尽可能在停止业务情况下或业务轻载的情况下执行增加CN操作。 增加CN节点时发生故障且回滚失败,可以重试增加CN操作。删除CN节点不支持回滚。 增加CN失败只能重试增加CN,其他运维操作不允许执行;删除CN失败,只能重试删除CN,其他运维操作不允许执行。 删除CN节点过程中如果有DDL操作,例如创建schema,function等,这些DDL可能会因为找不到被删除的CN节点而报错,业务重试即可成功。 删除CN节点过程中,如果只有一个节点异常,只能删除这个异常的节点;如果有两个及以上节点异常,不能删除CN节点,需要先处理恢复异常的节点后,才能删除CN节点。
  • 操作步骤 方式一: 登录 GaussDB (DWS)管理控制台。 在集群列表中单击指定集群名称旁边的修改符号进行修改。 图1 集群列表修改集群名称 在弹窗中输入新集群名称。 确认无误后,单击“确定”进行集群名称修改。 方式二: 登录GaussDB(DWS)管理控制台。 在集群列表中单击指定集群名称。 进入“集群详情”页面,在“基本信息”模块单击集群名称旁边的修改符号进行修改。 图2 集群详情页面修改集群名称 确认无误后,单击“确定”下发集群修改任务,待任务完成后,集群名称修改成功。
  • 概述 用户使用客户端连接DWS集群时,如果用户仅连接一个CN节点地址,通过该CN节点内网IP或弹性公网IP连接时,只能连接到固定的CN节点上,存在CN单点问题。如果通过内网 域名 或公网域名连接,域名解析服务会对每个客户端随机选择一个内网/公网IP地址,其解析机制并不能保证负载均衡,同样也存在CN单点问题。因此引入了弹性负载均衡服务(Elastic Load Balance,下称ELB)解决集群访问的单点问题。 弹性负载均衡(ELB)是将访问流量根据转发策略分发到后端多台弹性云服务器的流量分发控制服务,可以通过流量分发扩展应用系统对外的服务能力,提高应用程序的容错能力。了解更多,请参见弹性负载均衡。 利用ELB健康检查机制可将集群的CN请求快速转发到正常工作的CN节点上,当有CN故障节点时,也能第一时间切换流量到健康节点上,最大化降低集群访问故障。当前支持同VPC绑定ELB和跨VPC绑定ELB两种类型操作。 该特性仅8.1.1.200及以上集群版本支持。 为保证集群负载均衡和高可用,避免CN单点故障问题,客户生产业务下,要求集群创建后进行ELB绑定。 集群跨VPC绑定ELB时支持绑定与集群VPC不一致的独享型负载均衡。 ELB不支持跨库访问。
  • 约束与限制 绑定ELB时,需创建和GaussDB(DWS)集群相同的区域、VPC以及企业项目的ELB进行绑定。 GaussDB(DWS)的ELB功能仅支持独享型ELB规格,不支持共享型ELB绑定操作。 部分Region因为独享型ELB规格没有上线,所以不支持负载均衡能力。详情可跳转至ELB控制台查看是否支持独享型ELB。 绑定ELB时,需创建TCP网络型且有内网IP的ELB进行绑定。 创建ELB时,ELB规格需要用户按本身业务访问流量评估,建议选取最大规格。GaussDB(DWS)侧仅是绑定关联ELB,并不改变ELB规格。 创建ELB时,仅需创建ELB,无需创建ELB服务的监听器与后端服务器组,GaussDB(DWS)会自动创建所需要的ELB监听器与后端服务器组。 创建ELB时,不能存在与数据库相同端口的监听器,否则会导致ELB绑定失败。 绑定ELB时,GaussDB(DWS)侧默认为ELB服务配置“ROUND_ROBIN”转发策略,并设置10秒的健康检查间隔,50秒超时时间以及3次重试次数。用户如果需要修改此ELB默认参数时,请充分评估影响。 跨VPC绑定ELB时,仅支持独享型负载均衡。 跨VPC绑定ELB时,需检查集群VPC与ELB所属VPC下的子网网段不能重复。 解绑ELB时,GaussDB(DWS)侧会清除ELB中集群相关信息,但并不会删除用户ELB,请注意ELB本身的计费影响,防止不必要的成本支出。 如需要公网IP或者域名访问ELB集群时,请通过ELB服务管理页面进行EIP绑定或者域名操作。 如果集群为IPv4集群,则仅支持绑定IPv4的ELB;如果集群为IPv6双栈集群,则仅支持绑定IPv6双栈的ELB。暂不支持交叉场景的ELB绑定。
  • 拓扑图专业名词解释 表1 集群结构描述 名称 描述 说明 ELB 弹性负载均衡(Elastic Load Balance,简称ELB)是将访问流量根据分配策略分发到后端多台服务器的流量分发控制服务。 用户使用客户端连接GaussDB(DWS)集群时,如果用户仅连接一个CN节点地址,通过该CN节点内网IP或弹性公网IP连接时,只能连接到固定的CN节点上,存在CN单点问题。如果通过内网域名或公网域名连接,域名解析服务会对每个客户端随机选择一个内网/公网IP地址,其解析机制并不能保证负载均衡,同样也存在CN单点问题。因此引入了弹性负载均衡服务(Elastic Load Balance,下称ELB)解决集群访问的单点问题。详情请参见集群绑定和解绑ELB。 EIP 弹性公网IP(Elastic IP,简称EIP)提供独立的公网IP资源,包括公网IP地址与公网出口带宽服务。 可以与弹性云服务器、裸金属服务器、虚拟IP、弹性负载均衡、NAT网关等资源灵活地绑定及解绑。 Ring 安全环,集群内部的故障隔离域,主要作用是故障隔离,环内主机出现故障,故障不会扩散到环外。 如果环内某一单节点故障,所有DN节点在环内都有副本,数据不会丢失。 例如Server1发生故障后,DN1的备节点在Server2上,DN2的备节点在Server3上,DN3的备节点在Server3上,每个Server运行4个主DN,环内的各主机性能仍然保证均衡。 整个集群可以承受的主机故障数量范围为1~安全环的数量。 说明: 集群按照安全环节点数量的倍数进行扩容,也就是以环为最小单位进行扩容。 表2 节点IP描述 名称 描述 说明 Manage IP 数据仓库 节点与管理面连接通信的IP。 主要用于管理面命令下发,以及节点状态、监控信息上报。 Traffic IP 数据仓库节点对外开放的IP。 该IP用于绑定EIP、ELB或直接通过VPC内部进行连接。 Internal IP 数据仓库集群内部数据通信IP。 - Internalmgnt IP 数据仓库集群内部管理命令在节点之间通信IP。 - 表3 节点进程描述 名称 描述 说明 CMS 集群管理模块(Cluster Manager)。管理和监控分布式系统中各个功能单元和物理资源的运行情况,确保整个系统的稳定运行。 CMS为该模块中的CM Server。 CM由CM Agent、OM Monitor和CM Server组成。 CM Agent:负责监控所在主机上主备GTM、CN、主备DN的运行状态并将状态上报给CM Server。同时负责执行CM Server下发的仲裁指令。集群的每台主机上均有CM Agent进程。 OM Monitor:看护CM Agent的定时任务,其唯一的任务是在CM Agent停止的情况下将CM Agent重启。如果CM Agent重启不了,则整个主机不可用,需要人工干预。 说明: CM Agent重启的情况很少发生,如果出现可能是因为系统资源不够用导致无法启动新进程。 CM Server:根据CM Agent上报的实例状态判定当前状态是否正常,是否需要修复,并下发指令给CM Agent执行。 GaussDB(DWS)提供了CM Server的主备实例方案,以保证集群管理系统本身的高可用性。正常情况下,CM Agent连接主CM Server,在主CM Server发生故障的情况下,备CM Server会主动升为主CM Server,避免出现CM Server单点故障。 GTM 全局事务管理器(Global Transaction Manager),负责生成和维护全局事务ID、事务快照、时间戳等全局唯一的信息。 整个集群只有一组GTM:主、备GTM各一个。 CN 协调节点(Coordinator)。负责接收来自应用的访问请求,并向客户端返回执行结果;负责分解任务,并调度任务分片在各DN上并行执行。 集群中,CN有多个并且CN的角色是对等的(执行DML语句时连接到任何一个CN都可以得到一致的结果)。只需要在CN和应用程序之间增加一个负载均衡器,使得CN对应用是透明的。CN故障时,由负载均衡自动路由连接到另外一个CN。 当前分布式事务框架下无法避免CN之间的互连,为了减少GTM上线程过多导致负载过大,建议CN配置数目≤10个。 CCN 中心协调节点(Central Coordinator)。 GaussDB(DWS)通过CCN(Central Coordinator )负责集群内的资源全局负载控制,以实现自适应的动态负载管理。CM在第一次集群启动时,通过集群部署形式,选择编号最小的CN作为CCN。若CCN故障之后,由CM选择新的CCN进行替换。 DN 数据节点(Datanode)。负责存储业务数据(支持行存、列存、混合存储)、执行数据查询任务以及向CN返回执行结果。 在集群中,DN有多个。每个DN存储了一部分数据。如果DN无高可用方案,则故障时会导致该实例上的数据无法访问。
  • 拓扑展示逻辑 节点拓扑整体示意图如上所示,其中按照图中标注的顺序解释如下 : 集群所绑定的ELB的公网IP地址(若绑定的ELB没有绑定弹性IP则显示为服务地址)。 集群所绑定的EIP的IP地址。 搜索分类,可以按照“IP地址”或“节点名称”进行精确搜索。 该框表示集群内所有的Ring环。 该框表示Ring环,一行为一个Ring环,该Ring环内的每个图标表示其内的一个节点,如果创建的集群Ring环大于等于3,可查看CN分散部署情况。 节点以图标的形式进行表示,图标右上角为该节点的类型,暂只显示“CN”和“DN”两种类型(如果节点中有CN进程,则图标为CN;如果节点内没有CN进程,则显示DN图标)。 当鼠标悬停在节点图标上时,展示节点详细信息,包括节点名称、节点状态、节点的不同IP地址、节点进程。
  • 熔断查询 用户可以通过熔断查询查看资源池上的熔断规则的触发情况。 查询ID:熔断语句的查询ID。 查询语句:熔断查询语句。 阻塞时间(ms):熔断语句的阻塞时间,单位:ms。 执行时间(ms):熔断语句的执行时间,单位:ms。 CPU时间(ms):熔断语句消耗的CPU时间,单位:ms。 CPU倾斜率(%):熔断语句在各个DN上的CPU消耗倾斜率。 异常处理方式:熔断语句的异常处理方式。 处理状态:处理熔断语句的实时状态。
  • 资源池 DMS可显示用户定义的资源池名称,实时/历史资源消耗以及资源池资源配额,可单击列表右上方的设置按钮勾选需要在列表中展示的指标信息。指标包括: 资源池:资源池名称。 监控:单击弹出侧拉栏展示CPU、内存、磁盘等资源池资源的消耗历史趋势。 CPU使用率:资源池的实时CPU计算资源使用率。 共享配额:当前资源池的用户在执行作业时可以使用的CPU时间比例。 存储资源:资源池的存储空间。 磁盘使用率:资源池的实时磁盘使用率。 内存资源:资源池的内存配置的百分比。 内存使用率:资源池实时内存使用率。 实时简单语句并发:资源池的简单查询并发数使用量(判定为简单并发的查询不受资源池的管控)。 简单语句并发:资源池的简单并发数配额。 实时复杂语句并发:资源池的复杂查询并发数使用量(判定为复杂并发的查询受资源池的管控)。 复杂语句并发:资源池的复杂并发数配额。 操作:资源池相关配置操作。
  • 背景信息 逻辑集群支持手动添加增删计划和自动弹性增删能力。支持在计划时间段内,动态创建、删除计算逻辑集群,实现计算资源动态伸缩。 通过手动添加定时增删计划创建的逻辑集群主要用于提供计算能力,关联用户后该用户的查询都会切换到该逻辑集群上,同时建表语句仍在原始的逻辑集群上。 一个用户仅支持绑定到一个计算逻辑集群上。 若删除逻辑集群时,该逻辑集群关联的用户有业务运行,可能会出现报错。 通过打开自动弹性开关创建的逻辑集群主要用于提供并发扩展能力,关联主逻辑集群后,主逻辑集群的部分查询路由到该逻辑集群上,同时建表语句仍在原始的逻辑集群上。 开启并使用并发扩展功能,当系统面临高并发作业,主集群因为内存等资源不足出现排队时,DWS会自动增加额外的集群容量来处理增多的读取和写入语句,减少语句排队时间。不管语句在主集群上运行还是在并发扩展集群上运行,用户都将看到最新的数据,且性能相当。您可以通过配置资源池来管理将哪些语句发送到并发扩展集群。开启并发扩展后,符合条件的语句将发送到并发扩展集群,而不是排队等待。并发扩展功能限制如下: 仅支持V3表和外表。 仅支持SELECT、INSERT、UPDATE、DELETE语句。 不支持COPY导入。 不支持UPSERT语句。 不支持事务块。 不支持存储过程。 不支持带RETURNING子句和WITH RECURSIVE递归语句。 不支持轻量级更新。 不支持INSERT单个VALUES或者类似generate_series生成的语句。 不支持复制表。 手动增删计划支持DWS 3.0集群,历史版本需要联系技术支持人员升级使用。 自动弹性增删仅支持DWS 3.0集群和E CS 规格的集群,且仅9.1.0及以上集群版本支持。 DWS 3.0集群包年/包月集群在定时增加逻辑集群时自动扩容节点,节点按需计费。
  • GDS-Kafka入库模式 GDS-Kafka的数据入库都是先将数据copy至临时表,然后再根据客户的使用场景以及目标表有无主键进行merge或者insert,详见下表: 表3 GDS-Kafka入库模式 入库操作 app.insert.directly 是否主键表 入库模式 insert true(仅支持无主键表) 否 使用insert select从临时表写入到目标表。 false 是 根据主键从临时表merge到目标表。 否 使用insert select从临时表写入到目标表。 delete true(仅支持无主键表) 否 使用insert select从临时表写入到目标表。 false 说明: delete操作支持标记删除,通过配置app.del.flag参数可以指定删除标记字段,如果配置了标记删除字段,则会通过将删除字段设置为1来标记删除的记录。 是 如果设置了delflag字段,则会根据主键进行匹配merge,如果匹配到主键并且目标表中记录的pos小于临时表记录的pos,则会将delflag字段置为1,否则将插入一条新的记录。 如果没有设置delflag字段,则会根据主键进行匹配,如果匹配到记录并且目标表中记录的pos小于临时表记录的pos,则会将目标表中匹配到的记录删除。 否 如果设置了delflag字段,则会使用临时表中记录的所有字段与目标表进行匹配merge,如果匹配到记录并且目标表中记录的pos小于临时表记录的pos,则会将delflag字段值置为1,否则将插入一条新的记录。 如果没有设置delflag字段,则会使用临时表中记录的所有字段与目标表进行匹配,如果匹配到记录并且目标表中记录的pos小于临时表记录的pos,则会将目标表中匹配到的记录删除。 update true(仅支持无主键表) 否 使用insert+select从临时表写入到目标表。 false 说明: update操作会被拆分,将before或者beforeImage中的消息拆分为delete操作,将after或者afterImage中的消息拆分为insert操作,然后再按照insert和delete的行为进行入库处理。 是 相当于有主键表的insert+delete操作。 否 相当于无主键表的insert+delete操作。
  • 实例管理概述 数据迁移功能采用独立集群的方式为用户提供安全可靠的数据迁移服务,各集群之间相互隔离,不可互相访问。其中实例管理通过购买GDS-Kafka实例帮助用户创建、管理集群。GDS-Kafka的工作方式是从Kafka中消耗数据并缓存,当达到设置好的时间或数据量之后,通过COPY写入GaussDB(DWS)临时表,再从临时表进行插入或更新操作。 Kafka的消息生产端必须按照一定的格式要求进行数据生产,其中消息格式由“kafka.source.event.type”配置参数指定。当前支持的消息格式详见GDS-Kafka支持的消息格式。 GDS-Kafka支持直接insert(仅限无主键表)和merge覆盖更新两种入库模式,您可以根据DWS目标表的类型进行灵活配置,直接insert模式由于不涉及更新在性能上要更优一些。其中入库模式由“app.insert.directly”配置参数和有无主键共同决定,详见GDS-Kafka入库模式。 GDS-kafka只支持目标表表名和字段全小写。 GDS-Kafka的删除是根据扩展字段中的pos进行历史删除,如果入库数据中有delete操作,则必须使用扩展字段。
  • 概述 GaussDB(DWS) 使用 SMN (Simple Message Notification, 消息通知 服务)发送GaussDB(DWS) 事件的通知,订阅GaussDB(DWS) 事件即可启用通知。在订阅中,用户需要指定一个或多个事件筛选条件。每当发生与所有筛选条件匹配的事件时,GaussDB(DWS) 就会通过该订阅发送通知。筛选条件包含事件类别(例如:管理、监控或安全)、事件级别(例如:正常或警告)和事件源类型(例如:集群或快照)。
  • 支持的事件类别和事件 事件是用户集群状态发生变化的记录。它可以是由用户操作触发的(比如审计事件),也有可能是集群服务状态变化引起的(比如集群修复成功或集群修复失败)。以下为当前GaussDB(DWS)支持的事件和事件类别列表。 下表显示了事件源类型为集群的事件 表1 事件源类型为集群的事件 事件类别 事件名称 事件级别 事件 管理 createClusterFail 警告 集群创建失败。 管理 createClusterSuccess 正常 集群创建成功。 管理 createCluster 正常 开始创建集群。 管理 extendCluster 正常 开始扩容集群。 管理 extendClusterSuccess 正常 集群扩容成功。 管理 extendClusterFail 警告 集群扩容失败。 管理 deleteClusterFail 警告 集群删除失败。 管理 deleteClusterSuccess 正常 集群删除成功。 管理 deleteCluster 正常 开始删除集群。 管理 restoreClusterFail 警告 集群恢复失败。 管理 restoreClusterSuccess 正常 集群恢复成功。 管理 restoreCluster 正常 开始恢复集群。 管理 restartClusterFail 警告 集群重启失败。 管理 restartClusterSuccess 正常 集群重启成功。 管理 restartCluster 正常 开始重启集群。 管理 configure MRS ExtDataSources 正常 开始配置集群的MRS外部数据源。 管理 configureMRSExtDataSourcesFail 警告 配置集群的MRS外部数据源失败。 管理 configureMRSExtDataSourcesSuccess 正常 配置集群的MRS外部数据源成功。 管理 deleteMRSExtDataSources 正常 开始删除集群MRS外部数据源。 管理 deleteMRSExtDataSourcesFail 警告 删除集群MRS外部数据源失败。 管理 deletedMRSExtDataSourcesSuccess 正常 删除集群MRS外部数据源成功。 管理 bindEipToCluster 正常 集群绑定EIP。 管理 bindEipToClusterFail 警告 集群绑定EIP失败。 管理 unbindEipToCluster 正常 集群解绑EIP。 管理 unbindEipToClusterFail 警告 集群解绑EIP失败。 管理 refreshEipToCluster 正常 集群刷新EIP。 管理 refreshEipToClusterFail 警告 集群刷新EIP失败。 管理 dmsClusterMonitoringEnabledSuccessfully 正常 打开DMS集群监控开关成功。 管理 failedToEnableDmsClusterMonitoring 正常 打开DMS集群监控开关失败。 管理 dmsClusterMonitoringDisabledSuccessfully 正常 关闭DMS集群监控开关成功。 管理 failedToDisableDmsClusterMonitoring 正常 关闭DMS集群监控开关失败。 管理 dmsMetricCollectionEnabledSuccessfully 正常 打开DMS采集成功。 管理 failedToEnableDmsMetricCollection 正常 打开DMS采集失败。 管理 dmsMetricCollectionDisabledSuccessfully 正常 关闭DMS采集成功。 管理 failedToDisableDmsMetricCollection 正常 关闭DMS采集失败。 管理 dmsMetricCollectionResetSuccessfully 正常 重置DMS采集成功。 管理 failedToResetDmsMetricCollection 正常 重置DMS采集失败 管理 dmsMetricCollectionUpdatedSuccessfully 正常 更新DMS采集成功 管理 failedToUpdateDmsMetricCollection 正常 更新DMS采集失败。 管理 dmsMetricDataRetentionPeriodUpdatedSuccessfully 正常 更新DMS采集存储时间成功。 管理 failedToUpdateTheDmsMetricDataRetentionPeriod 正常 更新DMS采集存储时间失败。 管理 dmsSessionsTerminatedSuccessfully 正常 DMS终止会话成功。 管理 failedToTerminateDmsSessions 正常 DMS终止会话失败。 管理 dmsQueriesTerminatedSuccessfully 正常 DMS终止查询成功。 管理 failedToTerminateDmsQueries 正常 DMS终止查询失败。 管理 dmsCreateWDRSuccessfully 正常 DMS生成负荷报告任务下发成功。 管理 failedToCreateWDR 警告 DMS生成负荷报告任务下发失败。 管理 dmsDeleteWDRSuccessfully 正常 DMS删除负荷报告成功。 管理 failedToDeleteWDR 警告 DMS删除负荷报告失败。 管理 dmsUpdateWDRConfigSuccessfully 正常 DMS更新负荷报告参数成功。 管理 failedToUpdateWDRConfig 警告 DMS更新负荷报告参数失败。 管理 dmsCreateWorkloadSnapshotSuccessfully 正常 DMS新增负荷快照任务下发成功。 管理 failedToCreateWorkloadSnapshot 警告 DMS新增负荷快照任务下发失败。 安全 resetPasswordFail 警告 集群密码重置失败。 安全 resetPasswordSuccess 正常 集群密码重置成功。 安全 updateConfiguration 正常 开始更新集群安全参数。 安全 updateConfigurationFail 警告 更新集群安全参数失败。 安全 updateConfigurationSuccess 正常 更新集群安全参数成功。 监控 repairCluster 正常 节点故障,开始修复集群。 监控 repairClusterFail 警告 集群修复失败。 监控 repairClusterSuccess 正常 集群修复成功。 下表显示了事件源类型为快照的事件 表2 事件源类型为快照的事件 事件类别 事件名称 事件级别 事件 管理 deleteBackup 正常 快照删除成功。 管理 deleteBackupFail 警告 快照删除失败。 管理 createBackup 正常 开始创建快照。 管理 createBackupSuccess 正常 快照创建成功。 管理 createBackupFail 警告 快照创建失败。 下表显示了事件源类型为容灾的事件 表3 事件源类型为容灾的事件 事件类别 事件名称 事件级别 事件 管理 beginCreateDisasterRecovery 正常 开始创建容灾。 管理 createDisasterRecoverySuccess 正常 创建容灾成功。 管理 createDisasterRecoveryFail 警告 创建容灾失败。 管理 beginStartDisasterRecovery 正常 开始启动容灾。 管理 startDisasterRecoverySuccess 正常 启动容灾成功。 管理 startDisasterRecoveryFail 警告 启动容灾失败。 管理 beginStopDisasterRecovery 正常 开始停止容灾。 管理 stopDisasterRecoverySuccess 正常 停止容灾成功 管理 stopDisasterRecoveryFail 警告 停止容灾失败。 管理 beginSwitchoverDisasterRecovery 正常 开始灾备切换。 管理 switchoverDisasterRecoverySuccess 正常 灾备切换成功。 管理 switchoverDisasterRecoveryFail 警告 灾备切换失败。 管理 beginDeleteDisasterRecovery 正常 开始删除容灾。 管理 deleteDisasterRecoverySuccess 正常 删除容灾成功。 管理 deleteDisasterRecoveryFail 警告 删除容灾失败。 管理 disasterRecoveryAbnormal 警告 容灾运行异常。
  • 概述 告警管理包含查看告警规则、告警规则配置与告警信息订阅功能。其中,告警规则可以提供过去一周的告警信息统计与告警信息明细,方便用户自行查看租户下的告警。该特性除了以默认值的形式提供一套GaussDB(DWS)告警最佳实践外,还允许用户根据自己的业务特点,个性化修改告警阈值。告警管理通过消息通知服务(Simple Message Notification,简称SMN)发送GaussDB(DWS) 告警通知,用户可订阅告警启用通知。 该特性仅8.1.1.200及以上集群版本支持。 告警管理目前暂不支持按照企业项目划分告警。
  • 示例流程 图1 给用户授权GaussDB(DWS)权限流程 创建用户组并授权 使用华为云账号登录 IAM 控制台,创建用户组,并授予数据仓库服务的只读权限“DWS ReadOnlyAccess”。 创建用户并加入用户组 在IAM控制台创建用户,并将其加入步骤1中创建的用户组。 用户登录并验证权限 使用新创建的用户登录控制台,切换至授权区域,验证权限: 在“服务列表”中选择数据仓库服务,进入DWS主界面,单击右上角“创建数据仓库集群”,尝试创建数据仓库集群,如果无法创建(假设当前权限仅包含DWS ReadOnlyAccess),表示“DWS ReadOnlyAccess”已生效。 在“服务列表”中选择除数据仓库服务之外(假设当前策略仅包含DWS ReadOnlyAccess)的任一服务,若提示权限不足,表示“DWS ReadOnlyAccess”已生效。
  • GaussDB(DWS)自定义策略样例 示例1:授权用户创建/恢复集群、重启集群、删除集群、设置安全参数、重置密码的权限。 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dws:cluster:create", "dws:cluster:restart", "dws:cluster:delete", "dws:cluster:setSecuritySettings", "dws:cluster:resetPassword", "dws:*:list*", "dws:*:get*", "tms:predefineTags:list" "ecs:*:get*", "ecs:*:list*", "elb:*:list*", "ecs:*:create*", "ecs:*:delete*", "vpc:*:get*", "vpc:*:list*", "vpc:*:create*", "vpc:*:delete*", "evs:*:get*", "evs:*:list*", "evs:*:create*", "evs:*:delete*" ] } ] } 示例2:通配符*用法示例 例如,以下策略具有对GaussDB(DWS)快照的所有操作权限。 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dws:snapshot:*", "dws:cluster:list", "dws:openAPISnapshot:detail", "dws:cluster:getDetail", "ecs:*:get*", "ecs:*:list*", "vpc:*:get*", "vpc:*:list*" ] } ] } 示例3:拒绝用户删除集群 拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先原则。 如果您给用户授予GaussDB(DWS) FullAccess的系统策略,但不希望用户拥有GaussDB(DWS) FullAccess中定义的删除集群权限,您可以创建一条拒绝删除集群的自定义策略,然后同时将GaussDB(DWS) FullAccess和拒绝策略授予用户,根据Deny优先原则,则用户可以对GaussDB(DWS)执行除了删除集群外的所有操作。拒绝策略示例如下: { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dws:*:list*", "dws:*:get*" ] }, { "Effect": "Deny", "Action": [ "dws:cluster:delete" ] } ] } 示例4:多个授权项策略 一个自定义策略中可以包含多个授权项,且除了可以包含本服务的授权项外,还可以包含其他服务的授权项,可以包含的其他服务必须跟本服务同属性,即都是项目级服务或都是全局级服务。多个授权语句策略描述如下: { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dws:cluster:create", "dws:cluster:restart", "dws:cluster:setSecuritySettings", "dws:*:get*", "dws:*:list*", "tms:predefineTags:list", "elb:*:list*", "ecs:*:get*", "ecs:*:list*", "ecs:*:create*", "vpc:*:get*", "vpc:*:list*", "vpc:*:create*", "evs:*:get*", "evs:*:list*", "evs:*:create*" ] }, { "Effect": "Deny", "Action": [ "dws:cluster:delete" ] } ] }
  • 标签简介 标签(Tag)是用户自定义的、用于标识云资源的键值对,它可以帮助用户对云资源进行分类和搜索。 标签由标签“键”和标签“值”组成。 一个标签“键”可以拥有多个标签“值”。 一个云资源不能拥有重复的标签“键”。 在GaussDB(DWS)中,当用户创建集群后,如果想对集群添加如项目名称、业务类别、背景信息等相关信息的标识,用户可以通过添加标签来实现。如果用户在其他云服务中使用了标签,那么建议用户为同一个业务所使用的云资源创建相同的标签键值对以保持一致性。 GaussDB(DWS)支持以下标签: 资源标签 在GaussDB(DWS)中创建的非全局的标签。 预定义标签 在标签管理服务(简称TMS)中创建的预定义标签,属于全局标签。 有关预定义标签的更多信息,请参见《标签管理服务用户指南》。 在GaussDB(DWS)中,支持对以下资源添加标签: 集群 支持在创建集群时或在集群创建成功后,对集群添加标签。并且,在集群列表中,可通过标签进行搜索。 每个集群最多可以添加 20 个标签。 当用户对某一集群添加了标签,并对该集群创建快照,使用快照恢复集群时,该集群的标签不会恢复,需要用户重新添加标签。 当删除集群时,也会删除与集群关联的非预定义标签,而预定义标签则需要前往标签管理服务进行删除。 父主题: 管理标签
  • 支持审计的关键操作列表 通过 云审计 服务,您可以记录与GaussDB(DWS)服务相关的操作事件,便于日后的查询、审计和回溯。 自动快照的创建、删除走系统内部调度,非用户操作,不记录审计日志。 表1 云审计服务支持审计的GaussDB(DWS)操作列表 操作名称 资源类型 事件名称 创建集群/恢复集群 cluster createCluster 删除集群 cluster deleteCluster 扩容集群 cluster resizeCluster 重启集群 cluster restartCluster 创建快照 backup createBackup 删除快照 backup deleteBackup 设置安全参数 configurations updateConfigurations 创建MRS数据源 dataSource createExtDataSource 删除MRS数据源 dataSource deleteExtDataSource 更新MRS数据源 dataSource updateExtDataSource
  • 开启运维账户 登录GaussDB(DWS)管理控制台。 在集群列表中单击指定集群名称。 进入“集群详情”页面,在运维账户模块打开集群运维账户开关。 图2 打开运维账户开关 弹出确认窗口,单击“确认”按钮。 开启运维账户后,将在集群中创建运维账户,账户名为om_user_集群ID前8位。 并赋予账户gs_role_analyze_any,gs_role_vacuum_any,gs_role_read_all_stats,gs_role_signal_backend角色权限。详情请参考:预置角色。 用户不需要授权时可关闭按钮删除运维账户。
  • 监控面板 用户通过定义监控面板来配置相关的监控视图,监控面板与用户绑定,登录后可看到自定义的监控面板。 创建监控面板:用户可单击“创建监控面板”按钮定义自己的监控面板。 修改监控面板:用户可单击“修改”按钮修改监控面板的名称。 删除监控面板:用户可单击“删除”按钮删除监控面板,默认监控面板无法被删除。 共享监控面板:用户可单击“共享”按钮共享监控面板,被共享用户则可以看到该面板,但无法修改。 图1 监控面板
  • 添加监控视图 目前DMS提供集群、数据库、实例和节点四种维度的监控视图,用户可根据需求单击“添加监控视图”按钮添加。监控指标如下所示: 集群维度的监控指标:CPU使用率、内存使用率、磁盘使用率、磁盘I/O、网络I/O、状态、CN异常数量、只读、会话数量、活跃会话数、死锁数量、DN异常数量、DN实例CPU使用率、平均每秒事务数、平均每秒查询数、容量、模式容量、SQL堆积、查询数量、资源池、事务数量。 数据库维度的监控指标:活跃会话数、会话数量、插入行数、更新行数、删除行数、容量。 实例维度的监控指标:实例内存使用率、动态内存使用率。 节点维度的监控指标:CPU使用率、内存使用率、平均磁盘使用率、TCP协议栈重传率、磁盘I/O、网络I/O、磁盘总量、磁盘使用率、磁盘读速率、磁盘写速率、磁盘I/O等待时间、磁盘I/O服务时间、磁盘I/O使用率、网卡状态、接收包数、发送包数、接收丢包数、接收速率、发送速率、CPU使用情况、内存使用情况。 图2 添加监控视图 每个监控面板上最多可以添加20个监控视图,添加过多的视图会导致页面请求数据增多,所需的渲染时间增大,因此请合理的控制监控视图规模。 节点维度中最多可以勾选20个监控对象,该特性仅8.1.3.310及以上集群版本支持。
  • 添加运维计划 登录GaussDB(DWS)管理控制台。 在集群列表中单击指定集群名称。 进入“集群详情”页面,切换至“智能运维”页签。 在运维详情部分切换至运维计划模块,单击“添加运维任务”按钮。 在弹出的添加运维任务边栏,进行运维任务的基础配置。 表1 运维任务基础配置项 配置项名称 配置项描述 样例 运维任务 Vacuum(目前仅支持Vacuum运维任务)。 Vacuum 任务简述 智能任务的简要描述。 该运维任务可帮助用户定期调用系统Vacuum命令,以实现空间回收。 备注 备注信息。 - 调度模式 支持以下三种调度模式: 自动:智能运维将在指定时间窗内扫描数据库,依据用户业务负载、用户表可回收空间,自动下发表级Vacuum任务。 指定目标:用户可选择指定Vacuum目标,智能运维将在指定时间窗内,自动下发表级Vacuum任务。 优先级模式:用户可配置优先Vacuum目标,若时间窗剩余,智能运维将自动扫描其他可Vacuum的表,并下发表级Vacuum任务。 说明: 建议使用指定目标方式进行Vacuum和VacuumFull,同时不建议对列存宽表进行VacuumFull,以防止内存膨胀。 指定目标 自动Vacuum目标 支持:系统表Vacuum或用户表VacuumFull。 对于系统表Vacuum,会持有系统表五级锁(share update exclusive锁),不会阻塞用户业务,仅会阻塞系统表DDL进程。 对于用户表Vacuum Full,会持有系统表的八级锁(access exclusive锁),期间所有访问会被阻塞,并等待Vacuum Full结束,建议用户合理安排调度时间,在业务负载低峰期执行Vacuum Full操作,避免锁表影响业务。 注意: Vacuum Full操作相当于开辟一块和表数据大小相同的空间(表真实数据大小约为表总大小* (1 – 脏页率)),因此表空间会先增后降,请提前计算好Vacuum Full所需要的空间再行处理。 用户表VacuumFull 优先Vacuum目标 用户可配置优先Vacuum目标,其中一行对应一张表,每张表以数据库名、模式名、表名表示,以空格进行分割。 - 高级配置 选择“自定义”时,可以设置Vacuum膨胀率和目标表可回收空间高级配置参数(满足其中一个条件即触发自动Vacuum),如果选择“默认配置”,将使用它们的默认值。 说明: Vacuum膨胀率:在数据库中频繁执行UPDATE、DELETE等操作后被删除或更新的行不会从表中物理删除,仅从数据库中被逻辑删除,在完成VACUUM之前这些过期数据仍然存储在磁盘中,从而导致表膨胀。当膨胀率达到运维任务中用户设置的百分比后,就会自动触发Vacuum。 默认配置(Vacuum膨胀率80%;目标表可回收空间100GB) 单击“下一步:定时配置”,进行运维任务的“定时配置”。 选择运维类型: 单次型任务:需要设置起止时间,智能运维将在设置的时间段内运行运维任务。 周期型任务:需要配置时间窗,时间窗配置提供每日、每周、每月三种类型供用户选择。智能运维将自动分析用户注册的时间段,在每个时间段内运行运维任务。 对于自动Vacuum运维任务,用户配置时间窗时,应避开业务高峰期。否则自动Vacuum将有可能与用户业务产生死锁冲突。 vacuum(full)运维任务对于用户表并发度最高为24,最低为0;对于系统表并发度最高为1,最低为0。并发度不支持用户自定义,但可根据系统io_util自动调节: io_util将0%~60%划分为两个区间段: 0%~30%区间段,io_util每减少15%,并发度增加2。 30%~60%区间段,io_util值每减少15%,并发度增加1。 60%~70%并发度不变。 70%以上并发度减1,如果仍维持70%以上IO,则并发度持续减到0。 调度器会在时间窗内,扫描列存小CU膨胀情况,若发现列存CU膨胀(列存CU的膨胀依据是CU平均记录数小于1000),则调度器会将该列存表优先级提前。列存CU膨胀检测条件不受膨胀率、可回收空间限制。 优先级表最多支持添加100个任务表。 调度器自动vacuum功能依赖于统计信息,若统计信息不准确,可能会影响调度器自动vacuum执行顺序以及统计结果。 调度器不支持带有空格和单引号的表,包括数据库名,schema名,表名。如果vacuum在扫描过程中遇到带有单引号或空格的表,将自动跳过。对于优先级表中有空格或单引号的表,也自动跳过。 单击“下一步:配置确认”,确认无误后单击“配置确认”提交。
  • 运维任务公共配置 登录GaussDB(DWS)管理控制台。 在集群列表中单击指定集群名称。 进入“集群详情”页面,切换至“智能运维”页签。 在页面上方“运维任务公共配置”模块,填写“用户表VacuumFull运维任务最大并发数”配置值,单击右上角“保存”完成配置。 该配置应用于每个用户表VacuumFull运维任务中。 最大并发数配置范围为1~24,用户可根据剩余磁盘空间和IO负载,合理设置最大并发数,建议设置为5。
  • 代码示例运行结果 [2018-01-25 22:40:51,841] INFO Thread 2 Polling! (com.huawei.dms.kafka.DmsKafkaProduceDemo:119) [2018-01-25 22:40:51,841] INFO Thread2 KEEP Poll records! (com.huawei.dms.kafka.DmsKafkaProduceDemo:128) [2018-01-25 22:40:52,122] INFO Everyone WakeUp and Work! (com.huawei.dms.kafka.DmsKafkaProduceDemo:69) [2018-01-25 22:40:52,169] INFO Thread2 recievedrecordshello, dms kafka. (com.huawei.dms.kafka.DmsKafkaProduceDemo:32) [2018-01-25 22:40:52,169] INFO Thread2 recievedrecordshello, dms kafka. (com.huawei.dms.kafka.DmsKafkaProduceDemo:32) [2018-01-25 22:40:52,216] INFO Thread2 recievedrecordshello, dms kafka. (com.huawei.dms.kafka.DmsKafkaProduceDemo:32) [2018-01-25 22:40:52,325] INFO Thread 2 Polling! (com.huawei.dms.kafka.DmsKafkaProduceDemo:119) [2018-01-25 22:40:52,325] INFO Thread2 KEEP Poll records! (com.huawei.dms.kafka.DmsKafkaProduceDemo:128) [2018-01-25 22:40:54,947] INFO Thread1 Have a nice sleep! (com.huawei.dms.kafka.DmsKafkaProduceDemo:87) [2018-01-25 22:40:54,979] INFO Thread3 Have a nice sleep! (com.huawei.dms.kafka.DmsKafkaProduceDemo:87) [2018-01-25 22:41:32,347] INFO Thread2 KEEP Poll records! (com.huawei.dms.kafka.DmsKafkaProduceDemo:128) [2018-01-25 22:41:42,353] INFO Thread2 KEEP Poll records! (com.huawei.dms.kafka.DmsKafkaProduceDemo:128) [2018-01-25 22:41:47,816] INFO Everyone WakeUp and Work! (com.huawei.dms.kafka.DmsKafkaProduceDemo:69) [2018-01-25 22:41:47,847] INFO Thread2 recievedrecordshello, dms kafka. (com.huawei.dms.kafka.DmsKafkaProduceDemo:32) [2018-01-25 22:41:47,925] INFO Thread 3 Polling! (com.huawei.dms.kafka.DmsKafkaProduceDemo:119) [2018-01-25 22:41:47,925] INFO Thread1 Have a nice sleep! (com.huawei.dms.kafka.DmsKafkaProduceDemo:87) [2018-01-25 22:41:47,925] INFO Thread3 KEEP Poll records! (com.huawei.dms.kafka.DmsKafkaProduceDemo:128) [2018-01-25 22:41:47,957] INFO Thread2 Have a nice sleep! (com.huawei.dms.kafka.DmsKafkaProduceDemo:87) [2018-01-25 22:41:48,472] INFO Everyone WakeUp and Work! (com.huawei.dms.kafka.DmsKafkaProduceDemo:69) [2018-01-25 22:41:48,503] INFO Thread3 recievedrecordshello, dms kafka. (com.huawei.dms.kafka.DmsKafkaProduceDemo:32) [2018-01-25 22:41:48,518] INFO Thread1 recievedrecordshello, dms kafka. (com.huawei.dms.kafka.DmsKafkaProduceDemo:32) [2018-01-25 22:41:48,550] INFO Thread2 recievedrecordshello, dms kafka. (com.huawei.dms.kafka.DmsKafkaProduceDemo:32) [2018-01-25 22:41:48,597] INFO Thread1 recievedrecordshello, dms kafka. (com.huawei.dms.kafka.DmsKafkaProduceDemo:32) [2018-01-25 22:41:48,659] INFO Thread 2 Polling! (com.huawei.dms.kafka.DmsKafkaProduceDemo:119) [2018-01-25 22:41:48,659] INFO Thread2 KEEP Poll records! (com.huawei.dms.kafka.DmsKafkaProduceDemo:128) [2018-01-25 22:41:48,675] INFO Thread3 recievedrecordshello, dms kafka. (com.huawei.dms.kafka.DmsKafkaProduceDemo:32) [2018-01-25 22:41:48,675] INFO Everyone WakeUp and Work! (com.huawei.dms.kafka.DmsKafkaProduceDemo:69) [2018-01-25 22:41:48,706] INFO Thread 1 Polling! (com.huawei.dms.kafka.DmsKafkaProduceDemo:119) [2018-01-25 22:41:48,706] INFO Thread1 KEEP Poll records! (com.huawei.dms.kafka.DmsKafkaProduceDemo:128)
  • 方案概述 应用场景 在分布式消息服务Kafka版提供的原生Kafka SDK中,消费者可以自定义拉取消息的时长,如果需要长时间的拉取消息,只需要把poll(long)方法的参数设置合适的值即可。但是这样的长连接可能会对客户端和服务端造成一定的压力,特别是分区数较多且每个消费者开启多个线程的情况下。 如图1所示,Topic含有多个分区,消费组中有多个消费者同时进行消费,每个线程均为长连接。当Topic中消息较少或者没有消息时,连接不断开,所有消费者不间断地拉取消息,这样造成了一定的资源浪费。 图1 Kafka消费者多线程消费模式 解决方案 在开了多个线程同时访问的情况下,如果Topic里已经没有消息了,其实不需要所有的线程都在poll,只需要有一个线程poll各分区的消息就足够了,当在polling的线程发现Topic中有消息,可以唤醒其他线程一起消费消息,以达到快速响应的目的。如图2所示。 这种方案适用于对消费消息的实时性要求不高的应用场景。如果要求准实时消费消息,则建议保持所有消费者处于活跃状态。 图2 优化后的多线程消费方案 消费者(Consumer)和消息分区(Partition)并不强制数量相等,Kafka的poll(long)方法帮助实现获取消息、分区平衡、消费者与Kafka broker节点间的心跳检测等功能。 因此在对消费消息的实时性要求不高场景下,当消息数量不多的时候,可以选择让一部分消费者处于wait状态。
  • 原因分析 排查步骤: 查看GaussDB(for MySQL)的错误日志,观察到如下报错: 2021-07-09T10:30:58.476586+08:00 212539 [Warning] SSL errno: 337678594, SSL errmsg: error:14209102:SSL routines:tls_early_post_process_client_hello:unsupported protocol2021-07-09T10:30:58.476647+08:00 212539 [Note] Bad handshake2021-07-09T10:32:43.535738+08:00 212631 [Warning] SSL errno: 337678594, SSL errmsg: error:14209102:SSL routines:tls_early_post_process_client_hello:unsupported protocol2021-07-09T10:32:43.535787+08:00 212631 [Note] Bad handshake2021-07-09T10:50:03.401100+08:00 213499 [Warning] SSL errno: 337678594, SSL errmsg: error:14209102:SSL routines:tls_early_post_process_client_hello:unsupported protocol2021-07-09T10:50:03.401161+08:00 213499 [Note] Bad handshake2021-07-09T10:53:44.458404+08:00 213688 [Warning] SSL errno: 337678594, SSL errmsg: error:14209102:SSL routines:tls_early_post_process_client_hello:unsupported protocol2021-07-09T10:53:44.458475+08:00 213688 [Note] Bad handshake 从报错信息unsupported protocol可以看出,很可能和TLS版本相关,使用如下命令,分别查看GaussDB(for MySQL)和自建MySQL的TLS版本。 show variables like '%tls_version%'; 发现GaussDB(for MySQL)为TLS v1.2版本,自建MySQL为TLS v1.1版本,存在差异。进一步确认客户端TLS版本,与自建MySQL一致,因此出现连接自建MySQL成功,连接云上GaussDB(for MySQL)失败。
  • 解决方案 对于mariadb的连接串应该为: String url = "jdbc:mysql://xxx.xxx.xxx.xxx:xxxx/mysql?useSsl=true&serverSslCert=D:\\ca.pem&disableSslHostnameVerification=true"; 注意:GaussDB(for MySQL)实例不支持hostname校验,因此需要设置disableSslHostnameVerification=true,不同mariadb jar包版本设置方式不同,可查看对应版本的使用说明。
  • GaussDB(for MySQL) timeout相关参数简介 MySQL中有多种timeout参数,GaussDB(for MySQL)也将相关参数提供给用户设置,如下表: 表1 参数说明 参数名称 修改是否需要重启 参数含义 connect_timeout 否 控制客户端和MySQL服务端在建连接时,服务端等待三次握手成功的超时时间(秒),网络状态较差时,可以调大该参数。 innodb_flush_log_at_timeout 否 每N秒写入并刷新日志。当innodb_flush_log_at_trx_commit值为2时,此设置有效。 innodb_lock_wait_timeout 否 该变量控制innodb事务获取行锁等待的最长时间(秒),如果超过该时间还未获取到锁资源,则会返回执行失败。 parallel_queue_timeout 否 请求并行执行的查询的等待时间。如果超过该等待时间后,系统中并行执行的线程数仍然大于parallel_max_threads,则不再等待而进入单线程执行。 lock_wait_timeout 否 试图获得元数据锁的超时时间(秒)。 net_read_timeout 否 中止读数据之前从一个连接等待更多数据的秒数。 net_write_timeout 否 中止写之前等待一个块被写入连接的秒数。 interactive_timeout 否 服务器在关闭交互式连接之前等待活动的秒数。 wait_timeout 否 服务器关闭连接之前等待非交互式连接活动的秒数。 父主题: 参数类
  • 使用mysqlbinlog工具获取binlog 本文以从弹性 云服务器ECS 上拉取为例,其他环境下方法类似。 在ECS上安装MySQL客户端,详情请参考安装MySQL客户端。 GaussDB(for MySQL)兼容社区MySQL 8.0及以上版本,请勿安装8.0以下版本的版本的客户端。 执行命令,下载binlog文件。 mysqlbinlog -hxxx -uxxx -Pxxx -pxxx binlog.xxxx --read-from-remote-server mysqlbinlog的常用参数: -h:数据库host。 -u:用户名。 -P:端口号。 -p:密码。 --start-position:表示从指定的起始位置开始解析。 --start-datetime:表示从指定的时间开始解析。 --stop-position:表示解析到指定的位置。 --stop-datetime:表示解析到指定的时间。 --skip-gtids:跳过打印gtid_log_event。 --short-form:表示只显示statements。 --result-file:将binlog解析生成sql文件。 --read-from-remote-server:远程下载binlog(用于mysqlbinlog与数据库服务端不再同一台机器的情况)。 父主题: 备份恢复
  • 解决方案 如果数据变化较多,表中实际数据量远小于自增主键的容量,则可以考虑将该表的数据全量导入新表,删除原表,然后rename将新表名改回原表名。(使用数据导入导出的方法有多种实现方法,此处仅举其中一种例子) 创建表auto_test5_tmp。 create table auto_test5_tmp(id tinyint not null AUTO_INCREMENT, name varchar(8), PRIMARY KEY (`id`)); Query OK, 0 rows affected (0.07 sec) 插入数据。 insert into auto_test5_tmp select 0,name from auto_test5; Query OK, 6 rows affected (0.01 sec) Records: 6 Duplicates: 0 Warnings: 0 查询表数据。 select * from auto_test5_tmp; +----+------+ | id | name | +----+------+ | 1 | A | | 2 | B | | 3 | C | | 4 | X | | 5 | Y | | 6 | Z | +----+------+ 删除表。 drop table auto_test5; 重命名。 rename table auto_test5_tmp to auto_test5; Query OK, 0 rows affected (0.12 sec) 如果自增主键的取值范围不够,则修改自增主键的字段类型。 alter table auto_test6 modify column id int NOT NULL AUTO_INCREMENT; Query OK, 6 rows affected (0.15 sec) Records: 6 Duplicates: 0 Warnings: 0
共100000条