华为云用户手册

  • 原因分析 查看mysql.user表中的root账号信息,排查客户端IP范围是否正确、是否使用SSL。 SELECT * FROM mysql.user WHERE User='root'; 如果发现root账号的ssl_type被设置为ANY,表明root账号需要使用SSL连接。 查看SSL开启情况。 show variables like '%ssl%'; 发现该实例未开启SSL: 因此,问题原因是自行修改root账号的ssl_type为ANY后,导致无法登录。
  • 解决方案 对于mariadb-java-client-2.7.5的连接串应该为: 不提供CA证书,不对服务端证书校验: String url = "jdbc:mysql://ip:port/mysql?useSsl=true&trustServerCertificate=true"; 提供CA证书,对服务端证书进行校验: String url = "jdbc:mysql://ip:port/mysql?useSsl=true&serverSslCert=D:\\ca.pem&disableSslHostnameVerification=true"; 注意:RDS for MySQL实例不支持hostname校验,因此需要设置disableSslHostnameVerification=true,不同mariadb jar包版本设置方式不同,可查看对应版本的使用说明。
  • 场景描述 在搭建canal环境,使用指定用户从RDS for MySQL获取Binlog时,启动canal经常会报如下错误:'show master status' has an error! Access denied: you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation 报错信息如下: 2021-01-10 23:58:32.964 [destination = evoicedc , address = /dbus-mysql:3306 , EventParser] ERROR xxx.common.alarm.LogAlarmHandler - destination:evoicedc[xxx.parse.exception.CanalParseEx ception: command : 'show master status' has an error! Caused by: java.io.IOException: ErrorPacket [errorNumber=1227, fieldCount=-1, message=Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation, sqlState=42000, sqlStateMarker=#] with command: show master status at xxx.parse.driver.mysql.MysqlQueryExecutor.query(MysqlQueryExecutor.java:61)
  • 原因分析 如果用户旧账号是通过delete删除,再次创建用户会报错。 创建用户时,一般使用create user或者grant语句来创建,create语法创建的用户没有任何权限,需要再使用grant语法来分配权限,而grant语法创建的用户直接拥有所分配的权限。 使用drop user方法删除用户的时候,会连通db表和权限表一起清除。而使用delete from mysql.user只会删除user表里的记录,如果用show grants for username来查看,会发现这个用户的相关权限依然有残留,这时候再新建一样的用户,就会触发校验导致创建失败。
  • 解决方案 由于8.0版本不支持password函数,因此需要通过以下步骤恢复: 找出rdsAdmin账号的authentication_string字段,使用以下命令更新: update mysql.user set authentication_string='XXX' 其中XXX为新修改的密码。 重置root账号密码。 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'XXX'; flush privileges; 修改后用户就可以正常登录root账号。
  • 原因分析 查询确认,发现消失的账号在mysql.user表中已经被删除,因此在控制台不再显示。 使用账号名和旧密码还能连接登录,说明使用的是delete from mysql.user方式删除用户。使用这种方式删除用户,需要执行flush privileges后,才会清理内存中相关数据,该用户才彻底不能登录。 使用delete from mysql.user方式删除用户,无法重新创建相应账户(报错ERROR 1396),原因是内存中相关数据仍然存在。 正确删除用户的方式为drop user语句,注意以下几点: drop user语句可用于删除一个或多个用户,并撤销其权限。 使用drop user语句必须拥有MySQL数据库的DELETE权限或全局CREATE USER权限。 在drop user语句的使用中,若没有明确地给出账户的主机名,则该主机名默认为“%”。 故障场景恢复示例: 创建用户后用delete删除用户,再创建同名用户时报错ERROR 1396。通过执行flush privileges后,可正常创建同名用户。
  • 故障二 排查是否在创建RDS for MySQL用户时,添加了max_user_connections选项,导致限制了连接数。 select user,host ,max_user_connections from mysql.user where user=‘test'; 经排查发现由于设置了max_user_connections选项,导致连接失败。 增加该用户最大连接数。 alter user test@‘192.168.0.100' with max_user_connections 15。 查询变更结果,检查是否可正常访问数据库。
  • 故障描述 客户端无法连接数据库,连接数据库时返回如下报错信息: 故障一 ERROR 1045 (28000): Access denied for user ‘root'@‘192.168.0.30' (using password:YES) 故障二 ERROR 1226 (42000):User‘test' has exceeded the‘max_user_connections' resource (current value:10) 故障三 ERROR 1129 (HY000): Host ‘192.168.0.111' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
  • 故障一 排查密码root账号的密码是否正确。 一般情况下,ERROR 1045报错为密码错误引起的,因此需要首要排除是否密码错误问题。 select password(‘Test1i@123'); select host,user,Password from mysql.user where user=‘test1'; 使用错误的密码登录就会失败。 确认该主机是否有连接数据库实例的权限。 select user, host from mysql.user where user=‘username'; 如果该数据库用户需要从其他主机登录,则需要使用root用户连接数据库,并给该用户授权。 以加入主机IP为192.168.0.76举例: GRANT all privileges ON test.* TO 'test1'@'192.168.0.76' identified by 'Test1i@123'; flush privileges; 确认RDS for MySQL客户端和实例VIP的连通性。 尝试进行ping连接性能,若可以ping通,排除telnet数据库端口的问题。 查看实例安全组,排查是否因安全策略问题引起的报错。 查询user表信息,确认用户信息。 在排查中发现存在两个root用户。 如果用户的客户端处于192.168的网段,RDS for MySQL数据库的是对root@'192.168.%'这个用户进行认证的。而用户登录时使用的为root@'%'这个账号所对应的密码,因而导致连接失败,无法正常访问。此次问题是因密码错误引起的访问失败。 在此案例中,root@'%'为console创建实例时设置密码的账号。
  • 场景描述 使用RDS for MySQL时,如果想搭建本地MySQL从库,会使用云上RDS for MySQL全量备份恢复到本地环境。在和云上RDS for MySQL实例建立主备关系时(执行change master命令),通常会出现如下错误: 报错ERROR 1227: ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation
  • 解决方案 手动给root用户赋予super权限,详细步骤如下: 对本地恢复的MySQL,设置免密登录:在配置文件“my.cnf”的[mysqld]组下,添加如下配置项:skip-grant-tables=on。示例: 重启mysqld进程。 systemctl restart mysqld 使用rdsAdmin账户免密登录数据库。 mysql -urdsAdmin 给root用户授权。 grant all on *.* to root @'%'; flush privileges; 去掉免密登录设置:在配置文件“my.cnf”的[mysqld]组下,删除如下配置项:skip-grant-tables=on。 重启mysqld进程。 使用root账户登录数据库,并检查权限。 此时,再使用root用户执行change master操作,不会出现super权限错误。
  • 原因分析 ibdata1是InnoDB的系统表空间,主要包括: 多版本并行事务控制(MVCC)相关的数据:undolog Innodb表的元数据,如数据字典 change buffer/double write buffer等 其中,undolog是ibdata1增大的最主要原因,而undolog过大的主要原因如下: 长事务久未提交,导致undolog purge被阻塞。 写入并发太大生成大量的undolog,purge速度跟不上。 通过show engine innodb status中的“History list length”可以查看未被purge的undolog数量。
  • 使用场景 本模块数据源创建支持single-read-write(单读写),local-read-single-write(本地读单写)2种模式,同时SDK内置实现了读写分离,可通过配置RANDOM(随机)或ROUND_ROBIN(轮询)负载均衡算法,搭配MAS可实现多活容灾;同时内置故障注入功能可创建带有注入故障的实例,进行相关业务场景的模拟,配置修改请参考故障注入Mysql配置示例。 该模块具有如下特性: 多活容灾能力 多活容灾能力是指在同城场景下实现多活故障自动切换,由SDK和MAS服务配合完成。 读写分离 读写分离由SDK实现,支持随机、轮询的负载均衡算法。 故障注入 支持带注入故障的实例创建,包含延时(波动)、预设异常的故障配置。 single-read-write 单读写类似于主备库,MAS监控各节点健康状态,active节点故障自动切换至其他节点,保证多活容灾能力,节点之间用DRS进行数据同步,保证数据一致。 读操作:同步路由到active的mysql。 写操作:同步路由到active的mysql。 local-read-single-write 本地读单写适用于读多写少场景,读操作会根据路由算法读取近端节点,写操作遵循写入至active节点,MAS监控各节点健康状态,active节点故障自动切换至其他节点,节点之间用DRS进行数据同步。 读操作:同步路由到近端mysql。 写操作:同步路由到active的mysql。 父主题: Mysql
  • 本地读单边写 本地读单边写模式应在配置文件中配置routeStrategy为"local-read-single-write"。在这种路由模式下,读操作在本地进行,不受MAS指示的活跃节点影响。根据配置文件中的az信息判断本地属于哪个az,读操作时从本地az进行读取,写操作仍然根据MAS指示的活跃节点进行操作。(本地指的是当Mongo数据源和props中所配置的azs为同一az时,此Mongo数据源被视为本地) 本地读单边写模式,配置文件中props.azs信息和sources.dcx.azs信息必须填写。 如果对接MAS平台,Mongo数据源所属az信息,以MAS平台上的azs信息为准,MAS平台此项选填。 如果两个Mongo数据源的az信息与props.azs均相同,则会随机选取其中一个作为本地数据源进行读操作,所以需要尽量保证两个Mongo数据源的az信息,一个与props.azs相同,一个不同。 配置示例: devspore: dds: # 基础信息 - 可选,当配置etcd后必选 props: version: v1 #项目版本号,自定义 app-id: xxxx #应用id,从MAS服务实例页面查询获取 monitor-id: xxxx #监控器id,从MAS服务实例页面查询获取Mas监控id databaseName: xxxx #MAS监控的Mongo数据库 azs: az1 #项目所属az,本地读单边写模式下,此项必填 # etcd配置,对接MAS服务关键配置,如不对接MAS则无需配置 etcd: address: 127.0.0.1:2379 #etcd地址,从MAS服务实例页面查询获取 api-version: v3 #etcd版本,v3 username: etcduser #etcd用户名,从MAS服务实例页面查询获取 password: etcdpwd #etcd密码,从MAS服务实例页面查询获取 https-enable: true #是否启用https,默认为false certificatePath: xxx #当启用https时证书路径,忽略证书场景或者不启用https场景,此项可不填 # mongo数据源配置 - 必选 sources: dc1: username: dc1user #mongo用户名 password: dc2pwd #mongo密码 url: mongodb://127.0.0.1:29017/mongo1 #mongo连接串(注意不能带用户名密码) azs: az1 #此mongo数据库所属az dc2: username: dc2user #mongo用户名 password: dc2pwd #mongo密码 url: mongodb://127.0.0.1:29018/mongo1 #mongo连接串(注意不能带用户名密码) azs: az2 #此mongo数据库所属az active: dc1 routeStrategy: local-read-single-write #路由策略 父主题: 使用场景
  • 敏感信息加解密 配置文件中配置密文信息。可以解密的配置有devspore.dcs.redis.servers.dc1.password,devspore.dcs.redis.servers.dc1.sentinelPassword,devspore.dcs.etcd.password devspore: dcs: redis: servers: dc1: hosts: password: 密文信息 type: cluster 需做以下两步操作,实现敏感信息的解密。 新建一个Decipher接口的实现类。 1 2 3 4 5 6 7 8 9 10 11 12 13 import com.huawei.devspore.mas.password.Decipher; public class MyDecipher implements Decipher { @Override public String decode(String s) { if (s == null) { return null; } // 使用自定义的解密算法 return s; } } 在配置文件中将属性devspore.dcs.props.decipherClassName配置为实现类的全类名。 1 2 3 4 devspore: dcs: props: decipher-class-name: com.demo.MyDecipher 父主题: Mas-Redis-SDK使用手册
  • single-read-async-double-write(单边读异步双写) 使用须知:另起线程进行数据同步,不能保证异步写成功、不能保证两端数据的一致性。 图1 single-read-async-double-write部署图 读写指定异步双写,适用于读多写少场景,使用sdk同步两个redis,一条写命令会先在指定redis上执行,成功后,异步写到另一端。 本地读异步双写场景具体操作: 对于用户,不感知多个redis。 对于SDK 读操作:同步路由到到指定的redis。 写操作:同步路由到指定的redis,同时异步发送到远端redis。 此场景下可切换指定的redis。 当不同实例内SDK操作同一个redis key时,不能保证两个redis的一致性。 当SDK发生redis切换时,切换前产生的异步双写命令和切换后主流程写操作同一个redis的key时,两者不保证顺序:即有主流程写的值被异步双写覆盖。 spop命令双写不适用。 父主题: 使用场景
  • 读写分离 场景四: 如上图,实线为DCG指示激活AZ1,虚线为DCG指示激活为AZ2。跟场景三不同之处在于,场景四中存在从库,进行读写分离,写操作在主库,读操作在从库进行。 配置如下: # 基础信息 - 可选项, 当配置etcd后为必选 props: version: v1 // 项目版本号,自定义 appId: xxx // 应用名称,从MAS服务实例页面查询获取 monitorId: xxx // 监控器ID,从MAS服务实例页面查询获取 databaseName: xxx // 监控器标签,从MAS服务实例页面查询获取 decipherClassName: xxx.xxx.xxx // 加解密类,需要实现基类 com.huawei.devspore.mas.password.Decipher,默认值为com.huawei.devspore.mas.password.DefaultDecipher azs: az1 # etcd配置,对接MAS服务关键配置,本地模式则无需配置 etcd: address: 127.0.0.2:2379,127.0.0.2:2379,127.0.0.2:2379 //etcd地址, 从MAS服务实例页面查询获取 apiVersion: v3 // etcd版本,v3 username: etcduser // etcd用户名,从MAS服务实例页面查询获取 password: etcdpwd // etcd密码,从MAS服务实例页面查询获取 httpsEnable: false // 是否启用https certificatePath: xxx // 启用https时证书路径,忽略证书场景或不启用https场景,该配置可以不填 # 数据源配置 - 必选 sources: ds1: // 数据库直接点配置, 需要和MAS服务中连接池中命名一致,如果没有对接MAS服务, 下面的配置项与本地保持一致 driverClassName: com.mysql.jdbc.Driver // 驱动名称,自定义 jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds0 // 数据库地址,和MAS服务配置一致 username: datasourceuser // 用户名,和MAS服务配置一致 password: datasourcepwd // 密码,和MAS服务配置一致 type: com.zaxxer.hikari.HikariDataSource // 数据源类型,自定义,目前只支持com.zaxxer.hikari.HikariDataSource,org.apache.commons.dbcp2.BasicDataSource,com.alibaba.druid.pool.DruidDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds1-slave0:// 从数据库节点,需要和MAS服务中连接池中命名一致,如果没有对接MAS服务, 下面的配置项与本地保持一致 driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds0_slave0 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds1-slave1: driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds0_slave1 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds2: // 需要和MAS服务中连接池中命名一致 driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds1 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds2-slave0:// 从数据库节点,需要和MAS服务中连接池中命名一致,如果没有对接MAS服务, 下面的配置项与本地保持一致 driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds1_slave0 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds2-slave1: driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds1_slave1 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 # 路由配置 - 必选 router: active: dc1 routeAlgorithm: local-read-single-write nodes: dc1: master: ds1 loadBalance: ROUND_ROBIN slaves: - ds1-slave0 - ds1-slave1 azs: az1 dc2: master: ds2 loadBalance: ROUND_ROBIN slaves: - ds2-slave0 - ds2-slave1 azs: az2 父主题: 本地读单边写
  • local-read-async-double-write-support-readable(本地读异步双写) 使用须知:另起线程进行数据同步,不能保证异步写成功、不能保证两端数据的一致性。 本地读异步双写场景具体操作 对于用户,不感知多个redis。 对于SDK 读操作:当local redis的readable == true(在mas管理页面有设置)同步路由到到local redis, 否则, 同步路由到active redis。 写操作:当local redis的readable == true(在mas管理页面有设置)同步路由到近端redis,同时异步发送到远端redis。否则同步路由到active redis。异步写另外一端。 readable为MAS管理页面可以为redis设置的值,含义:是否可读。 图1 local-read-async-double-write-support-readable 部署图 图2 local-read-async-double-write-support-readable 部署图 (az2的redis readable==false) 父主题: 使用场景
  • 读写分离 场景二: 如上图,实线为DCG指示激活AZ1,虚线为DCG指示激活为AZ2。跟场景一类似,同样在单边进行读写,不同之处在于,场景二中存在从库,进行读写分离,写操作在主库,读操作在从库进行。 配置如下: # 基础信息 - 可选项, 当配置etcd后为必选 props: version: v1 // 项目版本号,自定义 appId: xxx // 应用名称,从MAS服务实例页面查询获取 monitorId: xxx // 监控器ID,从MAS服务实例页面查询获取 databaseName: xxx // 监控器标签,从MAS服务实例页面查询获取 decipherClassName: xxx.xxx.xxx // 加解密类,需要实现基类 com.huawei.devspore.mas.password.Decipher,默认值为com.huawei.devspore.mas.password.DefaultDecipher # etcd配置,对接MAS服务关键配置,本地模式则无需配置 etcd: address: 127.0.0.2:2379,127.0.0.2:2379,127.0.0.2:2379 //etcd地址, 从MAS服务实例页面查询获取 apiVersion: v3 // etcd版本,v3 username: etcduser // etcd用户名,从MAS服务实例页面查询获取 password: etcdpwd // etcd密码,从MAS服务实例页面查询获取 httpsEnable: false // 是否启用https certificatePath: xxx // 启用https时证书路径,忽略证书场景或不启用https场景,该配置可以不填 # 数据源配置 - 必选 sources: ds1: // 数据库直接点配置, 需要和MAS服务中连接池中命名一致,如果没有对接MAS服务, 下面的配置项与本地保持一致 driverClassName: com.mysql.jdbc.Driver // 驱动名称,自定义 jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds0 // 数据库地址,和MAS服务配置一致 username: datasourceuser // 用户名,和MAS服务配置一致 password: datasourcepwd // 密码,和MAS服务配置一致 type: com.zaxxer.hikari.HikariDataSource // 数据源类型,自定义,目前只支持com.zaxxer.hikari.HikariDataSource,org.apache.commons.dbcp2.BasicDataSource,com.alibaba.druid.pool.DruidDataSource ds1-slave0:// 从数据库节点,需要和MAS服务中连接池中命名一致,如果没有对接MAS服务, 下面的配置项与本地保持一致 driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds0_slave0 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds1-slave1: driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds0_slave1 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds2: // 需要和MAS服务中连接池中命名一致 driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds1 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds2-slave0:// 从数据库节点,需要和MAS服务中连接池中命名一致,如果没有对接MAS服务, 下面的配置项与本地保持一致 driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds1_slave0 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds2-slave1: driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds1_slave1 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 # 路由配置 - 必选 router: active: dc1 routeAlgorithm: single-read-write nodes: dc1: master: ds1 loadBalance: ROUND_ROBIN slaves: - ds1-slave0 - ds1-slave1 dc2: master: ds2 loadBalance: ROUND_ROBIN slaves: - ds2-slave0 - ds2-slave1 父主题: 单边读写
  • 使用场景 本模块客户端创建支持single-read-write(单读写),local-read-single-write(本地读单写),double-write(本地读双写)3种模式,其中redis节点可配置cluster(集群), master-slave(主从), normal(普通)redis服务,搭配MAS可实现多活容灾;同时内置故障注入功能可创建带有注入故障的实例,进行相关业务场景的模拟,配置修改请参考故障注入Redis配置示例。 该模块具有如下特性: 多活容灾能力 多活容灾能力是指在同城场景下实现多活故障自动切换,由SDK和MAS服务配合完成。 数据双写 读写分离由SDK实现,支持内存双写、文件双写。 故障注入 支持带注入故障的实例创建,包含延时(波动)、预设异常的故障配置。 single-read-write 单读写类似于主备库,MAS监控各节点健康状态,active节点故障自动切换至其他节点,保证多活容灾能力,节点之间进行数据同步,保证数据一致。 读操作:同步路由到active的redis。 写操作:同步路由到active的redis。 local-read-single-write 本地读单写适用于读多写少场景,读操作会根据路由算法读取近端节点,写操作遵循写入至active节点,MAS监控各节点健康状态,active节点故障自动切换至其他节点,节点之间进行数据同步。 读操作:同步路由到近端redis。 写操作:同步路由到active的redis。 double-write 本地读双写同样适用于读多写少场景,读操作直接读取近端节点,写操作在近端执行完会异步写到远端节点,不需要外部进行数据同步。 读操作:同步路由到近端redis。 写操作: 内存双写:同步路由到近端redis,同时异步发送到远端redis。 文件双写:同步路由到近端redis,同时异步写文件,定时扫描发送至远端redis。 父主题: Redis
  • 无从库 场景三: 如上图,实线为DCG指示激活AZ1,虚线为DCG指示激活为AZ2。,正常场景下,不管DCG激活哪个AZ,读操作都在本地进行;只有写操作是根据DCG激活指示,在相应的AZ进行。当某AZ 本地数据库故障,不可读时,读操作根据DCG激活指示。 配置如下: # 基础信息 - 可选项, 当配置etcd后为必选 props: version: v1 // 项目版本号,自定义 appId: xxx // 应用名称,从MAS服务实例页面查询获取 monitorId: xxx // 监控器ID,从MAS服务实例页面查询获取 databaseName: xxx // 监控器标签,从MAS服务实例页面查询获取 decipherClassName: xxx.xxx.xxx // 加解密类,需要实现基类 com.huawei.devspore.mas.password.Decipher,默认值为com.huawei.devspore.mas.password.DefaultDecipher azs: az1 // 本地的az信息,根据实际环境所属az进行填写 # etcd配置,对接MAS服务关键配置,本地模式则无需配置 etcd: address: 127.0.0.2:2379,127.0.0.2:2379,127.0.0.2:2379 //etcd地址, 从MAS服务实例页面查询获取 apiVersion: v3 // etcd版本,v3 username: etcduser // etcd用户名,从MAS服务实例页面查询获取 password: etcdpwd // etcd密码,从MAS服务实例页面查询获取 httpsEnable: false // 是否启用https certificatePath: xxx // 启用https时证书路径,忽略证书场景或不启用https场景,该配置可以不填 # 数据源配置 - 必选 sources: ds1: // 需要和MAS服务中连接池中命名一致,如果没有对接MAS服务, 下面的配置项与本地保持一致 driverClassName: com.mysql.jdbc.Driver // 驱动名称,自定义 jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds0 // 数据库地址,和MAS服务配置一致 username: datasourceuser // 用户名,和MAS服务配置一致 password: datasourcepwd // 密码,和MAS服务配置一致 type: com.zaxxer.hikari.HikariDataSource props: // 连接池参数 connectionTimeout: 30000 maximumPoolSize: 200 ds2: // 需要和MAS服务中连接池中命名一致 driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds1 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 # 路由配置 - 必选 router: active: dc1 // 当前激活节点 routeAlgorithm: local-read-single-write // 路由策略 nodes: dc1: master: ds1 azs: az1 dc2: master: ds2 azs: az2 父主题: 本地读单边写
  • 操作步骤 使用华为账号,登录华为云网站,在顶部导航栏右侧单击“控制台”,进入华为云控制台。 在左侧导航栏上方,单击,选择服务实例所在的区域项目。 单击,在查找框中搜索“ 云审计 服务 CTS ”,单击查找到的结果,即可进入云审计服务信息页面。 在左侧导航栏中,选择“事件列表”,进入事件列表信息页面。 事件列表支持通过筛选来查询对应的操作事件。当前事件列表支持四个维度的组合查询,详细信息如下: 事件来源、资源类型和筛选类型。 在下拉框中,选择查询条件。其中,筛选类型选择事件名称时,还需选择某个具体的事件名称。 选择资源ID时,还需选择或者手动输入某个具体的资源ID。 选择资源名称时,还需选择或手动输入某个具体的资源名称。 操作用户:在下拉框中选择某一具体的操作用户,此操作用户指用户级别,而非租户级别。 事件级别:可选项为“所有事件级别”、“normal”、“warning”和“incident”,只可选择其中一项。 时间范围:可选择查询最近七天内任意时间段的操作事件。 展开需要查看的事件,查看详细信息。 在需要查看的记录右侧,单击“查看事件”,弹窗中显示了该操作事件结构的详细信息。 更多关于云审计的信息,请参见《云审计服务用户指南》。
  • 如何定义API接口 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“集成 ”。 也可以在“开始”页面,直接单击“新建开放接口”。 单击开放接口后的“+”,设置开放接口参数,单击“保存”。 图1 新建开放接口 标签:新建API接口的标签。 操作名称:新建API接口的操作名称。 版本:API接口的版本,格式为“x.y.z”。 URL:API接口路径, 固定以 /service/{命名空间}__{应用名}/{版本} 开头, 后面接API的具体路径。 内容类型:请求中的body类型。 其中“multipart/form-data”和“binary-data”用于文件上传接口,选择该内容类型,只能调用post类型的脚本。 分类:API接口所属的分类。 描述:自定义API接口的描述信息。 允许匿名访问:是否可以匿名访问运行环境中该API接口。 勾选表示允许匿名访问,通过运行环境子域名访问此接口时,如果无有效的Token认证信息,则以匿名用户身份继续访问此接口,且不需要做 CS RF校验。匿名用户的权限为“Anonymous User Profile”,请确保该权限具备访问该接口的业务权限凭证或者相关资源权限。例如,当该接口有配置业务权限凭证时,给“Anonymous User Profile”权限添加相应业务权限凭证,即可通过运行环境子域名匿名访问该接口。 需要支持匿名访问自定义接口的账号,必须要设置运行环境子域名。 带有合法认证信息来访问允许匿名访问的自定义接口时,优先以合法认证的身份权限来访问。 匿名用户身份访问自定义接口,不需要做CSRF校验。 不论以什么方式来访问, 认证身份后做的权限校验保持一致。如果配置了业务权限凭证,还是会查看用户权限是否配置相应业务权限凭证。 例如:登录业务应用接口“login”的URL为“/service/命名空间__MyApp/1.0.0/login”,运行环境子域名为“test.example.com”,期望可匿名访问该自定义接口,则配置接口时请勾选“允许匿名访问”,且“Anonymous User Profile”权限配置了该接口的业务权限凭证,则匿名用户通过“https://test.example.com/service/命名空间__MyApp/1.0.0/login”即可访问该接口。 类型:选择资源类型,只有服务编排类型的接口能够在服务编排中被调用,其他类型接口只能通过API的形式进行调用。 服务编排:定义URL调用的接口类型是服务编排。 脚本:定义URL调用的接口类型是脚本。 对象:定义URL是操作对象数据,包括对象数据的增删改查。 自定义响应:是否需要格式化调用,该URL后返回的响应消息。如果勾选,表示对响应消息进行格式化,删除resCode、resMsg、result外层信息,只透传返回的消息。 不勾选“自定义响应”,返回如下响应消息: { "resCode": "0", "resMsg": "成功", "result": [ { "equipments": [ { "createdBy": "aaa", "createdBy.__objectType": "User" }, { "createdBy": "aaa", "createdBy.__objectType": "User" } ], "total": "2" } ] } 勾选“自定义响应”后,只返回如下响应消息: { "equipments": [ { "createdBy": "aaa", "createdBy.__objectType": "User" }, { "createdBy": "aaa", "createdBy.__objectType": "User" } ], "total": "2" } 资源:根据类型选择需要绑定的资源,如脚本,服务编排或操作的对象名称。 如果找不到需要绑定的服务编排或脚本,请检查服务编排或脚本是否启用。如果没有启用,请进入服务编排或脚本设计页面,单击页面左上角的图标,启用服务编排(图2)或脚本(图3)。 图2 启用服务编排 图3 启用脚本 对象操作:“类型”选择“对象”时,该参数才会显示。 Insert Record:新增对象数据。 Update or Insert Record:更新或者新增对象数据。 Update By ID:按记录ID更新对象数据。 Delete By ID:按记录ID删除对象数据。 Query By ID:按记录ID查询对象数据。 Update By Condition:按条件更新对象数据。 Delete By Condition:按条件删除对象数据。 Query By Condition:按条件查询对象数据。 方法:API接口的HTTP方法。 GET:请求服务器返回指定资源。 PUT:请求服务器更新指定资源。 POST:请求服务器新增资源或执行特殊操作。 DELETE:请求服务器删除指定资源。 PATCH:请求服务器更新资源的部分内容。当资源不存在时,PATCH可能会去创建一个新的资源。 返回“集成”页面,单击已创建接口后的,选择“查看”,进入接口预览页面。 单击接口后的,可查看定义的API信息。 单击“测试一下”,可模拟API接口调用。 图4 API接口请求参数信息 图5 API接口返回参数信息 API接口的请求参数和返回消息体,为绑定的资源(如脚本,服务编排等)所配置的入参和出参。
  • 步骤3:进行代码托管 将AstroZero上开发的应用代码元数据归档到代码仓库。这里以归档某开发环境某个应用为例进行说明,您可对多个配置代码库的AstroZero环境的多个应用进行代码托管。 返回AstroZero开发环境首页,单击某一需要归档代码的应用,进入应用开发工作台。 在左侧导航栏中单击“代码管理”,您可以直接输入代码仓库地址,即新建代码仓库中获取的代码仓库的HTTPS方式访问地址。您也可以选定已绑定的代码仓库,单击“确认绑定”,即可绑定代码仓库。 参考图8和图9,在代码仓库下方单击“待提交”,首次归档应用代码,所有代码显示在“未暂存”下,单击后面的“+”,单击“提交到仓库”,设置归档描述信息,单击“确认”,即可归档该应用所有代码。 支持选择部分代码归档,在需要归档的代码目录后单击“+”进行操作即可。 图8 归档代码 图9 设置归档描述 在代码仓库页面的“已提交”菜单下,可查看已提交的记录。 图10 已提交记录查询 在代码仓库页面的“分支”菜单下,可查看当前代码仓库下的分支列表,支持合并到此分支。 在代码仓库页面的“分支”菜单下,单击具体需要合并的分支操作列的,单击“合并到此分支”。 图11 合并分支 在合并分支的选择分支页面单击“下一步”,检查冲突。 图12 选择分支 页面显示冲突为0,单击“下一步”,创建合并请求。 图13 创建合并请求 当存在代码冲突时,您可在代码仓库页面的“分支”菜单下,单击“解决冲突”,进入解决冲突页面。解决代码冲突后,再进入待提交页面,提交代码。 图14 解决冲突 在“仓库信息”后单击“前往仓库”,打开代码仓库首页。 在代码仓库“代码”页签下,单击“Application”,可查看应用的归档代码。 图15 查看归档应用
  • 背景信息 软件开发生产线(CodeArts)是集华为近30年研发实践、前沿研发理念、先进研发工具为一体的一站式云端DevOps平台,面向开发者提供的云服务,即开即用,让开发者快速而又轻松地开启云端开发之旅。更多介绍,请参见软件开发生产线(CodeArts)产品文档。 代码托管CodeArts Repo(原CodeHub)源自华为千亿级代码管理经验,基于Git,提供企业代码托管的全方位服务,为软件开发者提供基于Git的在线 代码托管服务 ,包括代码克隆/下载/提交/推送/比较/合并/分支/Code Review等功能。更多介绍,可参见代码托管(CodeArts Repo)帮助文档。
  • 操作步骤 参考如何登录经典应用设计器中操作,登录经典版应用设计器。 将鼠标放在应用的某个文件夹上(如Logic),单击“+”,选择“事件流”。 开启事件流License权限后,才会有新建事件流的入口。 单击“新建”,进入“事件流”页面。 在“事件流”页面右侧,单击“设置”,进行数据配置。 图2 设置页面 窗口长度:事件流处理的数据采集时间间隔,单位为分钟。建议时间间隔不要配置过小,否则系统频繁的建表和执行SQL语句,会影响系统性能。例如:配置为“1”表示spark streaming每隔1分钟去kafka获取事件数据。 在“事件流”页面右侧,单击“图元”,拖拽“输入源”中Kafka图元至左侧画布区域,并配置基本信息,单击“保存”。 输入源中Kafka图标表示数据来自Kafka。 图3 数据来源Kafka基本信息页面 标签:新建数据源Kafka的标签名,用于在界面展示。 名称:新建数据源Kafka的名称,系统自动生成。 事件:需要订阅的事件。例如,配置为温度监测事件“temperature”。 从外部接收:是否从外部Kafka接收事件。 关闭该开关,从与AstroZero相连的Kafka接收事件。 打开该开关,从外部Kafka接收事件。本示例中关闭该开关,使用与AstroZero相连的Kafka。 Kafka集群地址:数据源Kafka的集群地址。多个节点服务器地址可用“,”间隔,格式为“Kafka节点1的ip:节点1端口号,Kafka节点2的ip:节点2端口号,...”。 获取Kafka的IP和端口号方法:登录每台Kafka节点服务器,查看“${KAFKA_HOME}/config”目录下,“server.properties”中“listeners”的取值。 订阅主题:获取的事件数据来源,即来自于kafka集群的哪个Topic。 从“图元”中,拖拽“投影”图元至左侧画布区域数据源Kafka下方,并在弹出的“添加投影器”页面配置基本信息,单击“保存”。 图4 “添加投影器”页面 标签:新建投影的标签名,用于在界面展示。 名称:新建投影的名称,系统自动生成。 输入字段:订阅事件的所有事件参数。选择所需的参数,单击,选中的参数会出现在“输出字段”中。 输出字段:从订阅事件的事件参数进行筛选后,用到的事件参数。 从“图元”中,拖拽“过滤”图元至左侧画布区域投影下方,并在弹出的“添加过滤器”页面配置基本信息和过滤条件,单击“保存”。 图5 设置过滤条件 标签:新建过滤的标签名,用于在界面展示。 名称:新建过滤的名称,系统自动生成。 条件设置:设置过滤条件。例如,图中的配置表示提取温度大于60度的事件。 字段:上一步筛选后的事件参数。 比较符:操作符,直接在下拉框中选择。 值:字段值。 (可选)从“图元”页面中,拖拽“分组”图元至左侧画布区域过滤器下方,并在弹出的“添加分组器”页面配置基本信息和分组条件,单击“保存”。 图6 “添加分组器”页面配置 标签:新建分组的标签名,用于在界面展示。 名称:新建分组的名称,系统自动生成。 分组设置:设置分组条件。例如,图中配置表示按照相同位置的大于60度的温度取温度平均值。 在“图元”页面右侧,拖拽输出源中的Kafka图元至左侧画布区域最下方,设置spark streaming输出事件和输出事件数据的接收方,单击“保存”。 可以拖拽多个Sink中的Kafka图元,设置多个事件接收方。 图7 数据接收方配置 标签:数据接收方Kafka的标签名,用于在界面展示。 名称:数据接收方Kafka的名称,系统自动生成。 事件:spark streaming输出的事件。本示例此处配置为高温报警事件“fire_alarm”。温度监测事件“temperature”中的“position”,对应高温报警事件“fire_alarm”中的“positionalarm”。温度监测事件的“temperature”,对应高温报警事件“fire_alarm”中的“temperaturealarm”。 发送到外部:是否发送到外部Kafka。若关闭该开关,表示发送到与AstroZero相连的Kafka。若打开该开关,表示发送到外部Kafka,需要配置“Kafka集群地址”和“订阅主题”。本示例中关闭该开关,使用与AstroZero相连的Kafka。 Kafka集群地址:接收事件的Kafka集群地址,例如10.136.14.56:9092。 多个节点服务器地址可用“,”间隔,格式为“Kafka节点1的ip:节点1端口号,Kafka节点2的ip:节点2端口号,...”。 获取Kafka的IP和端口号方法:登录每台Kafka节点服务器,查看“${KAFKA_HOME}/config”目录下,“server.properties”中“listeners”的取值。 接收事件的kafka集群,不需要一定配置为和AstroZero相连。 订阅主题:接收事件数据的kafka Topic,例如__BINGO_PROD_SYS_TOPIC。 事件属性/属性、值:配置输出事件与接收事件中,已定义参数的对应关系。 单击页面右上方保存按钮,设置“事件流”基本参数。 图8 该“事件流”基本参数页面 标签:新建事件流的标签名,用于在界面展示。 名称:新建事件流的名称,系统自动生成。 描述:新建事件流的描述信息。 单击页面上方的,启用事件流。
  • 结果验证 创建一个服务编排“fire_alarm”,创建后启用该服务编排,实现当kafka中出现高温报警事件时,AstroZero需要接收该事件,再向第三方系统发送该告警邮件。 鼠标放在应用下的Logic文件夹上,单击“+”,选择“服务编排”。 选择“创建一个新的服务编排”,设置标签和名称为“fire_alarm”,单击“添加”。 在服务编排设计页面左侧,拖拽“逻辑”下的“等待”图元至画布中。 单击,在“可编辑的事件”中,单击“新增”,新增“event0”分支。 配置该分支事件为高温报警事件,当系统中出现该事件时,会执行该分支。 图9 配置等待图元 拖拽“基本”下的“发送邮件”图元至画布中。 单击,设置发送邮件参数。 配置高温报警邮件的主题和内容,地址填入第三方系统的邮件接收地址。 图10 配置发送邮件图元 直接编辑:手动设置邮件信息。 基于模板:基于同一账号或基线中已有的邮件模板,设置邮件主题和内容,方便用户增加效率。 模板:选择“基于模板”时,需要选择邮件模板。 主题:设置邮件标题。 选中“直接编辑”时,需要配置邮件标题。 选中“基于模板”时,该参数配置区域置灰。 内容:设置邮件内容。 选中“直接编辑”时,需要配置邮件内容。 选中“基于模板”时,该参数配置区域置灰。 自定义变量:选中“基于模板”时,需要配置模板中的参数。在“值”中,直接输入参数取值或者从全局上下文拖拽变量。 地址:接收人的邮箱地址。 字符串:直接输入分号分隔的字符串或从全局上下文拖拽变量。 集合:从全局上下文拖拽集合变量。 抄送:抄送人员的邮箱地址,直接输入分号分隔的字符串或者从全局上下文拖拽变量。 密送:密送发送人员的邮箱地址,直接输入分号分隔的字符串或者从全局上下文拖拽变量。 按照下图连接所有图元,等待图元和发送邮件图元之间选择“event0”分支。 图11 连接所有图元 单击页面上方的,保存服务编排。 保存成功后,单击,启用服务编排。 创建一个服务编排“send_fire_event”,将温度监测事件“temperature”中位置参数“position”赋值为仓储公司某区域,温度“temperature”赋值为70度,启用该Flow,用于模拟事件发送。 鼠标放在应用下的Logic文件夹上,单击“+”,选择“服务编排”。 选择“创建一个新的服务编排”,设置标签和名称为“send_fire_event”,单击“添加”。 在服务编排编辑器页面左侧,拖拽“基本”下的“发送事件”图元至画布中。 单击,设置发送事件参数。 图12 配置发送事件图元 事件:选择待发送的事件。 分区字段:从事件中选择一个自定义参数用作Kafka的分区字段,则根据该字段值进行路由,相同的值将路由到同一个Kafka分区。如果不指定,则默认随机路由到不同Kafka分区,从而提升并发处理性能。 发送到外部:系统内部有配置与AstroZero相连Kafka的固定Topic“__BINGO_SYS_TOPIC”。若不勾选“发送到外部”,表示将事件数据发到默认的Topic上。若勾选“发送到外部”,则表示将事件数据发送到与AstroZero相连Kafka的其他Topic上。 延迟到事务结束(提交或回滚)后才发送:是否延迟到该服务编排事务结束后,才发送事件。 主题:勾选“发送到外部”时,才显示该参数,表示非系统配置的默认Topic。 目标/源:配置事件数据。 本示例中,“目标”请从下拉框中选择事件的自定义参数“temperature”和“position”,在“源”中给目标赋值。 按照下图连接所有图元。 图13 连接图元 单击页面上方的,保存服务编排。 保存成功后,单击,启用服务编排。 在“事件流”列表页面,单击该事件流程所在行的,运行该事件流程。 单击服务编排“send_fire_event”编辑器上方的,执行服务编排。 不用输入任何输入参数,直接单击“运行”。 参考上一步,执行服务编排“fire_alarm”。 不用输入任何输入参数,单击“运行”。 打开第三方系统邮箱,成功收到高温警报邮件,验证成功。
  • 背景信息 首先,您需要理解以下概念: kafka:是由Apache开发的一个开源流处理平台,是分布式发布、订阅消息系统。kafka主要用于处理活跃的流数据,一般kafka部署为集群模式。 Topic:用来区分kafka集群中,不同类型消息的主题。例如,应用程序A订阅了Topic1,应用程序B订阅了Topic2而没有订阅Topic1,那么发送到Topic1中的数据将只能被应用程序A读到,而不会被应用程序B读到。 spark streaming:大规模流式数据处理工具,第三方工具。
  • 前提条件 请联系运维,开启事件流License权限。开启后,才可新建、查看并管理事件流。 已创建并启用温度监测事件“temperature”,该事件中自定义参数为文本类型“position”和数字类型“temperature”,分别表示位置和温度,具体操作步骤请参考如何自定义事件。 已创建并启用高温报警事件“fire_alarm”,该事件中自定义参数为文本类型“positionalarm”和数字类型“temperaturealarm”,分别表示高温报警位置和温度,具体操作步骤请参考如何自定义事件。
  • 操作步骤 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“集成”。 单击开放接口后的,进入新建开放接口页面。 设置接口参数,单击“保存”。 图1 新建接口 表1 新建接口参数配置 参数 参数说明 标签 新建接口的标签。 操作名称 新建接口的操作名称。 版本 URL对应的版本号。 URL 新URL地址,其中“/service”是固定值,其次是“/App名称/版本号”,剩下部分请自定义。 自定义的URL需要符合一定规则,规则如下: 必须以单个“/”开头。 可以配置多级路径,两个或者多个“/”之间必须有内容。 内容类型 请求中的body类型。 application/json multipart/form-data binary-data “multipart/form-data”和“binary-data”用于文件上传接口,选择该内容类型,只能调用POST类型的脚本。 分类 新建接口所属的分类。 描述 新建接口的描述信息,长度不超过255个字节。 允许匿名访问 是否可匿名访问运行环境中,该API接口。 勾选表示允许匿名访问,通过运行环境子域名访问此接口时,如果无有效的Token认证信息,则以匿名用户身份继续访问此接口,且不需要做CSRF校验。匿名用户的权限为“Anonymous User Profile”,请确保该权限具备访问该接口的业务权限凭证或者相关资源权限。例如,当该接口有配置业务权限凭证时,给“Anonymous User Profile”权限添加相应业务权限凭证,即可通过运行环境子域名匿名访问该接口。 需要支持匿名访问自定义接口的账号,必须要设置运行环境子域名。 带有合法认证信息来访问允许匿名访问的自定义接口时,优先以合法认证的身份权限来访问。 匿名用户身份访问自定义接口,不需要做CSRF校验。 不论以什么方式来访问, 认证身份后做的权限校验保持一致。如果配置了业务权限凭证,还是会查看用户权限是否配置相应业务权限凭证。 例如:登录业务应用接口“login”的URL为“/service/命名空间__MyApp/1.0.0/login”,运行环境子域名为“test.example.com”,期望可匿名访问该自定义接口,则配置接口时请勾选“允许匿名访问”,且“Anonymous User Profile”权限配置了该接口的业务权限凭证,则匿名用户通过“https://test.example.com/service/命名空间__MyApp/1.0.0/login”即可访问该接口。 类型 新建接口类型。 服务编排:表示该定义URL调用的接口类型是服务编排。 脚本:表示该定义URL调用的接口类型是脚本。 对象:表示该定义URL是操作对象数据,包括对象数据的增删改查。 本示例选择脚本。 自定义响应 是否需要格式化调用该URL后,返回的响应消息。如果勾选,表示对响应消息进行格式化,删除resCode、resMsg、result外层信息,只透传返回的消息。 例如,不勾选“自定义响应”,返回如下响应消息: { "resCode": "0", "resMsg": "成功", "result": [ { "equipments": [ { "createdBy": "aaa", "createdBy.__objectType": "User" }, { "createdBy": "aaa", "createdBy.__objectType": "User" } ], "total": "2" } ] } 勾选“自定义响应”后,只返回如下响应消息: { "equipments": [ { "createdBy": "aaa", "createdBy.__objectType": "User" }, { "createdBy": "aaa", "createdBy.__objectType": "User" } ], "total": "2" } 资源 调用的服务编排、脚本或操作的对象名称。 对象操作 设置具体的操作,“类型”选择“对象”时,该参数才会显示。 Insert Record:新增对象数据。 Update or Insert Record:更新或新增对象数据。 Update By ID:按记录ID,更新对象数据。 Delete By ID:按记录ID,删除对象数据。 Query By ID:按记录ID,查询对象数据。 Update By Condition:按条件,更新对象数据。 Delete By Condition:按条件,删除对象数据。 Query By Condition:按条件,查询对象数据。 方法 映射后调用的方法名,如GET(查询)、PUT(增加)、POST(修改)和DELETE(删除)。 接口创建完成后,支持在线测试。 在新版应用设计器的导航栏中,选择“集成”。 在开放接口中,单击对应接口后的,选择“查看”,进入接口预览页面。 在接口预览页面,单击URL后的。 单击“测试一下”,如果有输入参数,设置输入参数后,单击“执行”。 成功响应,表示接口调用成功。
共100000条