华为云用户手册

  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 获取Token ,请参考《 统一身份认证 服务API参考》的“获取用户Token”章节。 请求响应成功后在响应消息头中包含的“X-Subject-Token”的值即为Token值。 最大长度:16384 X-Enterprise-Project-ID 否 String 企业项目ID。 创建环境时,环境会绑定企业项目ID。 最大长度36字节,带“-”连字符的UUID格式,或者是字符串“0”。 该字段不传(或传为字符串“0”)时,则查询默认企业项目下的资源。 说明: 关于企业项目ID的获取及企业项目特性的详细信息,请参见《企业管理服务用户指南》。 X-Environment-ID 是 String 环境ID。 获取环境ID,通过《云应用引擎API参考》的“获取环境列表”章节获取环境信息。 请求响应成功后在响应体的items数组中的一个元素即为一个环境的信息,其中id字段即是环境ID。
  • 核对资源用量是否与实际相符 假设用户在2023/11/23 14:53:24购买了一台包年/包月的CPH云手机服务器。 CPH流水账单 您可以在流水账单中核对每一个计费周期的信息是否和实际相符,具体如表1所示。 表1 CPH流水账单 产品类型 云手机 CPH 产品 云手机服务器 计费模式 包年/包月-月 消费时间 2023/11/23 14:53:24 GMT+08:00 官网价 华为云商品在官网上未叠加应用商务折扣、促销折扣等优惠的销售价格。官网价=优惠金额+抹零金额+应付金额。 优惠金额 用户使用云服务享受折扣优惠如商务折扣、伙伴授予折扣以及促销优惠等减免的金额。基于官网价的优惠金额。 抹零金额 按需计费等模式中,结算出账时实际只扣费到最小货币单位分,分以后不扣费直接抹去的金额。 应付金额 用户使用云服务享受折扣优惠后需要支付的费用金额。折扣包含:商务折扣、合作伙伴授权折扣等各种折扣。 应付金额 = 现金支付 + 信用额度支付 + 代金券抵扣 + 现金券抵扣 + 储值卡抵扣 + 欠费金额。 CPH明细账单 明细账单可以通过多维度展示客户账单的详细信息。一般通过设置统计维度为“按使用量”,统计周期为“按账期”来统计资源在某个月份的总开销,建议您核对表2 CPH明细账单消费详情所示的信息是否和实际相符。 表2 CPH明细账单 产品类型 云手机 CPH 产品 云手机服务器 计费模式 包年/包月-月 账单类型 消费-新购 资源名称/ID 云手机服务器的名称和ID 例如:cph-3ubg 规格 云手机服务器的规格类型 例如:physical.rx1.xlarge 官网价 华为云商品在官网上未叠加应用商务折扣、促销折扣等优惠的销售价格。官网价=优惠金额+抹零金额+应付金额。 优惠金额 用户使用云服务享受折扣优惠如商务折扣、伙伴授予折扣以及促销优惠等减免的金额。基于官网价的优惠金额。 应付金额 用户使用云服务享受折扣优惠后需要支付的费用金额。
  • 操作场景 您可以复制您创建的自定义数据库参数模板。当您已创建一个数据库参数模板,并且想在新的数据库参数模板中包含该组中的大部分自定义参数和值时,复制参数模板是一个方便的解决方案。您还可以导出某数据库实例应用的参数列表,生成一个新的参数模板,供您后期使用。 复制数据库参数模板之后,新参数模板可能不会立即显示,建议您等待5分钟再使用。 您无法复制默认参数模板。不过,您可以创建基于默认参数模板的新参数模板。
  • 操作场景 内网连接RDS实例时,设置安全组分为以下两种情况: E CS 与RDS实例在相同安全组时,默认ECS与RDS实例互通,无需设置安全组规则,执行通过内网连接RDS for MariaDB实例。 ECS与RDS实例在不同安全组时,需要为RDS和ECS分别设置安全组规则。 设置RDS安全组规则:为RDS所在安全组配置相应的入方向规则。 设置ECS安全组规则:安全组默认规则为出方向上数据报文全部放行,此时,无需对ECS配置安全组规则。当在ECS所在安全组为非默认安全组且出方向规则非全放通时,需要为ECS所在安全组配置相应的出方向规则。 关于添加安全组规则的详细要求,可参考《虚拟私有云用户指南》的“添加安全组规则”章节。
  • 使用限制 因为安全组的默认规则是在出方向上的数据报文全部放行,同一个安全组内的弹性云服务器和云数据库RDS实例可互相访问。安全组创建后,您可以在安全组中定义各种访问规则,当云数据库RDS实例加入该安全组后,即受到这些访问规则的保护。 默认情况下,一个用户可以创建100个安全组。 默认情况下,一个安全组最多只允许拥有50条安全组规则。 目前一个RDS实例仅允许绑定一个安全组,但一个安全组可以关联多个RDS实例。 为一个安全组设置过多的安全组规则会增加首包延时,因此,建议一个安全组内的安全组规则不超过50条。 当需要从安全组外访问安全组内的云数据库RDS实例时,需要为安全组添加相应的入方向规则。 为了保证数据及实例安全,请合理使用权限。建议使用最小权限访问,并及时修改数据库默认端口号(3306),同时将可访问IP地址设置为远程主机地址或远程主机所在的最小子网地址,限制远程主机的访问范围。 源地址默认的IP地址0.0.0.0/0是指允许所有IP地址访问安全组内的云数据库RDS实例。
  • 操作场景 云数据库RDS服务支持切换主备实例的数据同步方式,以满足不同业务需求。可选择 “异步”或者“半同步”两种方式。 异步: 应用更新数据时,主库执行完操作后立即向应用返回响应,通常具有较高的性能。 半同步(默认选择): 应用更新数据时,主库需要等待备库收到日志才向应用返回响应,对性能有影响。 半同步方式下,如果备库异常,会导致主库等待备库响应数秒钟,在此期间会阻塞主库对业务写操作的响应,直至出现下列场景: 如果备库恢复正常,则主库恢复对业务写操作的响应。 如果备库等待时间段内没有恢复正常,实例会自动切换为异步方式,切换完毕后主库恢复对写操作的响应。
  • 注意事项 您可以修改用户创建的数据库参数模板中的参数值,但不能更改默认数据库参数模板中的参数值。 在配置数据库参数模板中的参数时需要注意以下几点: 当您修改当前实例的参数模板并保存后,仅应用于当前实例,不会对其他实例造成影响。 如果您单击实例名称,在“参数修改”页面修改当前实例的参数模板,更改动态参数并保存数据库参数模板时,系统将立即应用更改,而不管“应用”设置如何。当您更改静态参数并保存数据库参数模板时,参数更改将在您手动重启该数据库实例后生效。 当您在“参数管理”页面,修改自定义参数模板时,需执行“应用”操作,才会对实例生效。当您更改静态参数并保存数据库参数模板时,参数更改将在您应用到实例后,手动重启与数据库参数模板关联的数据库实例后生效。应用参数模板到数据库实例,请参见应用参数模板。 在数据库参数模板内设置参数不恰当可能会产生意外的不利影响,包括性能降低和系统不稳定。修改数据库参数时应始终保持谨慎,且修改数据库参数模板前要备份数据。将参数模板更改应用于生产数据库实例前,您应当在测试数据库实例上试用这些参数模板设置更改。 全局参数必须通过控制台修改,会话级参数可通过SQL修改。如果您更改一个参数值,则所做更改的应用时间将由该参数的类型决定。 云数据库RDS服务的管理控制台显示与数据库参数模板关联的数据库实例状态。例如,如果数据库实例未使用对其关联的数据库参数模板所做的最新更改,则云数据库RDS服务的管理控制台将显示状态为“等待重启”的数据库实例。您将需要手动重启数据库实例,以使最新的参数更改对该数据库实例生效。 系统提供的默认参数模板不允许修改,只可单击参数模板名进行查看。当用户参数设置不合理导致数据库无法启动时,可参考默认参数模板重新配置。
  • 注意事项 并非所有数据库引擎参数都可在客户创建的数据库参数模板中进行更改。 如果您想使用您自己的数据库参数模板,只需创建一个新的数据库参数模板,创建实例的时候选择该参数模板,如果是在创建实例后有这个需求,可以重新应用该参数模板,请参见应用参数模板。 如果您已成功创建数据库参数模板,并且想在新的数据库参数模板中包含该组中的大部分自定义参数和值时,复制参数模板是一个方便的解决方案,请参见复制参数模板。 云数据库RDS和文档数据库服务不共享参数模板配额。每个用户最多可以创建100个云数据库RDS参数模板,各云数据库RDS引擎共享该配额。
  • 约束限制 正在执行操作的实例不能手动删除,只有在实例操作完成后,才可删除实例。 支持批量删除按需计费的实例,最多可以删除50个。 “按需计费”类型的实例删除后将不再产生费用,实例生成的自动备份会被同步删除,保留的手动备份会继续收取费用。 删除主实例时,会同步删除其对应的备实例和只读实例,请您谨慎操作。 实例删除后,资源立即释放,请谨慎操作。如需保留数据,请务必确认完成数据备份后再删除实例。 通过保留的手动备份,可以恢复实例数据,具体请参见通过备份文件恢复RDS for MariaDB实例数据。
  • 注意事项 当有对应的小版本更新时(定期同步开源社区问题、漏洞修复等),请及时升级小版本。 升级数据库内核小版本会重启RDS for MariaDB实例,服务可能会出现闪断,请您尽量在业务低峰期执行该操作,或确保您的应用有自动重连机制。 升级内核小版本时,如果RDS实例为DRS任务的源端,DRS可能会拉取不到RDS实例的日志;如果RDS实例为DRS任务的目标端,DRS可能会写不进目标库。 建议您在升级内核小版本前先确认RDS实例Binlog的保留时间: 如果Binlog在保留时间内,待内核小版本升级完成后,DRS任务会自动重启。 如果Binlog不在保留时间内,您需要重新配置或创建DRS任务。 升级内核小版本后,实例会升级到新的内核小版本,无法降级。如果升级失败,将会自动回退到原版本。 小版本升级过程中禁止event的DDL操作,如create event、drop event和alter event。
  • 操作场景 随着业务数据的增加,原来申请的数据库磁盘容量可能会不足,需要为云数据库RDS实例进行扩容。实例扩容的同时备份空间也会随之扩大。 当实例处于“磁盘空间满”状态时,需扩容至磁盘空间使用率小于85%才可使实例处于可用状态,使数据库恢复正常的写入操作。 建议您设置“磁盘使用率”指标的告警规则,及时了解磁盘使用情况,起到预警作用,具体请参见设置告警规则。 磁盘扩容期间,服务不中断。云数据库RDS服务只支持扩容磁盘存储空间大小,不支持变更存储类型。
  • 约束限制 账户余额大于等于0元,才可进行扩容。 实例状态为“正常”和“存储空间满”时可以进行扩容。 云数据库 RDS for MariaDB实例SSD盘的最大扩容容量与所选实例规格有关,其他存储类型的磁盘最大可扩容至4000GB(如果您想提高存储空间扩容上限到10TB,请联系客服申请),扩容次数没有限制。 磁盘扩容期间,实例状态为“扩容中”备份业务不受影响。 如果是主备实例,针对主实例扩容时,会同时对其备实例进行扩容。 磁盘扩容的过程中,不需要重启数据库实例。 扩容过程中,该实例不可重启和删除。 磁盘容量变更只允许扩容,不能缩容。 选择磁盘加密的实例,新扩容的磁盘空间依然会使用原加密密钥进行加密。
  • 原因分析 查看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创建实例时设置密码的账号。
  • 解决方案 手动给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权限错误。
  • 场景描述 使用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
  • 原因分析 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) 父主题: 使用场景
共100000条