华为云用户手册

  • 配置构建触发器 这里介绍两种构建方式: 在Jenkins中手动触发构建,手动单击任务右边的“立即构建”从而触发流水线任务。 通过Gitlab提交代码后自动触发Jenkins构建,这种方式同时支持手动触发构建。 此处以第二种方式为例。 配置Jenkins构建触发器。 勾选“Build when a change is pushed to GitLab”,保存图示中的GitLab webhook URL(配置Gitlab webhook时需使用),然后单击右下角“高级”。 图6 获取GitLab webhook URL 选择“Filter branches by regex ”,配置指定分支变更后触发构建任务,示例中的分支名称为main,单击右下角“Generate”生成Secret token并保存,在配置Gitlab webhook时需使用。 图7 获取Secret token 配置Gitlab webhook 登录Gitlab,进入代码仓库,示例中的仓库名称是“test-demo”。 选择settings中的“Webhooks”,URL和Secret token填写1获取到的GitLab webhook URL和Secret token。 图8 webhooks配置 取消勾选SSL verification的“Enable SSL verification”,单击“Add webhook”。 图9 完成webhook配置
  • 配置流水线脚本 流水线脚本是构建时运行的构建命令,脚本参数说明见表1。 表1 流水线脚本参数说明 参数 是否必须 参数类型 描述 git_url 是 String Gitlab代码仓库地址。 credentials_id 是 String 使用账号密码配置的Gitlab凭据id,参考创建Gitlab凭证。 branch_name 是 String Gitlab代码仓库分支名称。 maven 是 String maven安装的可执行文件路径,示例:/root/app/maven/apache-maven-3.8.6/bin/mvn。 deploy_shell 是 String deploy.sh脚本在Jenkins所在虚拟机上存放的路径,示例:/root/jar/deploy.sh,内容请参见deploy.sh脚本说明。 build_target_name 是 String 构建产物名称:软件包名称或镜像名称:版本号,通过执行脚本时传入该参数,软件包部署场景为软件包名称,镜像部署场景为构建出来的镜像名称:版本号。 完成“构建触发器”配置之后,在“流水线”页签,在下拉框选择“Pipeline script”。 图10 流水线配置 配置流水线脚本,示例中使用的是构建jar包场景,脚本如下: node { // 定义代码仓地址 def git_url = 'http://100.**.**.207:8090/test/test-demo.git' // Gitlab凭据id def credentials_id = '133b7c9a-eb6a-4484-84b3-c3509ed63df8' // git代码仓库分支名称 def branch_name = 'main' // maven安装的可执行文件路径 def maven = '/root/app/maven/apache-maven-3.8.6/bin/mvn' // deploy.sh 脚本存放路径,需要设置可执行权限 def deploy_shell = '/root/jar/deploy.sh' // 构建产物名称:软件包名称或镜像名称,必须参数,通过执行脚本时传入该参数 def build_target_name = "cae-demo-1.0-SNAPSHOT.jar" stage('Clone sources') { git branch: branch_name, credentialsId: credentials_id, url: git_url } stage('Build') { // 构建jar包 sh "'$maven' clean package -Dmaven.test.failure.ignore=true" } stage('deploy') { // 执行脚本,使用构建产物升级CAE组件,超时时间5分钟sh "timeout 300s '$deploy_shell' '$build_target_name'" }} 流水线脚本运行时会调用deploy.sh,该脚本详细说明参见deploy.sh脚本说明。 设置脚本文件deploy.sh为可执行文件。
  • 创建用户组并授权 在左侧导航栏中选择“用户组”,单击“创建用户组”。 图3 创建用户组 输入“用户组名称”,例如cae-test,单击“确定”,完成用户组创建。 在用户组列表中单击创建完成的用户组名称“cae-test”,进入用户组概览页面。 在“授权记录”页签中单击“授权”,选择创建自定义策略中创建的自定义策略。 图4 授权自定义策略 单击“下一步”,选择授权范围方案为“所有资源”。 单击“确定”,完成授权。 待授权完成后,单击“完成”,返回用户组概览页面。 图5 完成用户组授权 单击“用户管理”,进入“用户组管理”页面。 在用户列表中勾选需要控制权限的子用户,单击“确定”。 图6 配置用户管理
  • 操作步骤 登录CAE控制台。选择“组件配置”。 在“组件配置”页面上方的下拉框中选择待操作的组件。 图1 选择待操作的组件 如图2所示配置就绪探针,并生效配置,具体操作步骤请参考配置健康检查。 图2 配置就绪探针 对组件进行升级操作,具体操作请参考升级组件。 升级时,在左侧导航栏中选择“组件列表”,进入“组件列表”页面,单击对应组件“访问地址”列的ip地址,查看应用页面。如图3所示服务并无中断。 图3 访问应用页面 在“组件事件”页面,查看组件事件,可以看到实例存在不健康的请求,此时检测到新实例还未准备好进行流量切换,则继续使用旧实例提供服务。 图4 查看组件事件
  • Dockerfile解析 示例仓库中的Dockerfile文件。 # 指定基础镜像为mcr.microsoft.com/dotnet/sdk:7.0,该基础镜像作为ASP.NET Core项目的构建环境FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build# 指定工作目录WORKDIR /source# 从构建主机上复制源码到基础镜像,并指定工作目录和构建命令COPY . ./dotnetcore-docs-hello-world/WORKDIR /source/dotnetcore-docs-hello-worldRUN dotnet publish -c release -o /app # 指定新的基础镜像为mcr.microsoft.com/dotnet/aspnet:7.0,并将第二步生成的构建产物复制到新的基础镜像中FROM mcr.microsoft.com/dotnet/aspnet:7.0WORKDIR /appCOPY --from=build /app ./# 设置环境变量PORT,并声明容器端口为80ENV PORT 80EXPOSE 80# 指定容器启动命令ENTRYPOINT ["dotnet", "dotnetcoresample.dll"]
  • 设置GitHub仓库授权 设置GitHub仓库授权,使构建工程、应用组件等可以使用授权信息访问GitHub源码仓库。 登录CAE控制台。 在左侧导航栏中选择“系统设置”。 单击“源码仓库授权”模块中的“编辑”,进入“已授权源码仓库”页面。 单击“新增授权”,参考表1选择需要的源码仓库,并配置参数。 表1 授权参数说明 参数 说明 授权名称 授权名称,创建之后不可更改 仓库类型 支持以下官方仓库类型: 选择GitHub代码仓库。 选择“授权方式”。 OAuth:请单击“使用OAuth授权”,根据页面提示完成授权创建。 私人令牌:输入已获取到的私人令牌。 单击“确认”,完成GitHub代码仓库授权。 图1 授权GitHub代码仓库
  • 原理说明 在Spring Cloud应用中,系统环境变量的优先级高于配置文件。因此,如果在系统环境变量中配置了参数,那么系统会优先使用环境变量中的参数。为了实现自动对接Nacos引擎,CAE会自动在组件中添加SPRING_CLOUD_NACOS_DISCOVERY_SERVERADDR和SPRING_CLOUD_NACOS_CONFIG_SERVERADDR环境变量。这样,即使在配置文件中没有配置这些参数,系统也能够正确地连接到Nacos引擎。 配置nacos参数时需注意:如果用户在外部配置了比环境变量优先级更高的nacos注册发现参数,可能会导致nacos对接异常。例如,如果在启动命令中添加了--spring.cloud.nacos.discovery.server-addr=nacos.com,这会覆盖环境变量中的相应配置,从而导致组件对接nacos异常无法正常工作。因此,在配置nacos参数时,需要注意优先级的问题,以确保nacos能够正确地对接。
  • 配置 云存储 挂载路径 返回CAE控制台,选择“组件配置”。 在“组件配置”页面上方的下拉框中选择Nginx组件。 单击“云存储配置”模块中的“编辑”,进入云存储配置页面。 图7 配置云存储 在“云存储配置”页面单击“配置并行文件系统”,并输入挂载路径并设置权限。 并行文件系统名称:选择云存储授权中授权的并行文件系统“test-nginx”。 文件掩码(umask):文件掩码设置为0022。 挂载路径:数据存储挂载到组件上的路径。本实践使用“nginx”默认路径“/usr/share/nginx/html”。 权限:挂载路径及挂载路径下文件,有“读写”、“只读”两种权限,此处选择“读写”。 注意事项: 挂载静态文件路径到云存储上时需要注意:请不要挂载到含有系统文件的目录下,如“/”、“/var/run”等,否则可能会导致部署的组件异常。 挂载路径选择权限时需要注意:读写权限表示组件对于该挂载路径及路径下的所有文件拥有读写权限,只读即只有只读权限。 图8 配置云存储挂载路径 单击“确定”后在“云存储配置”页面再次单击“确定”,完成配置。 在“组件配置”页面单击“生效配置”。 图9 生效配置
  • 生成Gitlab访问令牌 登录Gitlab。 鼠标移动到右上角的账号名上,单击“Edit profile”。 图1 进入编辑页面 单击“Access Tokens”,输入“Token name”,勾选“api”,单击“Create personal access token”创建访问令牌。 图2 创建访问令牌 完成后在页面上方的“Personal Access Tokens”右侧显示token令牌。 注意:令牌仅在初次生成时显示,否则下次需要重新创建。该令牌仅用于Gitlab对接测试。 图3 令牌显示
  • 参数说明 表1 参数说明 参数名称 是否必须 参数类型 描述 bucket_name 是 String obs桶名称,CAE发布插件中选择的区域和obs桶所在的区域保持一致。 file_name 是 String 上传到obs桶中的软件包名称。 file_dir 是 String 软件包上传到obs桶中的存放目录,目录需要以/结尾,如果obs桶中没有这个目录,会自动创建出该目录。如根目录是“/”,根目录下面的test目录“/test/”。 obs_address 是 String 值的格式为:obs.区域项目名称.myhuaweicloud.com,区域项目名称就是region,参考参数值获取。 软件包地址 是 String 上传到obs的软件包地址,值填写: https://${bucket_name}.${obs_address}${file_dir}${file_name}。
  • 创建环境 登录CAE控制台。 选择以下任意方式创建环境。 在您首次使用本服务时,页面会提醒您尚未创建环境。 单击创建环境卡片中的“立即创建”。 图1 创建环境 在弹出的对话框中输入对应的参数,具体参照表1。 表1 创建环境 参数 说明 环境名称 输入自定义的环境名称。 企业项目 设置企业项目。 企业项目管理提供了一种按企业项目管理云资源的方式,帮助您实现以企业项目为基本单元的资源及人员的统一管理,默认项目为default。 开通企业项目后可以使用。 虚拟私有云 下拉框中选择环境资源所在VPC。 如需创建VPC,请单击“创建虚拟私有云”,具体操作参考创建虚拟私有云。 注意:环境创建完成后,不支持修改VPC。 子网 下拉框中选择环境子网。 无可用子网时,单击“创建子网”,进入网络控制台创建新子网,具体操作参考为虚拟私有云创建新的子网。 注意:子网需要保留至少2个可用网络IP地址,以供CAE配置和优化使用,如果不满足条件,会创建失败。 安全组 选择“自动生成”。 说明: 安全组需要放通所选择的子网到子网网关地址,以及需要访问的中间件如RDS, CS E等服务的访问地址和端口。 组织 如果您是首次使用本服务,在该下拉框中单击“创建组织”,输入自定义的组织名称。 非首次使用本服务,选择“组件列表”。 单击页面上方环境模块右侧。 在弹出的“新增环境”对话框中输入新增环境的名称。 可直接使用已创建的环境。 单击“确定”,完成创建环境。
  • 验证obsutil上传文件到OBS是否正常 创建测试文件。例如:test.txt。 touch test.txt 使用obsutil上传创建的文件到obs。 ~/tools/obsutil/obsutil_linux_amd64_5.4.6/obsutil cp test.txt obs://{OBS桶名称} 请将{OBS桶名称}替换为已创建的待使用的OBS桶名称,本示例选择的桶名为cae-obs,将在当前目录新建的test.txt文件上传到cae-obs桶中。提示“Upload successfully”表示上传成功。 图1 上传文件到obs 登录OBS控制台,选择“桶列表”。 单击本示例桶名名称cae-obs,进入“对象”页面,查看已经上传的文件test.txt。
  • 使用流水线升级多个组件 选择流水线,单击“参数化构建”。 图7 参数化构建 选择要升级的组件,可以选择一个或多个同时升级,本示例选择全部组件同时升级,单击“开始构建”。 图8 选择组件 可在构建历史中查看流水线任务执行结果。 图9 查看执行结果 流水线日志如下所示,可以看出先升级componentA,再并行升级componentB和componentC,最后升级componentD。 Started by user adminRunning in Durability level: MAX_SURVIVABILITY[Pipeline] Start of Pipeline[Pipeline] nodeRunning on Jenkins in /root/.jenkins/workspace/pipeline-arrange[Pipeline] {[Pipeline] sh+ echo componentA,componentB,componentC,componentD+ grep -w -o componentA[Pipeline] sh+ echo componentA,componentB,componentC,componentD+ grep -w -o componentD[Pipeline] sh+ echo componentA,componentB,componentC,componentD+ grep -w -o componentB[Pipeline] sh+ echo componentA,componentB,componentC,componentD+ grep -w -o componentC[Pipeline] withEnv[Pipeline] {[Pipeline] stage[Pipeline] { (Build componentA)[Pipeline] sh+ echo 'start to build componentA'start to build componentA[Pipeline] script[Pipeline] {[Pipeline] buildScheduling project: componentAStarting building: componentA #13[Pipeline] echoSUC CES S[Pipeline] }[Pipeline] // script[Pipeline] }[Pipeline] // stage[Pipeline] stage[Pipeline] { (Build parallel jobs)[Pipeline] parallel[Pipeline] { (Branch: Build componentB)[Pipeline] { (Branch: Build componentC)[Pipeline] stage[Pipeline] { (Build componentB)[Pipeline] stage[Pipeline] { (Build componentC)[Pipeline] sh[Pipeline] sh+ echo 'start to build componentB'start to build componentB[Pipeline] script+ echo 'start to build componentC'start to build componentC[Pipeline] {[Pipeline] script[Pipeline] {[Pipeline] buildScheduling project: componentB[Pipeline] buildScheduling project: componentCStarting building: componentB #12Starting building: componentC #12[Pipeline] echoSUCCESS[Pipeline] }[Pipeline] // script[Pipeline] }[Pipeline] // stage[Pipeline] }[Pipeline] echoSUCCESS[Pipeline] }[Pipeline] // script[Pipeline] }[Pipeline] // stage[Pipeline] }[Pipeline] // parallel[Pipeline] }[Pipeline] // stage[Pipeline] stage[Pipeline] { (Build componentD)[Pipeline] sh+ echo 'start to build componentD'start to build componentD[Pipeline] script[Pipeline] {[Pipeline] buildScheduling project: componentDStarting building: componentD #10[Pipeline] echoSUCCESS[Pipeline] }[Pipeline] // script[Pipeline] }[Pipeline] // stage[Pipeline] }[Pipeline] // withEnv[Pipeline] }[Pipeline] // node[Pipeline] End of PipelineFinished: SUCCESS 登录CAE控制台,在组件列表查看组件状态,“最近一次变更状态/时间”列显示状态为“升级成功”,表示组件升级成功。 图10 查看组件
  • 脚本说明 每个组件都需要在pipeline中的envionment获取组件参数,用于判断参数化构建时是否选中,执行下面脚本: _{component_name}="${sh(script:' echo $Model_Name| grep -w -o "{component_name}" || echo "error" ', returnStdout: true).trim()}" 表2 参数说明 参数名称 描述 Model_Name 配置构建参数中的Name。 {component_name} 配置构建参数中的Choose Source for Value中的value里面填写的组件名称之一。 每个组件都需要配置一个stage,用于组件的升级任务,如果是串行执行的,则按照先后顺序放置stage的位置,如果是并行执行的任务就放置在stage('Build parallel jobs')中的parallel中。 stage脚本: stage('Build {component_name}') { when { environment name: '_{component_name}', value: '{component_name}' } steps { sh ''' echo "start to build {component_name}" ''' script{ def componentBuild=build(job: '{component_jenkins_task}') //打印执行任务的结果 println componentBuild.getResult() } }} 表3 参数说明 参数 描述 {component_name} 配置构建参数中的Choose Source for Value中的value里面填写的组件名称之一。 {component_jenkins_task} jenkins中创建的用于组件升级的任务名称,例如:用于componentA组件升级的任务名称为如图6所示。 图6 组件升级任务名称
  • 流水线脚本 流水线脚本支持componentA、componentB、componentC和componentD,4个组件中的一个或多个同时升级,并且按照依赖顺序先升级componentA,再并行升级componentB和componentC,最后升级componentD。如果构建时没有勾选到的组件会跳过,不执行升级。 pipeline { agent any environment{ //构建时选择的组件以‘,’隔开的格式存在变量Model_Name里 //判断变量Model_Name里的可选组件是否存在,如果存在,把组件名赋值给对应变量,如果不存在,把字符串"error"赋值给对应变量。 //用于判断后续组件是否需要构建 _componentA="${sh(script:' echo $Model_Name| grep -w -o "componentA" || echo "error" ', returnStdout: true).trim()}" _componentB="${sh(script:' echo $Model_Name| grep -w -o "componentB" || echo "error" ', returnStdout: true).trim()}" _componentC="${sh(script:' echo $Model_Name| grep -w -o "componentC" || echo "error" ', returnStdout: true).trim()}" _componentD="${sh(script:' echo $Model_Name| grep -w -o "componentD" || echo "error" ', returnStdout: true).trim()}" } stages { stage('Build componentA') { //when条件判断当环境变量"_componentA" = "componentA"时,表示构建时选择了该组件,执行此stage,否则跳过此stage when { environment name: '_componentA', value: 'componentA' } steps { sh ''' echo "start to build componentA" ''' script{ //build(job: 'componentA') 表示执行componentA任务,这个任务是jenkins中创建的任务名称,用于componentA组件升级的任务 def componentBuild=build(job: 'componentA') //打印执行任务的结果 println componentBuild.getResult() } } } stage('Build parallel jobs') { //failFast true 表示parallel并行的stage中只要有一个失败,其他并行任务也会中止 //不加failFast true,parallel中失败的stage不会影响其他并行的stage执行,直到所有的并行任务执行完成 //failFast true //按需添加 //parallel 表示里面的stage是并行执行的,只要其中有一个stage执行失败,则"Build parallel jobs"这个stage是失败的,它后续的stage不会执行 parallel { stage('Build componentB') { when { environment name: '_componentB', value: 'componentB' } steps { sh ''' echo "start to build componentB" ''' script{ def componentBuild=build(job: 'componentB') println componentBuild.getResult() } } } stage('Build componentC') { when { environment name: '_componentC', value: 'componentC' } steps { sh ''' echo "start to build componentC" ''' script{ def componentBuild=build(job: 'componentC') println componentBuild.getResult() } } } } } stage('Build componentD') { when { environment name: '_componentD', value: 'componentD' } steps { sh ''' echo "start to build componentD" ''' script{ def componentBuild=build(job: 'componentD') println componentBuild.getResult() } } } }}
  • 配置jenkins流水线 进入jenkins的系统管理页面,单击“新建任务”。 图1 新建任务 输入任务名称,选择任务类型为“流水线”。 图2 创建流水线 在“General”页面中,添加“扩展选项参数”。 图3 添加参数 参考图4配置需要编排的组件。 表1 配置构建参数 参数名称 描述 示例 Name 设置参数的名称,构建时选择的组件会存放在该变量名。 Model_Name Description 设置构建参数的描述。 选择需要升级的组件 Parameter Type 选择基本参数类型。 Check Boxes Number of Visible Items 设置流水线编排的组件数量。 4 Delimiter 设置组件之间的分隔符,设置为逗号(,)。 , Value 设置流水线编排的组件名称,用逗号(,)分隔。 componentA,componentB,componentC,componentD 图4 配置构建参数 选择“流水线”,在“流水线”页面进行脚本配置,脚本内容请参考流水线脚本。 图5 配置流水线脚本 脚本配置完成后,单击“保存”。
  • 参数说明 表1 参数说明 参数名称 是否必须 参数类型 描述 release_version 是 String 发布版本号,取值使用时间戳变量:${TIMESTAMP}。 软件包地址 是 String 编译构建出来的软件包上传到软件发布库中的地址。 例如:复制图9中下载地址,下载地址为https://devrepo.devcloud.cn-east-3.huawei.com/DevRepoServer/v1/files/download?filename=39d25a3cc6ee48678533020abcfbf941/cae-backend/20231028200733/cae-backend.jar,将软件包的目录发布版本号20231028200733改为${release_version},则软件包地址的值为https://devrepo.devcloud.cn-east-3.huawei.com/DevRepoServer/v1/files/download?filename=39d25a3cc6ee48678533020abcfbf941/cae-backend/${release_version}/cae-backend.jar。
  • 解决方案 新建一条jenkins流水线来编排多个组件,自动按照依赖顺序构建升级,并使用参数化构建的方式,同时支持单个或多个组件的升级。 下面以一个示例说明流水线执行流程。 有4个组件分别是componentA、componentB、componentC和componentD,其中componentD依赖componentB和componentC,componentB和componentC依赖componentA。 流水线执行流程:
  • 操作步骤 登录CSE控制台。选择“注册配置中心”。 单击需要注册的Nacos名称,在基础信息页面获取Nacos“内网地址”和“虚拟私有云”。 图1 获取内网地址和VPC 登录DNS控制台。选择“内网 域名 ”。 在内网域名列表中筛选域名“nacos.cse.com”,单击关联2中获取VPC的域名名称。 图2 Nacos引擎域名 在“解析记录”页面,选择2中内网地址记录,获取域名对应的ip。 图3 获取Nacos引擎域名对应ip 登录CAE控制台。 在“组件配置”页面,配置环境变量。 图4 配置环境变量 变量名称根据实际代码填写。
  • 解决方案 方案一:关闭或者删除不用的索引,减少shard数量。 方案二:修改节点的shard数量的限制,参数配置请参考max_shards_per_node。 PUT _cluster/settings{ "persistent": { "cluster": { "max_shards_per_node": 2000 } }} 修改节点的shard数量的限制属于临时规避方案,如果要长期解决,建议每GB的JVM堆内存小于等于20个shards(节点堆内存大小为节点内存规格的1/2,最大值为31GB),shard的建议数量详细请参见shard count recommendation。
  • 操作步骤 若您使用的DNS服务商为华为云,您可通过如下步骤配置。 登录CAE控制台,选择“组件配置”。 在“组件配置”页面上方的下拉框中选择需要操作的组件。 在“访问方式”模块中如图1所示,获取公网地址和VPC访问地址。 图1 获取公网地址(“独享型”EIB需要先绑定EIP)和VPC访问地址 登录DNS控制台。 配置域名解析。 配置公网访问 选择“公网域名”,进入域名列表页面。 单击“创建公网域名”,输入自定义域名名称,下拉框选择“企业项目”,并单击“确定”。 在公网域名列表中,单击新创建的域名名称。 单击“快速添加解析”,在弹出界面中选择“网站解析”,“网站地址”选择“IP地址”。 图2 快速添加解析(公网IP) 将3获取的公网地址输入“值”一栏中。 配置vpc访问 选择“内网域名”,进入域名列表页面。 单击“创建内网域名”,输入自定义域名名称,选择组件所属环境相同的VPC,并单击“确定”。 图3 创建内网域名 在内网域名列表中,单击新创建的域名名称。 单击“添加记录集”,将3中获取的VPC访问地址输入“值”一栏中。 图4 内网域名与对应ip绑定 单击“确定”,完成添加。
  • 集群一直处于快照中 集群一直处于快照中,有三个比较常见的原因: 集群数据量大或者集群压力大,备份快照耗时长。 单个节点的快照速度默认是40MB/s,同时,快照的性能还受集群情况影响,如果此时集群负载较高,耗时将会更久。可以通过上述章节的查询单个快照信息查询正在执行的快照情况。 执行GET _snapshot/repo_auto/snapshot-name,可以看到剩余还需要完成的shard个数,也可以通过删除快照接口提前终止。 解决方法:等待或者提前终止。 快照信息更新失败。 Elasticsearch将进行中的快照信息保存在cluster state中,快照完成后需要更新快照状态,由于Elasticsearch更新快照状态的接口没有加入重试或者容错机制,比如由于当时集群内存压力大,更新快照动作被熔断,那么这个快照将会一直处于快照中。 解决方法:调用快照删除接口。 临时AK、SK过期。 CSS 通过委托将Elasticsearch中的数据写入到用户的OBS中,快照仓库创建的时候,需要去使用委托获取临时的AK 、SK设置到仓库中。由于临时的AK、SK是有时效性的(24小时过期),如果一个快照超过24小时还未完成,那么这个快照将会失败。这种情况会有一个比较大的风险,因为此时仓库的AK、SK过期,无法对这个仓库进行更新、查询、删除操作,这种情况下cluster state信息将会无法清除,只能通过普通重启(滚动重启无法生效)集群来清除cluster state里面残留的快照信息。 解决方法:暂时只能通过普通重启集群来消除,后期CSS会提供终止接口,可以来解决这种无法消除状态的现象。 父主题: 功能使用类
  • 排查是否有权限 登录 统一身份认证 服务管理控制台。 查看当前登录所用的账号或 IAM 用户所属的用户组。 具体操作请参见《统一身份认证服务用户指南》中的查看或修改用户信息章节。 查看用户组的权限中是否包含:“全局服务”中“ 对象存储服务 ”项目的“Tenant Administrator”权限、当前所属区域的“Elasticsearch Administrator”权限。 具体操作请参见《统一身份认证服务用户指南》中的查看或修改用户组章节。 如果用户组的权限中不包含以上两个权限,请执行4。 如果用户组的权限中包含以上两个权限,请联系人工客服协助解决。 为用户组添加:“全局服务”中“对象存储服务”项目的“Tenant Administrator”权限、当前所属区域的“Elasticsearch Administrator”权限。 具体操作请参见《统一身份认证服务用户指南》中的查看或修改用户组章节。
  • 问题现象 ECS服务器部署logstash,然后推送数据到 云搜索服务 CSS,出现错误信息如下: LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError: Got response code '500' contacting Elasticsearch at URL 'https://192.168.xx.xx:9200/_xpack'。
  • 为什么集群创建失败 集群创建失败原因有如下4种: 资源配额不足,无法创建集群。建议申请足够的资源配额,详情请参见如何申请扩大配额?。 如果集群配置信息中,“安全组”的“端口范围/ICMP类型”不包含“9200”端口,导致集群创建失败。请修改安全组信息或选择其他可用安全组。 7.6.2以及7.6.2之后的版本,集群内通信端口9300默认开放在用户VPC的子网上面。创建集群时需要确认所选安全组是否放通子网内的9300通信端口,如果未放通,请修改安全组信息或选择其他可用安全组。 权限不足导致集群创建失败。建议参考权限管理获取权限,然后创建集群。 父主题: 访问集群类
  • 处理步骤 在集群管理页面,单击不可用的集群名称,进入集群基本信息页面。 单击“配置信息”中的安全组名称,进入当前集群所选安全组的基本信息页面。 分别查看“入方向规则”和“出方向规则”页签下,是否存在“策略”为“允许”,“协议端口”为“TCP : 9300”,“类型”为“IPv4”的安全组规则。 是,联系技术支持定位集群不可用问题。 否,执行下一步。 修改集群当前所选安全组信息,放通9300通信端口。 在当前集群所选安全组基本信息界面,选择“入方向规则”页签。 单击“添加规则”,在添加入方向规则对话框设置“优先级”为“100”,“策略”选择“允许”,“协议端口”选择“基本协议/自定义TCP”,端口填写“9300”,“类型”选择“IPv4”,“源地址”选择“安全组”下的集群当前安全组名称,即同安全组内放通。 图2 添加安全组规则 单击“确定”即可完成放通9300端口的设置。 同样的步骤,在“出方向规则”页签添加放通9300端口的设置。 安全组放通9300端口后,等待集群自动恢复可用状态。
  • 问题现象 安装自定义插件后重启集群,“集群状态”变为“不可用”。 单击集群名称进入集群基本信息页面,选择“日志管理”,单击“日志查询”页签,可见日志内容存在明显的关于插件的报错“fatal error in thread [main], exitingjava.lang. NoClassDefFoundError: xxx/xxx/.../xxxPlugin at ...”。 图1 节点报错日志示例 CSS服务已下线自定义插件功能,但历史版本的集群可能还装有自定义插件,只有这类集群可能出现该故障。
  • 问题现象 “集群状态”为“不可用”。 单击集群名称进入集群基本信息页面,选择“日志管理”,单击“日志查询”页签,可见日志内容存在警告“master not discovered or elected yet, an election requires at least 2 nodes with ids [xxx, xxx, xxx, ...], have discovered [xxx...] which is not a quorum”。 图1 节点报错日志示例
  • 原因分析及处理方法 如果集群列表的任务状态显示“冻结”,可能是集群冻结状态导致集群不可用。 如果集群列表的任务状态显示“配置错误,重启失败”,可能是X-pack参数配置导致集群不可用。 如果集群节点的日志内容存在警告“master not discovered or elected yet, an election requires at least 2 nodes with ids [xxx, xxx, xxx, ...], have discovered [xxx...] which is not a quorum”,可能是安全组策略设置不合理导致集群不可用。 如果集群节点的日志内容存在明显的关于插件的报错“fatal error in thread [main], exitingjava.lang. NoClassDefFoundError: xxx/xxx/.../xxxPlugin at ...”,可能是插件不兼容导致集群不可用。 如果集群的健康状态为红色和且“unassigned shards”不为0,表示集群存在无法分配的索引分片,是分片未正常分配导致集群不可用。 如果集群进行备份恢复或集群迁移操作后,出现的不可用现象,可能是数据类型不兼容导致集群不可用。 如果集群节点的日志内容存在报错“OutOfMemoryError”和警告“[gc][xxxxx] overhead spent [x.xs] collecting in the last [x.xs]”,可能是集群负载过高导致集群不可用。
  • 处理步骤 如果集群长期处于高负载状态,则集群会存在写入、查询缓慢等情形,建议根据业务需要升级节点规格或者对集群节点的数量和存储容量进行扩容,使集群更好的满足业务需求。升级节点规格、扩容节点数量和节点存储容量的指导请参见扩容Elasticsearch集群。 查询集群是否存在任务堆积。 方式一:在Kibana的“Dev Tools”页面,分别执行以下命令查询是否存在任务堆积。 GET /_cat/thread_pool/write?v GET /_cat/thread_pool/search?v 如下所示“queue”的值为非0,表示存在任务堆积。 node_name name active queue rejectedcss-0323-ess-esn-2-1 write 2 200 7662css-0323-ess-esn-1-1 write 2 188 7660css-0323-ess-esn-5-1 write 2 200 7350css-0323-ess-esn-3-1 write 2 196 8000css-0323-ess-esn-4-1 write 2 189 7753 方式二:在集群管理列表,单击集群操作列的“监控信息”查看监控指标,在集群监控信息页面查看集群的“Search队列中总排队任务数”和“Write队列中总排队任务数”,如果排队任务数值非0表示存在任务堆积。 图2 Write队列中总排队任务数示例 如果集群存在大量的任务堆积,则参考如下步骤优化集群。 在集群的“日志管理”页面查看节点日志,查看节点在OOM前是否存在大量慢查询日志记录,分析查询是否会对节点造成压力导致节点内存不足,如果存在则根据业务实际情况优化查询语句。 在集群的“日志管理”页面查看节点日志,查看节点日志是否有“Inflight circuit break”或“segment can't keep up”的报错信息,如果存在则可能是写入压力过大,对集群造成较大的压力导致熔断。需要查看监控信息,排查近期数据写入量(写入速率)是否存在激增,如果存在则根据业务实际情况合理安排写入高峰时间窗。 如果集群不存在任务堆积或者集群优化完依旧不可用,则执行下一步,查看集群是否压力过大。 查看集群是否压力过大。 在集群管理列表,单击集群操作列的“监控信息”查看监控指标,在监控信息页面查看CPU和堆内存相关指标,如“平均CPU使用率”和“平均JVM堆使用率”。如“平均CPU使用率”超过80%或“平均JVM堆使用率”高于70%,则说明集群当前压力较大。 图3 “平均CPU使用率”示例 如果集群压力过大,请降低客户端的请求发送速率或扩容集群。 如果集群压力正常或降低发送请求速率后集群依旧不可用,则执行下一步,查看集群是否存在大量缓存。 在Kibana的“Dev Tools”页面,执行以下命令查询集群是否存在大量缓存。 GET /_cat/nodes?v&h=name,queryCacheMemory,fielddataMemory,requestCacheMemory 如果返回结果中queryCacheMemory、fielddataMemory或requestCacheMemory的数值超过堆内存的20%,则表示缓存过大,可执行命令POST _cache/clear清除缓存。这些缓存数据是在数据查询时生成的,目的是为了加快查询速度,当缓存清除则可能使查询时延增加。 name queryCacheMemory fielddataMemory requestCacheMemory css-0323-ess-esn-1-1 200mb 1.6gb 200mb 每个节点的最大堆内存可以执行如下命令查询: GET _cat/nodes?v&h=name,ip,heapMax 其中,name为节点名称,ip为节点的IP地址。 如果排查优化后,集群依旧负载过高,则联系技术支持。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全