云服务器内容精选

  • 版本依赖 下面是MAS-Redis-SDK中引的依赖及依赖版本: 所属模块 依赖名称 依赖版本 scope devspore-dcs com.huaweicloud.devspore:devspore-mas-common latest compile com.fasterxml.jackson.core:jackson-core 2.13.2 compile com.fasterxml.jackson.core:jackson-databind 2.14.0.rc1 compile com.fasterxml.jackson.dataformat:jackson-dataformat-yaml 2.13.2 compile org.projectlombok:lombok 1.18.20 provided redis.clients.jedis 3.7.0 compile org.apache.commons.commons-pool2 2.10.0 compile devspore-mas-common org.slf4j:slf4j-api 1.7.36 compile io.etcd:jetcd-core 0.5.7 compile com.google.errorprone:error_prone_annotations 2.5.1 compile spring-cloud-starter-huawei-devspore-dcs com.huaweicloud.devspore:devspore-dcs latest compile org.springframework.boot:spring-boot-autoconfigure 2.5.4 compile org.projectlombok:lombok 1.18.20 provided org.springframework.boot:spring-boot-autoconfigure-processor 2.5.4 compile org.springframework.boot:spring-boot-configuration-processor 2.5.4 compile javax.annotation:javax.annotation-api 1.3.2 compile 依赖选取推荐: 依赖项 推荐版本 spring依赖 4.1.3-RELEASE及以上版本 spring-boot依赖 1.2.0.RELEASE及以上版本 jedis客户端: redis.clients:jedis 3.7及以上版本 MAS-Redis-SDK使用的spring-boot版本为2.5.4版本,用户使用的spring-boot版本可能和该版本不一致,如果用户使用的spring-boot版本高于2.5.4版本则无需做修改,如果低于2.5.4版本需要用户将spring-boot-autoconfigure依赖修改为用户自己使用的spring-boot版本。 由于依赖漏洞和超期问题MAS-Redis-SDK使用的snakeyaml为2.0版本,spring-boot需要2.7.10以上版本才能使用snakeyaml2.0版本。用户可根据自身spring-boot版本确认是否使用snakeyaml2.0版本。如不使用snakeyaml2.0,需自行指定snakeyaml版本。 父主题: 约束
  • 约束 MAS-ElasticSearch-SDK的多活容灾能力需要MAS服务支持,SDK的故障动态切换数据源能力需要配合MAS实例一起使用。 在使用MAS-ElasticSearch-SDK进行开发前,需要先做好如下准备: 已创建MAS实例。 在实例下已创建对应的监控器。 请参考ElasticSearch监控管理,配置多活容灾ElasticSearch监控。 父主题: MAS-ElasticSearch-SDK使用手册
  • MAS-DB-SDK MAS-DB-SDK是一个DataSource的实现,可替代spring-boot-starter-jdbc为Spring注入一个DataSource对象,通过与MAS服务对接从而实现多数据源管理的工具,具有以下特性: 多活容灾能力。 多活容灾能力是指在同城场景下实现多活故障自动切换,由SDK和MAS服务配合完成。 读写分离。 读写分离由SDK实现,支持随机、轮询的负载均衡算法。 自定义指定数据源进行数据访问。 用户也可以通过注解方式指定数据源以及主从数据库进行数据读写。 注解中source是指定选择哪个节点的数据源,从YAML配置中的router.nodes中选取,如果不设置,请使用当前DCG仲裁的数据中心(MAS平台上激活的数据中心,如果未对接MAS平台,则选取本地配置中的active,即yaml配置中的router.active)。 DCG为多活实例的仲裁中心,提供端到端(流量-应用-数据)仲裁和统一多活切换管控能力。 注解中的HintType用于查询时指定主从数据库,适用于读写分离场景,当前支持的配置值有:HintType.READMASTER(从master库读取)、HintType.READSLAVE(从slave库读取)、HintType.NONE(不指定),不指定时,默认从slave库读取。HintType只针对读操作有效,写操作HintType无效。 SDK本身不支持数据源间的数据同步,数据源同步需要依赖DRS服务。 SDK不支持分布式事务,同一个事务处理过程中,不支持切换数据库。
  • 本地读单边写 本地读单边写模式应在配置文件中配置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 #路由策略 父主题: 使用场景
  • 配置项说明 表1 配置参数详解 参数名称 是否必选 参数类型 取值范围 描述 props 否 PropertiesConfiguration 请参考PropertiesConfiguration数据结构说明。 MAS监控配置,配合etcd使用。 etcd 否 EtcdConfiguration 请参考EtcdConfiguration数据结构说明。 etcd配置,如配置,则会从远端拉取。 redis 是 RedisConfiguration 请参考RedisConfiguration数据结构说明。 RedisServer配置。 routeAlgorithm 是 string single-read-write local-read-single-write double-write 路由算法。 active 是 string 只能是“dc1”或“dc2”。 激活的Redis。 chaos 否 InjectionProperties 请参考InjectionProperties数据结构说明 故障注入相关配置。 表2 RedisConfiguration数据结构说明 参数名称 是否必选 参数类型 取值范围 描述 nearest 否 string 只能是“dc1”或“dc2”。 指明哪个是近端Redis。 asyncRemoteWrite.retryTimes 否 int 默认为3。 异步写远端操作重试次数。 connectionPool.enable 否 bool true/false默认true。 是否启用连接池。 asyncRemotePool 否 AsyncRemotePoolConfiguration 请参考AsyncRemotePoolConfiguration数据结构说明。 异步写线程池配置。 servers 是 map[string]ServerConfiguration key为dc1/dc2 单个维度请参考ServerConfiguration数据结构说明。 dc1,dc2的RedisServer连接配置。 表3 AsyncRemotePoolConfiguration数据结构说明 参数名称 是否必选 参数类型 取值范围 描述 threadCoreSize 否 int - 线程池的基本大小。 persist 否 bool true/false 默认false。 命令是否持久化,否:速度快;是:速度比非持久化低。 taskQueueSize 否 int 默认5。 缓冲队列数。 persistDir 否 string 默认根目录"/"。 Redis日志文件目录。 表4 ServerConfiguration数据结构说明 参数名称 是否必选 参数类型 取值范围 描述 hosts 是 string - RedisServer地址。 password 是 string - RedisServer密码。 type 是 string cluster, master-slave, normal。 RedisServer类型。 cloud 是 string - RedisServer所属云。 region 是 string - RedisServer所属Region。 azs 是 string - RedisServer所属AZ。 pool 否 ServerConnectionPoolConfiguration 请参考ServcerConnectionPoolConfiguration数据结构说明。 连接池配置。 表5 ServcerConnectionPoolConfiguration数据结构说明 参数名称 是否必选 参数类型 取值范围 描述 maxTotal 否 int - 最大活动对象数。 maxIdle 否 int - 最大能够保持idle状态的对象数。 minIdle 否 int - 最小能够保持idle状态的对象数。 maxWaitMillis 否 int - 当池内没有返回对象时,最大等待时间。 timeBetweenEvictionRunsMillis 否 int - 空闲连接检测线程,检测的周期,毫秒数。如果为负值,表示不运行检测线程。默认为-1。 表6 PropertiesConfiguration数据结构说明 参数名称 是否必选 参数类型 取值范围 描述 version 是 string - 项目版本号。 appId 是 string - 项目组名称。 monitorId 是 string - 监控组名称。 cloud 否 string - 项目部署云组。 region 否 string - 项目部署region。 azs 否 string - 项目部署AZ。 表7 EtcdConfiguration数据结构说明 参数名称 是否必选 参数类型 取值范围 描述 address 是 string - Etcd地址。 apiVersion 是 string v3 Etcd版本。 username 是 string - Etcd用户名。 password 是 string - Etcd密码。 httpsEnable 是 bool true/false 是否启用https。 父主题: Redis
  • 使用场景 本模块客户端创建支持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
  • props、etcd配置项在MAS服务中如何查询 登录MAS控制台,进入“多活管理”页面。 在“多活管理”页面中单击对应的实例,进入实例控制台。 单击“应用列表”选择本项目应用,查看应用ID,即为props.appId。 单击“监控列表”选择本项目监控器,查看监控器ID,即为props.monitorId。 单击“监控列表”,在本项目监控器所在行单击“编辑”,在“编辑监控”页面单击“连接池配置”,在“数据中心”页签下的“数据源名称”就是props.databaseName。 单击“基本信息”,在“连接信息”页签单击“ETCD链接地址”右边的“查看详情”,在弹窗中查看ETCD的相关配置。 父主题: 常见问题
  • gorm 创建gorm.io/gorm包gorm.DB数据源,进行mysql操作。 依赖引入,配置文件或配置信息修改参考原生DB。 初始化创建gorm数据源DevSporeGorm,后续执行Mysql相关操作。 配置文件方式创建。 import ( "log" _ "github.com/huaweicloud/devcloud-go/sql-driver/mysql" "gorm.io/driver/mysql" "gorm.io/gorm" ) var ( DevSporeGorm *gorm.DB err error ) func init() { DevSporeGorm, err = gorm.Open(mysql.New( mysql.Config{DriverName: "devspore_mysql", DSN: "./conf/resources/config_mysql.yaml"}, )) if err != nil { log.Fatalln(err) } } 配置信息方式创建。 import ( "log" devspore "github.com/huaweicloud/devcloud-go/sql-driver/mysql" "gorm.io/driver/mysql" "gorm.io/gorm" ) var ( DevSporeGorm *gorm.DB err error ) func init() { devspore.SetClusterConfiguration(mysqlConfiguration()) DevSporeGorm, err = gorm.Open(mysql.New(mysql.Config{DriverName: "devspore_mysql", DSN: ""})) if err != nil { log.Fatalln(err) } } 父主题: 使用指南
  • 如何选择组件版本 MAS-Mongo-SDK 1.3.1-RELEASE springboot适用版本:2.7.0 - 2.7.2 表1 核心依赖组件版本 GroupId ArtifactId Version 备注 org.springframework spring-aspects 5.3.9 - org.springframework.data spring-data-mongo 3.4.1 - org.mongodb mongodb-driver-sync 4.6.1 - MAS-Mongo-SDK 2.1-1.3.0-RELEASE springboot适用版本:2.1.0.RELEASE - 2.1.18.RELEASE 表2 核心依赖组件版本 GroupId ArtifactId Version 备注 org.springframework spring-aspects 5.3.9 - org.springframework.data spring-data-mongo 2.1.8.RELEASE - org.springframework.data:spring-data-mongo 2.1.8.RELEASE,此依赖包存在以下漏洞请参见National Vulnerability Database。 需要注意使用spring-data-mongodb的@Query和@Aggregate注解,以防产生spel注入漏洞。 父主题: 常见问题
  • 配置项说明 表1 InjectionProperties数据结构说明 参数名称 是否必选 参数类型 取值范围 描述 active 是 bool true/false 默认false 故障注入功能是否开启。 duration 是 int - 故障注入持续时间,单位:秒。 interval 是 int - 故障注入间隔时间,单位:秒。 percentage 是 int 0-100 注入故障概率。 delayInjection.active 是 bool true/false 延时注入开关。 delayInjection.percentage 是 int 0-100 延时故障生效概率。 delayInjection.timeMs 是 int - 延时基数,单位:毫秒。 delayInjection.jitterMs 是 int - 延时抖动幅度,单位:毫秒。 errorInjection.active 是 bool true/false 异常注入开关。 errorInjection.percentage 是 int 0-100 异常故障生效概率。 父主题: 故障注入
  • 开发流程 开发的流程如下所示: 版本获取及引入依赖 通过go.mod引入需要的依赖,是使用MAS-GO-SDK的基础。 配置创建DevsporeClient客户端 通过配置客户端信息,引入MAS-GO-SDK-Redis创建DevsporeClient客户端。 支持以代码方式添加配置信息或者从YAML文件读取配置信息。 按需引入DevsporeClient客户端 在需要使用DevsporeClient客户端的地方引入并执行Redis操作。 父主题: 概述
  • MAS-SDK版本变更记录及下载地址如下: 表1 MAS-DB-SDK版本变更 开发语言 版本及下载地址 变更描述 Java v 1.2.0-RELEASE 初次发布。 Java v 1.2.1-RELEASE 支持本地读单边写特性。 Java v 1.2.2-RELEASE 支持强制路由source设置为ACTIVE。 Java v 1.2.4-RELEASE 修复etcd故障后不能再watch key变化问题。 Java v 1.2.6-RELEASE 增加连接池日志打印。 Java v 1.2.7-RELEASE 修改select for update类型sql路由,改为路由到主库。 表2 MAS-Redis-SDK版本变更 开发语言 版本及下载地址 变更描述 Java v 1.2.0-RELEASE 初次发布。 Java v 1.2.2-RELEASE 增加byte系列方法,并重写对接spring-redis相关接口,支持script相关命令,优化etcd异常日志。 表3 MAS-Mongo-SDK版本变更 开发语言 版本及下载地址 变更描述 Java v 1.2.0-RELEASE 初次发布。 Java v 1.2.1-RELEASE 修复一些问题。 Java v 1.2.2-RELEASE 修复一些问题。 表4 MAS-GO-SDK版本变更 开发语言 版本及下载地址 变更描述 GO v 1.2.0-RELEASE 初次发布。
  • 内置注入故障 带波动的延时故障 基于延时基数和抖动幅度创建带有波动的延时故障。具体触发要结合故障注入功能是否开启、注入故障概率、延时注入开关、延时故障生效概率决定。 异常故障 内置如下异常故障,结合故障注入功能是否开启、注入故障概率、异常注入开关、异常故障生效概率决定是否触发,触发故障为对应模块随机一种异常。 表1 异常故障 模块 故障名称 描述 全模块 SocketErr 网络连接异常。 IORWErr IO异常-读写关闭。 IOUEErr IO异常-意外结束。 NilPointerErr 空指针异常。 mysql SQLErr sql最顶层异常。 SQLTimeoutErr sql执行超时异常。 redis RedisCommandUKErr 未知指令异常。 RedisCommandArgErr 指令参数异常。 父主题: 故障注入
  • 配置项说明 表1 配置参数详解 参数名称 是否必选 参数类型 取值范围 描述 props 否 PropertiesConfiguration 请参考PropertiesConfiguration数据结构说明。 MAS监控配置,配合etcd使用。 etcd 否 EtcdConfiguration 请参考EtcdConfiguration数据结构说明。 etcd配置,如配置,则会从远端拉取。 datasource 是 map[string] DataSourceConfiguration key自定义,单维度请参考表2。 数据源。 router 是 RouterConfiguration 请参考RouterConfiguration数据结构说明。 路由相关配置。 chaos 否 InjectionProperties 请参考InjectionProperties数据结构说明。 故障注入相关配置。 表2 DataSourceConfiguration数据结构说明 参数名称 是否必选 参数类型 取值范围 描述 url 是 string protocol(address)/dbname?param=value Data Source Name, 数据源连接串。 username 是 string - 用户名。 password 是 string - 密码。 表3 RouterConfiguration数据结构说明 参数名称 是否必选 参数类型 取值范围 描述 active 是 string nodes的key 激活节点。 routeAlgorithm 是 string single-read-write local-read-single-write 路由算法。 retry.times 否 string - 失败重试次数。 retry.delay 否 string - 重试间隔,单位毫秒。 nodes 是 map[string]NodeConfiguration key自定义,单维度参考NodeConfiguration数据结构说明 节点相关配置。 表4 NodeConfiguration数据结构说明 参数名称 是否必选 参数类型 取值范围 描述 master 是 string datasource的key 主节点数据源。 loadBalance 否 string RANDOM、ROUND_ROBIN 读写分离负载均衡算法。 slaves 否 []string datasource的key 从节点数据源。 表5 PropertiesConfiguration数据结构说明 参数名称 是否必选 参数类型 取值范围 描述 version 是 string - 项目版本号。 appId 是 string - 项目组名称。 monitorId 是 string - 监控组名称。 databaseName 是 string - 数据库名称。 表6 EtcdConfiguration数据结构说明 参数名称 是否必选 参数类型 取值范围 描述 address 是 string - Etcd地址。 apiVersion 是 string v3 Etcd版本。 username 是 string - Etcd用户名。 password 是 string - Etcd密码。 httpsEnable 是 bool true/false 是否启用https。 父主题: Mysql
  • 环境约束 安装的工具包括JDK、Maven、IDEA ,配置对应的环境变量,确保本地开发环境可用。 使用MAS-DB-SDK组件需具备一定的Java后端、持久层框架集成等知识。 准备项 说明 准备操作系统 Windows系统。Windows版本要求:Windows 7及以上版本。 安装JDK 开发环境的基本配置。JDK版本要求:1.8.0_262及以上版本。 安装Maven MAS-DB-SDK使用Maven获取项目版本。Maven版本要求:3.3.0及以上版本。 安装和配置IntelliJ IDEA 用于开发程序的工具。建议IntelliJ IDEA版本为2020及以上版本。 父主题: 约束