华为云用户手册

  • 示例 示例1:连接数据库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 //以下代码将获取数据库连接操作封装为一个接口,可通过给定用户名和密码来连接数据库。 public static Connection getConnect(String username, String passwd) { //驱动类。 String driver = "org.postgresql.Driver"; //数据库连接描述符。 String sourceURL = "jdbc:postgresql://$ip:$port/postgres"; Connection conn = null; try { //加载驱动。 Class.forName(driver); } catch( Exception e ) { e.printStackTrace(); return null; } try { //创建连接。 conn = DriverManager.getConnection(sourceURL, username, passwd); System.out.println("Connection succeed!"); } catch(Exception e) { e.printStackTrace(); return null; } return conn; } 示例2:使用Properties对象作为参数建立连接 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 // 以下代码将使用Properties对象作为参数建立连接 public static Connection getConnectUseProp(String username, String passwd) { //驱动类。 String driver = "org.postgresql.Driver"; //数据库连接描述符。 String sourceURL = "jdbc:postgresql://$ip:$port/postgres"; Connection conn = null; Properties info = new Properties(); try { //加载驱动。 Class.forName(driver); } catch( Exception e ) { e.printStackTrace(); return null; } try { info.setProperty("user", username); info.setProperty("password", passwd); //创建连接。 conn = DriverManager.getConnection(sourceURL, info); System.out.println("Connection succeed!"); } catch(Exception e) { e.printStackTrace(); return null; } return conn; } 常用参数详情请参见JDBC常用参数参考。
  • 参数 表1 数据库连接参数 参数 描述 url postgresql.jar数据库连接描述符。格式如下: jdbc:postgresql:database jdbc:postgresql://host/database jdbc:postgresql://host:port/database jdbc:postgresql://host:port/database?param1=value1¶m2=value2 jdbc:postgresql://host1:port1,host2:port2/database?param1=value1¶m2=value2 说明: database为要连接的数据库名称。 host为数据库服务器名称或IP地址。 由于安全原因,数据库主节点禁止数据库内部其他节点无认证接入。如果要在数据库内部访问数据库主节点,请将JDBC程序部署在数据库主节点所在机器,host使用“127.0.0.1”。否则可能会出现“FATAL: Forbid remote connection with trust method!”错误。 建议业务系统单独部署在数据库外部,否则可能会影响数据库运行性能。 缺省情况下,连接服务器为localhost。 port为数据库服务器端口。 缺省情况下,会尝试连接到5431端口的database。 param为参数名称,即数据库连接属性。 参数可以配置在URL中,以“?”开始配置,以“=”给参数赋值,以“&”作为不同参数的间隔。也可以采用info对象的属性方式进行配置,详情见示例。 value为参数值,即数据库连接属性值。 连接时需配置connectTimeout、socketTimeout,如果未配置,默认为0,即不会超时。在DN与客户端出现网络故障时,客户端一直未收到DN侧ACK确认报文,会启动超时重传机制,不断的进行重传。当超时时间达到系统默认的600s后才会报超时错误,这会导致RTO时间较高。 info 数据库连接属性(所有属性大小写敏感)。常用的属性如下: PGDBNAME:String类型。表示数据库名称(URL中无需配置该参数,自动从URL中解析)。 PGHOST:String类型。主机IP地址。详情见示例。 PGPORT:Integer类型。主机端口号。详情见示例。 user:String类型。表示创建连接的数据库用户。 password:String类型。表示数据库用户的密码。 enable_ce:String类型。其中enable_ce=1表示JDBC支持密态等值查询基本能力。 refreshClientEncryption:String类型。其中refreshClientEncryption=1表示密态数据库支持客户端缓存刷新(默认值为1)。 loggerLevel:String类型。目前支持3种级别:OFF、DEBUG、TRACE。设置为OFF关闭日志,设置为DEBUG和TRACE记录的日志信息详细程度不同。 loggerFile:String类型。Logger输出的文件名。需要显示指定日志文件名,若未指定目录则生成在客户端运行程序目录。此参数已废弃,不再生效,如需使用可通过 java.util.logging 属性文件或系统属性进行配置。 allowEncodingChanges:Boolean类型。设置该参数值为“true”进行字符集类型更改,配合characterEncoding=CHARSET设置字符集,二者使用“&”分隔。characterEncoding取值范围为UTF8、GBK、LATIN1、GB18030,缺省值为false。 说明: 当连接到字符集为GB18030_2022的数据库时,characterEncoding设置为GB18030_2022不生效,会默认使用UTF8,需要设置为GB18030才能正常解析服务端的GB18030_2022字符。 currentSchema:String类型。在search-path中指定要设置的Schema。如果Schema名包含除字母、数字、下划线之外的特殊字符,建议在Schema名上加引号,注意加引号后Schema名大小写敏感。如需配置多个Schema,要用“,”进行分隔,包含特殊字符的Schema也需要加引号处理。 例如:currentSchema=schema_a、"schema-b"、"schema/c"。 hostRecheckSeconds:Integer类型。JDBC尝试连接主机后会保存主机状态:连接成功或连接失败。在hostRecheckSeconds时间内保持可信,超过则状态失效。缺省值是10秒。 ssl:Boolean类型。以SSL方式连接。 ssl=true可支持NonValidatingFactory通道和使用证书的方式: 1、NonValidatingFactory通道需要配置用户名和密码,同时将SSL设置为true。 2、配置客户端证书、密钥、根证书,将SSL设置为true。 sslmode:String类型。SSL认证方式。取值范围为:disable、allow、prefer、require、verify-ca、verify-full。 disable:不使用SSL安全连接。 allow:如果数据库服务器要求使用,则可以使用SSL安全加密连接,但不验证数据库服务器的真实性。 prefer:如果数据库支持,那么首选使用SSL连接,但不验证数据库服务器的真实性。 require只尝试SSL连接,如果存在CA文件,则应设置成verify-ca的方式验证。 verify-ca只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书。 verify-full只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书,以及验证服务器主机名是否与证书中的一致。 sslcert:String类型。提供证书文件的完整路径。客户端和服务端证书的类型为End Entity。 sslkey:String类型。提供密钥文件的完整路径。使用时将客户端证书转换为DER格式。 openssl pkcs8 -topk8 -outform DER -in client.key -out client.key.pk8 -nocrypt sslrootcert:String类型。SSL根证书的文件名。根证书的类型为CA。 sslpassword:String类型。提供给ConsoleCallbackHandler使用。 sslpasswordcallback:String类型。SSL密码提供者的类名。缺省值:org.postgresql.ssl.jdbc4.LibPQFactory.ConsoleCallbackHandler。 sslfactory:String类型。提供的值是SSLSocketFactory在建立SSL连接时用的类名。 sslfactoryarg:String类型。此值是sslfactory类的构造函数的可选参数(不推荐使用)。 sslhostnameverifier:String类型。主机名验证程序的类名。接口实现javax.net.ssl.HostnameVerifier,默认使用org.postgresql.ssl.PGjdbcHostnameVerifier。 loginTimeout:Integer类型。指建立数据库连接的等待时间。超时时间单位为秒。当url配置多IP时,若获取连接花费的时间超过此值,则连接失败,不再尝试后续IP,缺省值为0。 connectTimeout:Integer类型。用于连接服务器操作的超时值。如果连接到服务器花费的时间超过此值,则连接断开。超时时间单位为秒,值为0时表示已禁用,timeout不生效。当url配置多IP时,表示连接单个IP的超时时间,缺省值为0。 socketTimeout:Integer类型。用于socket读取操作的超时值。如果从服务器读取所花费的时间超过此值,则连接关闭。超时时间单位为秒,值为0时表示已禁用,timeout不生效,缺省值为0。 socketTimeoutInConnecting:Integer类型。用于控制建连阶段socket读取操作的超时值。如果建连时从服务器读取所花费的时间超过此值,则查找下一个节点建连。超时时间单位为秒,默认为5s。 statementTimeout:Integer类型。用于控制connection中statement执行时间的超时值。如果statement执行时间超过此值,则取消该statement执行。超时时间单位为毫秒,值为0表示已禁用,timeout不生效,缺省值为0。 driverInfoMode:String类型。用于控制驱动描述信息的输出模式。取值范围为postgresql、gaussdb,默认缺省值为postgresql,输出postgresql相关的驱动描述信息;设置为gaussdb时输出gaussdb相关的驱动描述信息。 cancelSignalTimeout:Integer类型。发送取消消息本身可能会阻塞,此属性控制用于取消命令的“connect超时”和“socket超时”。超时时间单位为秒,默认值为10秒。 tcpKeepAlive:Boolean类型。启用或禁用TCP保活探测功能。默认为false。 logUnclosedConnections:Boolean类型。客户端可能由于未调用Connection对象的close()方法而泄漏Connection对象。最终这些对象将被垃圾回收,并且调用finalize()方法。如果调用者忽略了此操作,该方法将关闭Connection,缺省值为false。 assumeMinServerVersion:String类型。客户端会发送请求进行float精度设置。该参数设置要连接的服务器版本,如assumeMinServerVersion=9.0,可以在建立时减少相关包的发送。 ApplicationName:String类型。设置正在使用连接的JDBC驱动的名称。通过在数据库主节点上查询pg_stat_activity表可以看到正在连接的客户端信息,JDBC驱动名称显示在application_name列。缺省值为PostgreSQL JDBC Driver。 connectionExtraInfo:Boolean类型。表示驱动是否上报当前驱动的部署路径、进程属主用户到数据库。 取值范围:true或false,默认值为false。设置connectionExtraInfo为true,JDBC驱动会将当前驱动的部署路径、进程属主用户、url连接配置信息上报到数据库中,记录在connection_info参数里,同时可以在PG_STAT_ACTIVITY中查询到。 autosave:String类型。共有3种:"always"、"never"、"conservative"。如果查询失败,指定驱动程序应该执行的操作。在autosave=always模式下,JDBC驱动程序在每次查询之前设置一个保存点,并在失败时回滚到该保存点。在autosave=never模式(默认)下,无保存点。在autosave=conservative模式下,每次查询都会设置保存点,但是只会在“statement XXX无效”等情况下回滚并重试,缺省值为never。 protocolVersion:Integer类型。连接协议版本号,目前仅支持1和3。设置1时仅代表连接的是V1服务端。设置3时将采用MD5加密方式,需要同步修改数据库的加密方式,将GUC参数password_encryption_type设置为1,重启数据库生效后需要创建用MD5方式加密口令的用户。同时修改pg_hba.conf,将客户端连接方式修改为MD5,用新建用户进行登录(不推荐)。 说明: MD5加密算法安全性低,存在安全风险,建议使用更安全的加密算法。 prepareThreshold:Integer类型。控制parse语句何时发送。默认值是5。第一次parse一个SQL比较慢,后面再parse就会比较快,因为有缓存了。如果一个会话连续多次执行同一个SQL,在达到prepareThreshold次数以上时,JDBC将不再对这个SQL发送parse命令。 preparedStatementCacheQueries:Integer类型。确定每个连接中缓存的查询数,默认情况下是256。若在prepareStatement()调用中使用超过256个不同的查询,则最近最少使用的查询缓存将被丢弃。“0”表示禁用缓存。 preparedStatementCacheSizeMiB:Integer类型。确定每个连接可缓存的最大值(以兆字节为单位),默认情况下是5。若缓存了超过5MB的查询,则最近最少使用的查询缓存将被丢弃。“0”表示禁用缓存。 databaseMetadataCacheFields:Integer类型。默认值是65536。指定每个连接可缓存的最大值。“0”表示禁用缓存。 databaseMetadataCacheFieldsMiB:Integer类型。默认值是5。每个连接可缓存的最大值,单位是MB。“0”表示禁用缓存。 stringtype:String类型。可选字段为:false、"unspecified"、"varchar"。设置通过setString()方法使用的PreparedStatement参数的类型,如果stringtype设置为VARCHAR(默认值),则这些参数将作为varchar参数发送给服务器。若stringtype设置为unspecified,则参数将作为untyped值发送到服务器,服务器将尝试推断适当的类型。 batchMode:String类型。用于确定是否使用batch模式连接。默认值为on,表示开启batch模式。设置batchMode=on执行成功的返回结果为[count, 0, 0...0],数组第一个元素为批量影响的总条数;设置batchMode=off执行成功的返回结果为[1, 1, 1...1],数组各元素对应单次修改的影响条数。 fetchsize:Integer类型。用于设置数据库连接所创建statement的默认fetchsize。默认值为0,表示一次获取所有结果。与defaultRowFetchSize等价。 reWriteBatchedInserts:Boolean类型。批量导入时,该参数设置为true,可将N条插入语句合并为一条:insert into TABLE_NAME values(values1, ..., valuesN), ..., (values1, ..., valuesN);使用该参数时,需设置batchMode=off,缺省值为false。 unknownLength:Integer类型。默认为Integer.MAX_VALUE。某些postgresql类型(例如TEXT)没有明确定义的长度,当通过ResultSetMetaData.getColumnDisplaySize和ResultSetMetaData.getPrecision等函数返回关于这些类型的数据时,此参数指定未知长度类型的长度。 uppercaseAttributeName:Boolean类型。默认值为false不开启,为true时开启。该参数开启后会将获取元数据的接口的查询结果转为大写。适用场景为数据库中存储元数据全为小写,但要使用大写的元数据作为出参和入参。 涉及到的接口请参见:java.sql.DatabaseMetaData、java.sql.ResultSetMetaData defaultRowFetchSize:Integer类型。确定一次fetch在ResultSet中读取的行数。限制每次访问数据库时读取的行数可以避免不必要的内存消耗,从而避免OutOfMemoryException。缺省值是0,意味着ResultSet中将一次获取所有行。本参数不允许设置为负值。 binaryTransfer:Boolean类型。使用二进制格式发送和接收数据,默认值为“false”。 binaryTransferEnable:String类型。启用二进制传输的类型列表,以逗号分隔。OID编号和名称二选一,例如binaryTransferEnable=Integer4_ARRAY,Integer8_ARRAY。 比如:OID名称为BLOB,编号为88,可以如下配置: binaryTransferEnable=BLOB 或 binaryTransferEnable=88 binaryTransferDisEnable:String类型。禁用二进制传输的类型列表,以逗号分隔。OID编号和名称二选一。覆盖binaryTransferEnable的设置。 blobMode:String类型。用于设置setBinaryStream方法为不同类型的数据赋值,设置为on时表示为blob类型数据赋值,设置为off时表示为bytea类型数据赋值,默认为on。 socketFactory:String类型。用于创建与服务器socket连接的类的名称。该类必须实现接口“javax.net.SocketFactory”,并定义无参或单String参数的构造函数。 socketFactoryArg:String类型。此值是上面提供的socketFactory类的构造函数的可选参数,不推荐使用。 receiveBufferSize:Integer类型。该值用于设置连接流上的SO_RCVBUF。 sendBufferSize:Integer类型。该值用于设置连接流上的SO_SNDBUF。 preferQueryMode:String类型。共有4种:"extended", "extendedForPrepared", "extendedCacheEverything", "simple"。用于指定执行查询的模式,simple模式会excute,不parse和bind;extended模式会bind和excute;extendedForPrepared模式为prepared statement扩展使用;extendedCacheEverything模式会缓存每个statement。 targetServerType: String类型。该参数识别主备数据节点是通过查询URL连接串中,数据节点是否允许写操作来实现的,默认为"any"。共有五种:"any"、"master"、"slave"、"preferSlave"、"clusterMainNode"。 master则尝试连接到URL连接串中的主节点,如果找不到将抛出异常。 slave则尝试连接到URL连接串中的备节点,如果找不到将抛出异常。 preferSlave则尝试连接到URL连接串中的备数据节点(如果有可用节点),否则连接到主数据节点。 any则尝试连接URL连接串中的任何一个数据节点。 clusterMainNode则尝试连接到URL串中的主节点或主备(容灾主节点),如果找不到将抛出异常。 priorityServers:Integer类型。此值用于指定url上配置的前n个节点作为主数据库实例被优先连接。默认值为NULL。该值为数字,大于0,且小于url上配置的DN数量。用于流式容灾场景。 例如:jdbc:postgresql://host1:port1,host2:port2,host3:port3,host4:port4,/database?priorityServers=2。即表示host1与host2为主数据库实例节点,host3与host4为容灾数据库实例节点。 forceTargetServerSlave:Boolean类型。此值用于控制是否开启强制连接备机功能,并在数据库实例发生主备切换时,禁止已存在的连接在升主备机上继续使用。默认值为false,表示不开启强制连接备机功能。true,表示开启强制连接备机功能。 traceInterfaceClass:String类型。默认值为NULL,用于获取traceId的实现类。值是实现获取traceId方法接口org.postgresql.log.Tracer的实现类的完整限定类名。 use_boolean:Boolean类型。用于设置extended模式下setBoolean方法绑定的oid类型,默认为false,绑定int2类型。设置为true则绑定Boolean类型。 allowReadOnly:Boolean类型。用于设置是否允许只读模式,默认为true,允许设置只读模式;设置为false则禁用只读模式。 TLSCiphersSupperted:String类型。用于设置支持的TLS加密套件,默认为TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384。 stripTrailingZeros:Boolean类型。默认值为false,设置为true则去除numeric类型后的0,仅对ResultSet.getObject(int columnIndex)生效。 enableTimeZone:Boolean类型。默认值为true,用于指定是否启用服务端时区设置,ture表示获取JVM时区指定数据库时区,false表示使用数据库时区。 loadBalanceHosts:Boolean类型。在默认模式下(禁用),默认顺序连接URL中指定的多个主机。如果启用,则使用洗牌算法从候选主机中随机选择一个主机建立连接。集中式环境下,如果使用此参数需要保证业务中没有写操作。 oracleCompatible:String类型。默认为false。用户控制驱动接口的A兼容特性。有以下几种取值: 设置为true或on,表示开启驱动侧所有的A兼容特性。 设置为false或off,表示关闭驱动侧所有的A兼容特性。 设置为“tag1,tag2,tag3”,配置一个或多个tag,tag之间用“,”隔开,表示开启驱动侧部分的A兼容特性,每个tag对应一个A兼容特性。 当前支持的tag有: getProcedureColumns:DatabaseMetaData#getProcedureColumns接口的行为兼容A行为。 batchInsertAffectedRows:reWriteBatchedInserts开启后,执行批量插入接口Statement#executeBatch的返回结果兼容A行为。 printSqlInLog:Boolean类型。默认值为true,用于指定异常信息中或日志中是否输出sql语句,true表示启用,false表示禁用。 user 数据库用户。 password 数据库用户的密码。 uppercaseAttributeName参数开启后,如果数据库中有小写、大写和大小写混合的元数据,只能查询出小写部分的元数据,并以大写的形式输出。使用前请务必确认元数据的存储是否全为小写以避免数据出错。
  • 区域和可用区 区域和可用区用来描述数据中心的位置,您可以在特定的区域、可用区创建资源。 区域(Region):从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 可用区(AZ,Availability Zone):一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个实例。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 图1阐明了区域和可用区之间的关系。 图1 区域和可用区 目前,华为云已在全球多个地域开放云服务,您可以根据需求选择适合自己的区域和可用区。更多信息请参见华为云全球站点。
  • 数据库实例状态 数据库实例状态是数据库实例的运行情况。用户可以使用管理控制台和API操作查看数据库实例状态。 表1 状态及说明 状态 说明 正常 数据库实例正常和可用。 异常 数据库实例不可用。 创建中 正在创建数据库实例。 创建失败 数据库实例创建失败。 重启中 数据库实例重启中。 启动中 数据库实例启动中。 节点启动中 数据库实例节点启动中。 停止中 数据库实例停止中。 节点停止中 数据库实例节点停止中。 已停止 数据库实例/节点已停止。 扩容中 数据库实例磁盘扩容中。 添加节点中 数据库实例节点扩容中。 备份中 正在备份数据库实例。 恢复中 正在恢复备份到实例中。 恢复失败 实例恢复失败。 冻结 账户余额小于或等于0元,系统对该用户下的实例进行冻结。您需前往费用中心充值成功,欠款核销后,冻结的实例才会解冻。 存储空间满 实例的磁盘空间已满,此时不可进行数据库写入操作,您需要扩容磁盘使实例恢复到正常状态。 已删除 数据库实例已被删除,对于已经删除的实例,将不会在实例列表中显示。 版本升级中 实例版本正在升级中。 参数变更,等待重启 数据库参数修改后,有些参数修改,需等待用户重启实例才能生效。 变更副本中 数据库实例正在执行降副本操作。
  • 约束与限制 云数据库 GaussDB在使用上有一些固定限制,用来提高实例的稳定性和安全性,具体详见表1。 GaussDB 单副本部署实例禁止在生产环境使用,如在生产环境使用,不承诺SLA。且在功能上有相关约束,具体约束限制请参考表2。 表1 功能约束与限制 功能 使用限制 数据库访问 如果GaussDB实例未开通公网访问,则该实例必须与云主机弹性云服务器处在同一个虚拟私有云子网内才能相互访问。 弹性云服务器必须处于目标GaussDB实例所属安全组允许访问的范围内。 如果GaussDB实例与弹性云服务器处于不同的安全组,系统默认不能访问。需要在GaussDB的安全组添加一条“入”的访问规则。 GaussDB实例的默认端口为8000。 数据库端口支持创建时设置,后期可修改。 部署 实例所部署的服务器,对用户都不可见,即只允许应用程序通过IP地址和端口访问数据库。 数据库的root权限 创建实例页面只提供管理员root用户权限。 说明: 在2022.08.30后,GaussDB为root用户开放了sysadmin权限。新创建实例的root用户都将拥有sysadmin权限,而存量实例执行版本升级后,root用户也将拥有sysadmin权限,如果需要进行版本升级,请联系技术支持处理。 如果存量实例未进行版本升级,则管理员root用户权限为:createrole,createdb和monadmin。由于旧版本root权限低于完整的管理员用户权限, 部分SQL语法/函数执行时会报权限不足,例如:create tablespace 等 重启GaussDB实例 无法通过命令行重启,必须通过GaussDB的管理控制台操作重启实例。 GaussDB备份查看 GaussDB实例在对象存储服务上的备份文件,对用户不可见。 变更配置 默认不支持将规格参数变小,如需要将规格参数变小,您可以联系华为云技术支持,由华为云工程师给出分析评估后进行处理。 规格变更前,须确保实例状态正常。在实例异常、节点异常、磁盘满的情况下不允许进行规格变更。 高可用(1主2备)部署形态下,规格变更过程中会进行主备倒换,主备倒换过程中会有1min左右的业务中断。 单副本的部署形态下,规格变更过程中会进行中断重启,中断重启过程中会有5~10min的业务中断。 修改CPU/内存后,将会重启数据库实例,重启数据库实例将导致数据库业务短暂中断。 故障切换 对于主备版,主节点切换备节点,大概有10s左右服务不可用。 数据恢复 为避免数据丢失,建议数据恢复前备份重要数据。 存储空间 若实例的磁盘空间已满,此时不可进行数据库写入操作,您需要扩容磁盘使实例恢复到正常状态。建议定期检查存储空间。 性能优化 性能调优过程有时候需要重启集群,可能会中断当前业务。 表2 主备版单副本实例的基本功能限制 功能 3.0以下版本是否支持 3.0以上版本是否支持 创建实例 Y Y 重启实例 Y Y 参数修改 Y Y 参数应用 Y Y 重置密码 Y Y 全量备份 N Y 差量备份 N Y 删除备份 N Y 修改备份策略 N Y 恢复到当前实例 N Y 恢复到新实例 N Y 恢复到已有实例 N Y 磁盘扩容 Y Y 规格变更 Y Y 热补丁升级 N Y 就地升级 Y(仅支持升级至3.0以上版本) Y 灰度升级 N Y(仅3.207及以上版本支持) 查看监控指标 Y Y 实例删除 Y Y 回收站 N Y 查询磁盘使用 Y Y 创建数据库 Y Y 查询数据库 Y Y 创建schema及用户 Y Y 删除schema及用户 Y Y 执行数据库操作 Y Y
  • 责任共担 华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的云安全挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。 安全性是华为云与您的共同责任,如图1所示。 华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其所提供的 IaaS、PaaS 和 SaaS 类云服务自身的安全,涵盖华为云数据中心的物理环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更广义的安全合规遵从。 租户:负责云服务内部的安全,安全地使用云。 华为云租户的安全责任在于对使用的 IaaS、PaaS 和 SaaS 类云服务内部的安全以及对租户定制配置进行安全有效的管理,包括但不限于虚拟网络、虚拟主机和访客虚拟机的操作系统,虚拟防火墙、API 网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管理等方面的安全配置。 《华为云安全白皮书》详细介绍华为云安全性的构建思路与措施,包括云安全战略、责任共担模型、合规与隐私、安全组织与人员、基础设施安全、租户服务与租户安全、工程安全、运维运营安全、生态安全。 图1 华为云安全责任共担模型 父主题: 安全
  • 参数说明 WITH [ RECURSIVE ] with_query [, ...] 用于声明一个或多个可以在主查询中通过名称引用的子查询,相当于临时表。 如果声明了RECURSIVE,那么允许SELECT子查询通过名称引用它自己。 with_query_name指定子查询生成的结果集名称,在查询中可使用该名称访问 子查询的结果集。 column_name指定子查询结果集中显示的列名。 每个子查询可以是SELECT,VALUES,INSERT,UPDATE或DELETE语句。 用户可以使用MATERIALIZED / NOT MATERIALIZED对CTE进行修饰。 如果声明为MATERIALIZED,WITH查询将被物化,生成一个子查询结果集的拷贝,在引用处直接查询该拷贝,因此WITH子查询无法和主干SELECT语句进行联合优化(如谓词下推、等价类传递等),对于此类场景可以使用NOT MATERIALIZED进行修饰,如果WITH查询语义上可以作为子查询内联执行,则可以进行上述优化。 如果用户没有显示声明物化属性则遵守以下规则:如果CTE只在所属主干语句中被引用一次,且语义上支持内联执行,则会被改写为子查询内联执行,否则以CTE Scan的方式物化执行。 plan_hint子句 以/*+ */的形式在DELETE关键字后,用于对DELETE对应的语句块生成的计划进行hint调优,详细用法请参见章节使用Plan Hint进行调优。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。 ONLY 如果指定ONLY则只有该表被删除;如果没有声明,则该表和它的所有子表将都被删除。 table_name 目标表的名称(可以有模式修饰)。 取值范围:已存在的表名。 支持使用DATABASE LINK方式对远端表进行操作,使用方式详情请见DATABASE LINK。 partition_clause 指定分区删除操作。 PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } | SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, ...] ) } 关键字详见SELECT章节介绍。 示例详见CREATE TABLE SUBPARTITION。 partitions_clause 指定多个分区删除操作。 PARTITION { ( { partition_name | subpartition_name } [, ...] ) } 此语法仅在参数sql_compatibility='B'时生效。 关键字详见SELECT章节介绍。 示例详见CREATE TABLE SUBPARTITION。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 using_list using子句。 当参数sql_compatibility='B'或删除多张目标表时,using_list指定关联表的集合时可以同时出现目标表,并且可以定义表的别名并在目标表中使用。其他情况下则目标表不可重复出现在using_list中。 condition 一个返回Boolean值的表达式,用于判断哪些行需要被删除。不建议使用int等数值类型作为condition,因为int等数值类型可以隐式转换为bool值(非0值隐式转换为true,0转换为false),可能导致非预期的结果。 WHERE CURRENT OF cursor_name 当cursor指向表的某一行时,可以使用此语法删除cursor当前指向的行。使用限制及约束请参考UPDATE章节对此语法介绍。 ORDER BY子句 关键字详见SELECT章节介绍。 LIMIT子句 关键字详见SELECT章节介绍。 output_expr DELETE命令删除行之后计算输出结果的表达式。该表达式可以使用表的任意字段。可以使用*返回被删除行的所有字段。 output_name 一个字段的输出名称。 取值范围:字符串,符合标识符命名规范。
  • 语法格式 单表删除: [ WITH [ RECURSIVE ] with_query [, ...] ] DELETE [/*+ plan_hint */] [FROM] [ ONLY ] table_name [ * ] [ [ [partition_clause] [ [ AS ] alias ] ] | [ [ [ AS ] alias ] [partitions_clause] ] ] [ USING using_list ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ ORDER BY {expression [ [ ASC | DESC | USING operator ] [ LIMIT { count } ] [ RETURNING { * | { output_expr [ [ AS ] output_name ] } [, ...] } ];
  • 注意事项 表的所有者、被授予表DELETE权限的用户或被授予DELETE ANY TABLE权限的用户有权删除表中数据,当三权分立开关关闭时,系统管理员默认拥有此权限。同时也必须有USING子句引用的表以及condition上读取表的SELECT权限。 对于行存复制表,仅支持两种场景下的DELETE操作: 有主键约束的场景。 执行计划能下推的场景。 对于多表删除语法,暂时不支持对视图和含有RULE的表进行多表删除。 对于子查询是STREAM计划的DELETE语句,不支持删除的行数据同时进行UPDATE更新操作。
  • 在Linux下使用ODBC连接数据库 获取unixODBC源码包。 获取参考地址:https://www.unixodbc.org/unixODBC-2.3.7.tar.gz 下载后请先按照社区提供的完整性校验算法进行完整性校验。下载https://www.unixodbc.org/unixODBC-2.3.7.tar.gz.md5,查看MD5值,对比MD5值是否与源码包一致。 安装unixODBC。如果机器上已经安装了其他版本的unixODBC,可以直接覆盖安装。 以unixODBC-2.3.7版本为例,在客户端执行如下命令安装unixODBC。 tar zxvf unixODBC-2.3.7.tar.gz cd unixODBC-2.3.7 ./configure --enable-gui=no #如果要在ARM服务器上编译,请追加一个configure参数: --build=aarch64-unknown-linux-gnu make #安装可能需要root权限 make install 目前不支持unixODBC-2.2.1版本。 默认安装到“/usr/local”目录下,生成数据源文件到 “/usr/local/etc”目录下,库文件生成在“/usr/local/lib”目录。 通过编译带有--enable-fastvalidate=yes选项的unixODBC来获得更高性能。但此选项可能会导致向ODBC API传递无效句柄的应用程序发生故障,而不是返回SQL_INVALID_HANDLE错误。 替换客户端GaussDB驱动程序。 将GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Odbc.tar.gz解压。解压后会得到两个文件夹:lib与odbc,在odbc文件夹中还会有一个lib文件夹。将解压后得到的/lib文件夹与/odbc/lib文件夹中的所有动态库都复制到“/usr/local/lib”目录下。 配置数据源。 配置ODBC驱动文件。 在“/usr/local/etc/odbcinst.ini”文件中追加以下内容。 [GaussMPP] Driver64=/usr/local/lib/gsqlodbcw.so setup=/usr/local/lib/gsqlodbcw.so odbcinst.ini文件中的配置参数说明如表3所示。 表3 odbcinst.ini文件配置参数 参数 描述 示例 [DriverName] 驱动器名称,对应数据源DSN中的驱动名。 [DRIVER_N] Driver64 驱动动态库的路径。 Driver64=/usr/local/lib/gsqlodbcw.so setup 驱动安装路径,与Driver64中动态库的路径一致。 setup=/usr/local/lib/gsqlodbcw.so 配置数据源文件。 在“/usr/local/etc/odbc.ini”文件中追加以下内容。 [MPPODBC] Driver=GaussMPP Servername=127.0.0.1 #数据库Server IP Database=db1 #数据库名 Username=omm #数据库用户名 Password= #数据库用户密码 Port=8000 #数据库侦听端口 Sslmode=allow odbc.ini文件配置参数说明如表4 odbc.ini文件配置参数所示。 表4 odbc.ini文件配置参数 参数 描述 示例 [DSN] 数据源的名称。 [MPPODBC] Driver 驱动名,对应odbcinst.ini中的DriverName。 Driver=DRIVER_N Servername 服务器的IP地址。可配置多个IP地址。支持IPv4和IPv6。 Servername=127.0.0.1 Database 要连接的数据库的名称。 Database=db1 Username 数据库用户名称。 Username=omm Password 数据库用户密码。 说明: ODBC驱动本身已经对内存密码进行过清理,以保证用户密码在连接后不会再在内存中保留。 但是如果配置了此参数,由于UnixODBC对数据源文件等进行缓存,可能导致密码长期保留在内存中。 推荐在应用程序连接时,将密码传递给相应API,而非写在数据源配置文件中。同时连接成功后,应当及时清理保存密码的内存段。 注意: 配置文件中填写密码时,需要遵循http规则: 字符应当采用URL编码规范,如"!"应写作"%21","%"应写作"%25",因此应当特别注意字符。 "+"会被替换为空格" "。 Password=******** Port 服务器的端口号。 Port=8000 Sslmode 开启SSL模式。 Sslmode=allow 其中关于Sslmode的选项的允许值,具体信息如表3 Sslmode的可选项及其描述所示。 表5 Sslmode的可选项及其描述 Sslmode 是否会启用SSL加密 描述 disable 否 不使用SSL安全连接。 allow 可能 如果数据库服务器要求使用,则可以使用SSL安全加密连接,但不验证数据库服务器的真实性。 prefer 可能 如果数据库支持,那么首选使用SSL安全加密连接,但不验证数据库服务器的真实性。 require 是 必须使用SSL安全连接,但是只做了数据加密,并不验证数据库服务器的真实性。 verify-ca 是 必须使用SSL安全连接,并且验证数据库是否具有可信证书机构签发的证书。 verify-full 是 必须使用SSL安全连接,在verify-ca的验证范围之外,同时验证数据库所在主机的主机名是否与证书内容一致。GaussDB不支持此模式。 SSL模式。具体操作请联系数据库管理员。 配置数据库服务器。具体操作请联系数据库管理员。 在客户端配置环境变量。 vim ~/.bashrc 在配置文件中追加以下内容。 export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH export ODBCSYSINI=/usr/local/etc export ODBCINI=/usr/local/etc/odbc.ini 执行如下命令使设置生效。 source ~/.bashrc 执行以下命令,开始连接数据库。 isql -v GaussODBC GaussODBC为数据源名称 如果显示如下信息,表明配置正确,连接成功。 +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ 若显示ERROR信息,则表明配置错误。请检查上述配置是否正确。
  • 前提条件 已下载Linux版本的ODBC驱动包和Windows版本的ODBC驱动包。 Linux版本包名为GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Odbc.tar.gz。Linux环境下,开发应用程序要用到unixODBC提供的头文件(sql.h、sqlext.h等)和库libodbc.so。这些头文件和库可从unixODBC-2.3.7的安装包中获得。 Windows版本包名为GaussDB-Kernel_数据库版本号_Windows_Odbc_X64.tar.gz(64位)。Windows环境下,开发应用程序用到的相关头文件和库文件都由系统自带。
  • 获取驱动包 根据不同版本的实例,下载不同版本的发布包,如表2所示。 表2 驱动包下载列表 版本 下载地址 8.x 驱动包 驱动包校验包 3.x 驱动包 驱动包校验包 2.x 驱动包 驱动包校验包 为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的校验包对软件包进行校验,校验方法如下: 上传软件包和软件包校验包到虚拟机(Linux操作系统)的同一目录下。 执行如下命令,校验软件包完整性。 cat GaussDB_driver.zip.sha256 | sha256sum --check 如果回显OK,则校验通过。 GaussDB_driver.zip: OK
  • SQL使用入门 创建数据库用户。 默认只有集群安装时创建的管理员用户可以访问初始数据库,还可以创建其他数据库用户账号。 CREATE USER joe WITH PASSWORD "xxxxxxxxx"; 当结果显示为如下信息,则表示创建成功。 图4 创建数据库用户 如上创建了一个用户名为joe,密码为xxxxxxx的用户。 引申信息:关于数据库用户的更多信息请参考用户及权限。 创建数据库。 CREATE DATABASE db_tpcds; 当结果显示为如下信息,则表示创建成功。 图5 创建数据库 创建完db_tpcds数据库后,可以在左上方切换到新创建的库中。 图6 切换至新建数据库 创建表。 执行如下命令来创建一个schema。 CREATE SCHEMA myschema; 创建一个名称为mytable,只有一列的表。字段名为firstcol,字段类型为integer。 CREATE TABLE myschema.mytable (firstcol int); 向表中插入数据: INSERT INTO myschema.mytable values (100); 查看表中数据: SELECT * FROM myschema.mytable; 引申信息: 默认情况下,新的数据库对象是创建在“$user”模式下的,例如刚刚新建的表。关于模式的更多信息请参考创建和管理schema。 关于创建表的更多信息请参见创建和管理表。 除了创建的表以外,数据库还包含很多系统表。这些系统表包含集群安装信息以及GaussDB上运行的各种查询和进程的信息。可以通过查询系统表来收集有关数据库的信息。请参见查看系统表。 在db_tpcds库中,root用户下执行如下语句,将新创建的库db_tpcds的所有权限赋予新用户joe。 GRANT ALL ON DATABASE db_tpcds TO joe; GRANT USAGE ON schema myschema TO joe; GRANT ALL ON TABLE myschema.mytable TO joe; 新增joe用户登录数据库db_tpcds。 登录之后,在表中插入数据并验证。 INSERT INTO myschema.mytable values (200); SELECT * FROM myschema.mytable; 图7 插入数据并验证
  • GaussDB入门实践 当用户购买并连接到GaussDB数据库实例后,可以根据自身的业务需求使用GaussDB提供的一系列常用实践。 表1 GaussDB常用最佳实践 实践 描述 使用规范 数据库设计规范 介绍在使用GaussDB时,需要遵循的数据库对象命名规范、数据库设计规范、权限设计规范、表设计规范、字段设计规范、索引设计规范、函数/存储过程设计规范。 数据库编程规范 介绍在使用GaussDB时,需要遵循的GUC参数编程规范、 对象访问编程规范、WHERE、SELECT、INSERT、UPDATE、DELETE、关联查询、子查询、事务规范。 客户端编程规范 介绍在使用JDBC连接GaussDB时,需要遵循的编程规范。 数据库使用 创建数据库用户 介绍如何使用CREATE USER和ALTER USER语法创建和管理数据库用户。不同用户之间的数据并不共享。 创建和管理数据库 介绍使用CREATE DATABASE和ALTER DATABASE语法创建和管理数据库。 创建和管理表空间 通过使用表空间,管理员可以控制一个数据库安装的磁盘布局。介绍如何同SQL语法创建和管理表空间。 创建和管理表 表是建立在数据库中的,在不同的数据库中可以存放相同的表。可以通过使用模式在同一个数据库中创建相同名称的表。介绍如何使用SQL语法创建表。 查看系统表 除了创建的表以外,GaussDB还包含很多系统表。这些系统表包含集群安装信息以及GaussDB上运行的各种查询和进程的信息。介绍通过查询系统表来收集有关数据库的信息。 数据迁移 使用DRS迁移Oracle至GaussDB 介绍如何使用DRS将数据从Oracle迁移至GaussDB。 数据备份 设置自动备份策略 介绍如何在数据库实例的备份时段中创建数据库实例的自动备份,系统根据用户指定的备份保留期保存数据库实例的自动备份。 手动创建全量备份 介绍如何手动为数据库实例备份数据,用户可以通过手动备份恢复数据,从而保证数据可靠性。 删除手动备份 GaussDB支持对实例级和表级手动备份进行删除,从而释放相关存储空间。介绍如何删除实例手动备份。 数据恢复 通过指定备份文件恢复GaussDB实例数据 介绍如何使用已有的自动备份和手动备份,将实例数据恢复到备份被创建时的状态。该操作恢复的为整个实例的数据。 通过指定时间点恢复GaussDB实例 介绍如何使用已有的自动备份,恢复实例数据到指定时间点。
  • 使用示例 新建脚本文件。 新建一个test_jaydebeapi.py文件,写入代码如下: #!/usr/bin/env python3.x # -*- coding: UTF-8 -*- encoding = "utf8" import jaydebeapi def test_jaydebeapi(): #需要配置的参数 url = 'jdbc:opengauss://***.***.***.***:20000/test' user = '***' password = '******' driver = 'com.huawei.opengauss.jdbc.Driver' jarFile = './opengaussjdbc.jar' conn = jaydebeapi.connect(driver, url, [user, password], jarFile) cur = conn.cursor() #创建表students sql = 'create table students (id int, name varchar(20))' cur.execute(sql) #往students表中插入三组数据 sql = "insert into students values(1,'xiaoming'),(2,'xiaohong'),(3,'xiaolan')" cur.execute(sql) #查询students表中的所有数据 sql = 'select * from students' cur.execute(sql) ans = cur.fetchall() print(ans) #更新students表中的数据 sql = 'update students set name = \'xiaolv\' where id = 1' cur.execute(sql) #再次查询students表中的所有数据 sql = 'select * from students' cur.execute(sql) ans = cur.fetchall() print(ans) #删除表students sql = 'drop table students' cur.execute(sql) cur.close() conn.close() test_jaydebeapi() 配置代码中的参数: #连接url,设置数据库服务器IP、端口、数据库名 url = 'jdbc:opengauss://***.***.***.***:20000/test' #设置用户名 user = '***' #设置密码 password = '******' #JDBC驱动类路径 driver = 'com.huawei.opengauss.jdbc.Driver' #JDBC驱动jar包路径(默认放在与test_jaydebeapi.py文件同目录下) jarFile = './opengaussjdbc.jar' 执行程序。 使用以下命令执行test_jaydebeapi.py文件: python ./test_jaydebeapi.py 预期结果。 成功连接GaussDB数据库,并返回两次查询结果,如下所示: 图1 返回两次查询结果
  • 环境配置 配置GaussDB开发环境。 准备好基本的 GaussDB 开发环境,获取数据库连接参数,例如: gsql -h ***.***.***.*** -p 20000 -U *** -W ****** -d test 参数说明: -h:GaussDB服务器IP。 -p:GaussDB连接端口。 -U:连接用户名。 -W:用户密码。 -d:连接的DATABASE名。 安装JayDeBeApi驱动。 在计算机上安装Java JDK 8版本以及Python3版本,可以通过如下命令确认版本: java -version python --version pip --version 如果服务器能连接到Python源(Python的软件包索引PyPI),可以通过pip命令安装JayDeBeApi: pip install jaydebeapi 如果不能,可以通过下载离线安装包然后进行本地安装的方式安装JayDeBeApi。 获取GaussDB驱动程序安装包。 根据不同版本的实例,下载不同版本的发布包,如表1所示。 表1 驱动包下载列表 版本 下载地址 3.x 驱动包 驱动包校验包 2.x 驱动包 驱动包校验包 为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的校验包对软件包进行校验,校验方法如下: 上传软件包和软件包校验包到虚拟机(Linux操作系统)的同一目录下。 执行如下命令,校验软件包完整性。 cat GaussDB_driver.zip.sha256 | sha256sum --check 如果回显OK,则校验通过。 GaussDB_driver.zip: OK
  • 环境配置 配置GaussDB开发环境。 准备好基本的 GaussDB 开发环境,获取数据库连接参数,例如: gsql -h ***.***.***.*** -p 20000 -U *** -W ****** -d test 参数说明: -h:GaussDB服务器IP。 -p:GaussDB连接端口。 -U:连接用户名。 -W:用户密码。 -d:连接的DATABASE名。 安装JayDeBeApi驱动。 在计算机上安装Java JDK 8版本以及Python3版本,可以通过如下命令确认版本: java -version python --version pip --version 如果服务器能连接到Python源(Python的软件包索引PyPI),可以通过pip命令安装JayDeBeApi: pip install jaydebeapi 如果不能,可以通过下载离线安装包然后进行本地安装的方式安装JayDeBeApi。 获取GaussDB驱动程序安装包。 根据不同版本的实例,下载不同版本的发布包,如表1所示。 表1 驱动包下载列表 版本 下载地址 3.x 驱动包 驱动包校验包 2.x 驱动包 驱动包校验包 为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的校验包对软件包进行校验,校验方法如下: 上传软件包和软件包校验包到虚拟机(Linux操作系统)的同一目录下。 执行如下命令,校验软件包完整性。 cat GaussDB_driver.zip.sha256 | sha256sum --check 如果回显OK,则校验通过。 GaussDB_driver.zip: OK
  • 使用示例 新建脚本文件。 新建一个test_jaydebeapi.py文件,写入代码如下: #!/usr/bin/env python3.x # -*- coding: UTF-8 -*- encoding = "utf8" import jaydebeapi def test_jaydebeapi(): #需要配置的参数 url = 'jdbc:opengauss://***.***.***.***:20000/test' user = '***' password = '******' driver = 'com.huawei.opengauss.jdbc.Driver' jarFile = './opengaussjdbc.jar' conn = jaydebeapi.connect(driver, url, [user, password], jarFile) cur = conn.cursor() #创建表students sql = 'create table students (id int, name varchar(20))' cur.execute(sql) #往students表中插入三组数据 sql = "insert into students values(1,'xiaoming'),(2,'xiaohong'),(3,'xiaolan')" cur.execute(sql) #查询students表中的所有数据 sql = 'select * from students' cur.execute(sql) ans = cur.fetchall() print(ans) #更新students表中的数据 sql = 'update students set name = \'xiaolv\' where id = 1' cur.execute(sql) #再次查询students表中的所有数据 sql = 'select * from students' cur.execute(sql) ans = cur.fetchall() print(ans) #删除表students sql = 'drop table students' cur.execute(sql) cur.close() conn.close() test_jaydebeapi() 配置代码中的参数: #连接url,设置数据库服务器IP、端口、数据库名 url = 'jdbc:opengauss://***.***.***.***:20000/test' #设置用户名 user = '***' #设置密码 password = '******' #JDBC驱动类路径 driver = 'com.huawei.opengauss.jdbc.Driver' #JDBC驱动jar包路径(默认放在与test_jaydebeapi.py文件同目录下) jarFile = './opengaussjdbc.jar' 执行程序。 使用以下命令执行test_jaydebeapi.py文件: python ./test_jaydebeapi.py 预期结果。 成功连接GaussDB数据库,并返回两次查询结果,如下所示: 图1 查询结果
  • WAL归档配置 WAL(Write Ahead Log)即预写式日志,也称为Xlog 。wal_level决定了写入WAL的信息量。为了在备机上开启只读查询,wal_level需要在主机上设置成hot_standby,并且备机设置hot_standby参数为on。对于分布式环境,不支持设置hot_standby为off,因此wal_level不可设置为archive或minimal,否则数据库将无法启动。建议设置wal_level参数为默认值hot_standby。 父主题: 安全介绍
  • 如何创建终端节点? ICAgent目前支持通过创建终端节点和AOM/LTS服务打通网络,然后进行ICAgent心跳以及日志上报。 要通过终端节点的方式打通网络,需要分别购买2个终端节点,一个终端节点用来打通和AOM的网络,用于ICAgent的上报心跳和指标上报,一个终端节点用来打通和LTS的网络,用于ICAgent上报日志。 目前此功能仅支持西南-贵阳一局点,其他局点暂不支持。 创建AOM/LTS终端节点的方法: 登录华为云VPC终端节点 VPCEP控制台,进入终端节点页面。 单击“购买终端节点”。 在购买终端节点页面,选择ICAgent所在的区域,“服务类别”选择“云服务”,在“选择服务”下方查找并选择AOM的云服务,并且勾选“创建内网域名”,选择ICAgent所在节点的虚拟私有云和子网,其他参数默认设置,更多操作请参考购买终端节点。 设置完成后,单击“立即购买”。购买成功后,即可完成AOM终端节点的创建。 重复上面步骤,需要再购买1个终端节点,选择ICAgent所在的区域,“服务类别”选择“云服务”,在“选择服务”下方查找并选择LTS的云服务,并且勾选“创建内网域名”,选择ICAgent所在节点的虚拟私有云和子网,其他参数默认设置。 设置完成后,单击“立即购买”。购买成功后,即可完成了LTS终端节点的创建。 父主题: 主机管理
  • 如何创建终端节点? 当前支持通过创建终端节点和AOM/LTS服务打通网络,进行心跳和指标上报,以及日志上报。如果要通过终端节点的方式打通AOM/LTS的网络,需要为AOM和LTS各自购买1个终端节点。 目前此功能仅支持西南-贵阳一局点,其他局点暂不支持。 创建AOM/LTS终端节点的方法: 登录华为云VPC终端节点 VPCEP控制台,进入终端节点页面。 单击“购买终端节点”。 在购买终端节点页面,选择终端节点所在的区域,“服务类别”选择“云服务”,在“选择服务”下方查找并选择AOM的云服务,并且勾选“创建内网域名”,选择终端节点所在的虚拟私有云和子网,其他参数默认设置,更多操作请参考购买终端节点。 设置完成后,单击“立即购买”。购买成功后,即可完成AOM终端节点的创建。 重复上面步骤,需要再购买1个终端节点,选择终端节点所在的区域,“服务类别”选择“云服务”,在“选择服务”下方查找并选择LTS的云服务,并且勾选“创建内网域名”,选择终端节点所在的虚拟私有云和子网,其他参数默认设置。 设置完成后,单击“立即购买”。购买成功后,即可完成了LTS终端节点的创建。 父主题: 采集管理
  • 2022年08月 序号 功能名称 功能描述 阶段 相关文档 1 DDS实例将按照整机计费 文档数据库服务DDS实例主资源以及子资源的产品类型、产品以及资源ID信息在账单中均以主资源的产品类型、产品以及资源ID信息进行显示。 原主资源ID的“instanceId.cluster”变更为“instanceId”,与DDS云服务控制台列表中显示的实例ID保持一致(例:订单、账单中9521482c50b42c5a6eab8cb1df9df55in02.cluster变更为69521482c50b42c5a6eab8cb1df9df55in02),已出的历史账单信息不变。 商用 -- 2 充值页面中增加提示,提升用户感知及体验 充值页面中增加“如您有未还清账单,充值后优先抵扣未还清账单”提示,提升用户感知及体验。 商用 账户充值 3 降配订单账单类型优化 降配订单对应账单的账单类型由“退款-退订”优化为“退款-变更”。历史已出账的降配账单类型保持不变,仍为“退款-退订”。 商用 流水账单文件格式介绍 资源按账期账单文件格式介绍 使用量类型明细账单文件格式介绍 4 客户在索取发票时可自行切换普票与专票 客户在索取发票时,可进行普票和专票的切换。 发票抬头是“个人”时,只支持普票,不支持切换。 发票抬头是“企业”时,从专票切换成普票,直接从下拉框选择即可。 发票抬头是“企业”时,从普票切换成专票,从下拉框选择专票时,如果专票信息不完整,需要根据页面提示补充相关信息。 商用 开具华为云发票 5 框架合同条款增加订单退订免手续费履行 若客户有已生效的框架合同且框架合同有退订免手续费条款,则在退订资源时免除退订手续费。 商用 包年/包月资源退订规则 6 大额退订增加审核时间提示 退订资源时,当退订金额认定为大额退订,弹窗增加“审核时间、了解大额退订”提示。 系统默认退订金额超过5万元为大额退订,需要客户经理审批,默认审核时间为24小时,超过24小时未审批,则自动审批通过。 退订订单费用归属退订成功的当月账单;如果是月末大额退订,下月审核退订成功,退订订单费用归属下月账单。 商用 大额退订定义以及注意事项
  • 2022年07月 序号 功能名称 功能描述 阶段 相关文档 1 提现交互体验优化,展示提现进度、新增预计到账时间 登录费用中心,提现页面优化点如下: 提现交互方式由弹窗step步骤化样式改为新页面,基本逻辑不变。 提示信息增加“提现规则”和“更多问题”,分别链接到现有资料。 增加可提现金额的公式构成,欠票金额增加文案描述。 提现记录列表和提现申请提交结果页面,增加“预计到账时间”,提升用户对提现进度的感知。 商用 余额提现 提现规则 更多问题 2 账单字段优化 从2022/08/01 00:00:00开始,按需产品按使用量查看和导出费用账单时,“按账期”和“按天”维度的账单新增“优惠类型”和“优惠信息”字段。 2022/08/01 00:00:00以前的历史数据中不展示“优惠类型”和“优惠信息”字段取值,统一设置为“--” 商用 -- 3 退订资源流程优化 新购资源开通存在部分成功部分失败的场景,开通失败的资源自动退订,退订开通成功的资源有如下三种情况: 若账号有五天无理由退订次数,则五天内退订开通成功的资源属于五天无理由退订,且占用五天无理由退订次数; 若账号没有五天无理由退订次数,则五天内退订开通成功的资源仍属于非五天无理由退订,需要收取手续费、已消费金额,不退还已使用代金券和折扣券。 超过五天后退订开通成功的资源,为非五天无理由退订,需要收取手续费、已消费金额,不退还已使用代金券和折扣券。 商用 退订使用中的资源说明
  • 2023年03月 序号 功能名称 功能描述 阶段 相关文档 1 RDS实例将按照整机出账 数据库服务RDS实例主资源以及子资源的产品类型、产品以及资源ID信息在账单中均以主资源的产品类型、产品以及资源ID信息进行显示,已出的历史账单信息不变。 商用 华为云数据库服务RDS整机出账变更通知 2 账单呈现用量单位按照定价量纲转换 账单页面列表中,使用量按照产品上架时定价采用的使用量单位进行展示,账单导出xlsx文件中新增如下字段:使用量(定价量纲)、使用量单位(定价量纲)、套餐内用量(定价量纲)、预留实例内用量(定价量纲)、使用量转换比率。 转换后的使用量最多保留小数点后10位,截断处理。 账单概览页面 按“产品规格”导出“月账单”,PDF中的使用量换为定价的使用量单位显示。xlsx文件中新增上述字段。 汇总表格(按产品规格)列表中,新增上述字段。 汇总表格(按产品规格)导出的xlsx文件中新增上述字段。 明细账单页面 “统计维度”选择“按使用量”,“统计周期”选择“按账期”、“按天”或“明细”。 账单列表中,新增上述字段。 导出的xlsx文件中新增上述字段。 OBS文件订阅 使用量明细账单,添加账单上述字段。 商用 概览 流水和明细账单 账单字段说明 使用量类型明细账单文件格式介绍 3 电子章的对账单支持根据产品类型单独导出 按产品和产品规格导出月账单时,支持按“产品类型”导出,“产品类型”可多选。 客户设置了“产品类型”参数时,“导出记录”页面展示产品类型。内容过多时,截取展示部分,后边显示…。鼠标悬停在…时,展示全部内容。 客户设置了“产品类型”参数时,导出文件中展示“导出产品类型”。 选择指定产品类型导出时均按照预付费账单格式导出账单,不提供后付费相关内容:后付费账单列表、本期应还金额、本期剩余应还金额、总信用额度、到期还款日。 商用 概览 导出记录
  • 2023年05月 序号 功能名称 功能描述 阶段 相关文档 1 费用中心的页面操作接入到CTS 客户开启云审计服务后,费用中心支持上报客户的关键操作请求记录到云审计服务CTS,以便于日后的查询、审计和回溯。 登录云审计服务,可以通过“云服务”、“资源类型”筛选费用中心的相关操作。 商用 支持云审计的关键操作 2 费用中心提现页面放开可提现金额公式,并增加相关提示和帮助链接。 放开展示可提现金额公式限制,无论客户可提现金额是否大于0,都固定展示该公式。 公式中的实际欠票金额增加相关FAQ跳转链接。 温馨提示增加:3.因历史退款等原因导致的欠票金额,不可提现。您可以进入“发票管理”页面进行欠票处理操作。 商用 提现页面的实际欠票金额如何计算? 提现时有欠票怎么办? 3 华为云纸质发票邮寄费用规则更改 华为云纸质发票,开票金额小于10元时,客户自行承担快递费用。 商用 发票邮寄费用由谁来支付? 4 续费资源/再次购买资源包/按需转包年包月资源页面增加展示支持使用的代金券信息 客户对资源操作续费/再次购买资源包/按需转包年包月资源时,如果客户账号下有可使用的代金券,且代金券适用于该资源,则页面增加“本商品支持使用代金券 查看详情”字段,通过单击“查看详情”查看可用代金券信息。 商用 --
  • 2024年04月 序号 功能名称 功能描述 阶段 相关文档 1 资源包默认自动续费周期调整 资源包购买页设置自动续费,自动续费周期=产品的最小可售卖周期,通常为1个月或1年(按月购买:自动续费周期为1个月;按年购买:自动续费周期为1年),与包年/包月资源默认自动续费周期保持一致。 商用 自动续费规则说明 2 五天无理由退订接入风控 如客户存在恶意退订行为,华为云有权取消其五天无理由退订权利并收取相应费用。 因恶意退订被风控的客户,不能再使用五天无理由退订。“五天无理由退订”页签展示提示“当前账号存在安全风险,暂时无法使用五天无理由退订。若有疑问请联系客服。前往非五天无理由退订”。 被风控客户仍可以通过非五天无理由退订资源,非五天无理由退订需扣除已消费金额,收取手续费。 商用 可五天无理由退订 3 云商店发票支持服务商开具不同介质不同类型的发票 开具云商店发票时,支持服务商开具不同介质不同类型的发票,包括:“增值税普通发票-数电发票”、“增值税普通发票-电子发票”、“增值税普通发票-纸质发票”以及“增值税专用发票-数电发票”、“增值税专用发票-电子发票”、“增值税专用发票-纸质发票”。 每个服务商会支持开具前述发票类型中的若干种类型,由云商店服务商自行设置。 商用 开具云商店发票 4 发票抬头名称长度限制不超过100个字节 发票信息维护页面 新增、修改发票信息时,当发票抬头可编辑时,限制长度不能超过100个字节。 索取华为云发票页面 当前用户是企业用户,提示:您的发票抬头长度超过100个字节(50个汉字),暂不支持开票,请您联系华为云的客户经理,帮您新增合规的发票抬头。 当前用户是个人用户,提示:您的发票抬头长度超过100个字节(50个汉字),暂不支持开票,请您重新填写发票抬头。 单击“修改”,在编辑发票信息页面,限制发票抬头长度不能超过100个字节。 商用 开具华为云发票
  • 示例:授予命名空间只读权限(view) view权限拥有命名空间查看权限,您可以给某个或全部命名空间授权。 图8 授予default命名空间只读权限(view) 如果使用kubectl查看可以看到创建了一个RoleBinding,将view和cce-role-group这个用户组绑定了起来,且权限范围是default这个命名空间。 # kubectl get rolebinding NAME ROLE AGE clusterrole_view_group0c96fad22880f32a3f84c009862af6f7 ClusterRole/view 7s # kubectl get rolebinding clusterrole_view_group0c96fad22880f32a3f84c009862af6f7 -oyaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: annotations: CCE.com/IAM: "true" creationTimestamp: "2021-06-24T01:36:53Z" name: clusterrole_view_group0c96fad22880f32a3f84c009862af6f7 namespace: default resourceVersion: "36965800" selfLink: /apis/rbac.authorization.k8s.io/v1/namespaces/default/rolebindings/clusterrole_view_group0c96fad22880f32a3f84c009862af6f7 uid: b86e2507-e735-494c-be55-c41a0c4ef0dd roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: view subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: 0c96fad22880f32a3f84c009862af6f7 使用被授予用户连接集群,您会发现可以查询default命名空间的资源,但无法创建资源。 # kubectl get pod NAME READY STATUS RESTARTS AGE test-568d96f4f8-brdrp 1/1 Running 0 40m test-568d96f4f8-cgjqp 1/1 Running 0 40m # kubectl run -i --tty --image tutum/dnsutils dnsutils --restart=Never --rm /bin/sh Error from server (Forbidden): pods is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot create resource "pods" in API group "" in the namespace "default"
  • 示例:授予集群管理员权限(cluster-admin) 集群全部权限可以使用cluster-admin权限,cluster-admin包含集群所有资源的权限。 图5 授予集群管理员权限(cluster-admin) 如果使用kubectl查看可以看到创建了一个ClusterRoleBinding,将cluster-admin和cce-role-group这个用户组绑定了起来。 # kubectl get clusterrolebinding NAME ROLE AGE clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7 ClusterRole/cluster-admin 61s # kubectl get clusterrolebinding clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7 -oyaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: annotations: CCE.com/IAM: "true" creationTimestamp: "2021-06-23T09:15:22Z" name: clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7 resourceVersion: "36659058" selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7 uid: d6cd43e9-b4ca-4b56-bc52-e36346fc1320 roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: 0c96fad22880f32a3f84c009862af6f7 使用被授予用户连接集群,如果能正常查询PV、StorageClass的信息,则说明权限配置正常。 # kubectl get pv No resources found # kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE csi-disk everest-csi-provisioner Delete Immediate true 75d csi-disk-topology everest-csi-provisioner Delete WaitForFirstConsumer true 75d csi-nas everest-csi-provisioner Delete Immediate true 75d csi-obs everest-csi-provisioner Delete Immediate false 75d csi-sfsturbo everest-csi-provisioner Delete Immediate true 75d
  • 示例:授予命名空间运维权限(admin) admin权限拥有命名空间大多数资源的读写权限,您可以授予用户/用户组全部命名空间admin权限。 图6 授予全部命名空间运维权限(admin) 如果使用kubectl查看可以看到创建了一个RoleBinding,将admin和cce-role-group这个用户组绑定了起来。 # kubectl get rolebinding NAME ROLE AGE clusterrole_admin_group0c96fad22880f32a3f84c009862af6f7 ClusterRole/admin 18s # kubectl get rolebinding clusterrole_admin_group0c96fad22880f32a3f84c009862af6f7 -oyaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: annotations: CCE.com/IAM: "true" creationTimestamp: "2021-06-24T01:30:08Z" name: clusterrole_admin_group0c96fad22880f32a3f84c009862af6f7 resourceVersion: "36963685" selfLink: /apis/rbac.authorization.k8s.io/v1/namespaces/default/rolebindings/clusterrole_admin_group0c96fad22880f32a3f84c009862af6f7 uid: 6c6f46a6-8584-47da-83f5-9eef1f7b75d6 roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: admin subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: 0c96fad22880f32a3f84c009862af6f7 使用被授予用户连接集群,如果能正常查询PV、StorageClass的信息,但无法创建命名空间,则说明权限配置正常。 # kubectl get pv No resources found # kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE csi-disk everest-csi-provisioner Delete Immediate true 75d csi-disk-topology everest-csi-provisioner Delete WaitForFirstConsumer true 75d csi-nas everest-csi-provisioner Delete Immediate true 75d csi-obs everest-csi-provisioner Delete Immediate false 75d csi-sfsturbo everest-csi-provisioner Delete Immediate true 75d # kubectl apply -f namespaces.yaml Error from server (Forbidden): namespaces is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot create resource "namespaces" in API group "" at the cluster scope
  • 自定义命名空间权限(kubectl) kubectl访问CCE集群是通过集群上生成的配置文件(kubeconfig.json)进行认证,kubeconfig.json文件内包含用户信息,CCE根据用户信息的权限判断kubectl有权限访问哪些Kubernetes资源。即哪个用户获取的kubeconfig.json文件,kubeconfig.json就拥有哪个用户的信息,这样使用kubectl访问时就拥有这个用户的权限。而用户拥有的权限就是集群权限(IAM授权)与命名空间权限(Kubernetes RBAC授权)的关系所示的权限。 除了使用cluster-admin、admin、edit、view这4个最常用的clusterrole外,您还可以通过定义Role和RoleBinding来进一步对命名空间中不同类别资源(如Pod、Deployment、Service等)的增删改查权限进行配置,从而做到更加精细化的权限控制。 Role的定义非常简单,指定namespace,然后就是rules规则。如下面示例中的规则就是允许对default命名空间下的Pod进行GET、LIST操作。 kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: default # 命名空间 name: role-example rules: - apiGroups: [""] resources: ["pods"] # 可以访问pod verbs: ["get", "list"] # 可以执行GET、LIST操作 apiGroups表示资源所在的API分组。 resources表示可以操作哪些资源:pods表示可以操作Pod,其他Kubernetes的资源如deployments、configmaps等都可以操作 verbs表示可以执行的操作:get表示查询一个Pod,list表示查询所有Pod。您还可以使用create(创建), update(更新), delete(删除)等操作词。 详细的类型和操作请参见使用 RBAC 鉴权。 有了Role之后,就可以将Role与具体的用户绑定起来,实现这个的就是RoleBinding了。如下所示。 kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: RoleBinding-example namespace: default annotations: CCE.com/IAM: 'true' roleRef: kind: Role name: role-example apiGroup: rbac.authorization.k8s.io subjects: - kind: User name: 0c97ac3cb280f4d91fa7c0096739e1f8 # user-example的用户ID apiGroup: rbac.authorization.k8s.io 这里的subjects就是将Role与IAM用户绑定起来,从而使得IAM用户获取role-example这个Role里面定义的权限,如下图所示。 图4 RoleBinding绑定Role和用户 subjects下用户的类型还可以是用户组,这样配置可以对用户组下所有用户生效。 subjects: - kind: Group name: 0c96fad22880f32a3f84c009862af6f7 # 用户组ID apiGroup: rbac.authorization.k8s.io 使用IAM用户user-example连接集群,获取Pod信息,发现可获取到Pod的信息。 # kubectl get pod NAME READY STATUS RESTARTS AGE deployment-389584-2-6f6bd4c574-2n9rk 1/1 Running 0 4d7h deployment-389584-2-6f6bd4c574-7s5qw 1/1 Running 0 4d7h deployment-3895841-746b97b455-86g77 1/1 Running 0 4d7h deployment-3895841-746b97b455-twvpn 1/1 Running 0 4d7h nginx-658dff48ff-7rkph 1/1 Running 0 4d9h nginx-658dff48ff-njdhj 1/1 Running 0 4d9h # kubectl get pod nginx-658dff48ff-7rkph NAME READY STATUS RESTARTS AGE nginx-658dff48ff-7rkph 1/1 Running 0 4d9h 然后查看Deployment和Service,发现没有权限;再查询kube-system命名空间下的Pod信息,发现也没有权限。这就说明IAM用户user-example仅拥有default这个命名空间下GET和LIST Pod的权限,与前面定义的没有偏差。 # kubectl get deploy Error from server (Forbidden): deployments.apps is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "deployments" in API group "apps" in the namespace "default" # kubectl get svc Error from server (Forbidden): services is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "services" in API group "" in the namespace "default" # kubectl get pod --namespace=kube-system Error from server (Forbidden): pods is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "pods" in API group "" in the namespace "kube-system"
共100000条