华为云用户手册

  • 语音回呼 表1 语音回呼需准备的资源 资源项 对应接口参数 用途 获取方式 APP_Key X-AKSK X-AKSK鉴权所需参数。 登录管理控制台,从“应用管理”页面获取。 创建应用,请参考添加应用。 APP_Secret APP接入地址 - API调用的基地址。 访问URI - 语音回呼场景API的接口访问URI。 从语音回呼场景API获取。 主叫端显示的号码 displayNbr 主叫端接收到平台来电时的显示号码。可申请多个。该号码可以与displayCalleeNbr配置为同一个号码,也可以配置为不同号码。 从订购号码页面申请。 号码下发后在号码管理页面获取。 被叫端显示的号码 displayCalleeNbr 被叫端接收到平台来电时的显示号码。该号码可以与displayNbr配置为同一个号码,也可以配置为不同号码。 放音文件(可选) lastMinVoice 若设置了最大通话时长,平台会于最后一分钟时进行放音提示。 若需使用个性化放音,可提交该资源。 若不提交,使用默认放音“本次通话时长还剩1分钟”。 登录管理控制台,从“放音文件管理”页面获取。 上传放音文件,请参考添加放音文件。 具体制作方法参见制作放音文件。 waitVoice 主叫接听平台来电后的等待音。 若需使用个性化放音,可提交该资源。 若不提交,使用默认回铃音,例如:“嘟...嘟...”。 呼叫状态通知URL(可选) statusUrl 接收呼叫过程中状态信息(振铃、应答、挂机等)的服务器地址。若需订阅呼叫状态通知,可提交该资源。 提前准备可用的服务器地址,创建应用时填写,或调用接口时填写。 创建应用,请参考添加应用。 话单通知URL(可选) feeUrl 接收呼叫结束后产生话单的服务器地址。若需订阅话单通知,可提交该资源。 准备的数据与语音回呼场景API请求参数关联关系如下: 表2 语音回呼录音功能需准备的资源 资源项 对应接口参数 用途 获取方式 放音文件(可选) recordHintTone 平台会于录音前放音,提示通话用户。 若需使用个性化放音,可提交该资源。 若不提交,使用默认放音。 登录管理控制台,从“放音文件管理”页面获取。 上传放音文件,请参考添加放音文件。 具体制作方法参见制作放音文件。 获取录音文件 录音文件名 fileName 下载录音文件时使用。 通过“话单通知API”的recordObjectName参数获取。 录音文件存储的服务器 域名 recordDomain 通过“话单通知API”的recordDomain参数获取。 使用录音功能,需在添加应用时开通。 使用录音功能必须订阅话单通知。不订阅话单通知,则无法获取下载录音文件的关键参数。
  • 语音通知 表3 语音通知需准备的资源 资源项 对应接口参数 用途 获取方式 APP_Key X-AKSK X-AKSK鉴权所需参数。 登录管理控制台,从“应用管理”页面获取。 创建应用,请参考添加应用。 APP_Secret APP接入地址 - API调用的基地址。 访问URI - 语音通知API的接口访问URI。 从语音通知API获取。 被叫用户端显示的号码 displayNbr 用户接收到平台来电时的显示号码。可申请多个。 从订购号码页面申请。 号码下发后在号码管理页面获取。 放音文件 notifyVoice 音频文件,用户接听平台来电后的语音通知内容。 登录管理控制台,从“放音文件管理”页面获取。 上传放音文件,请参考添加放音文件。 具体制作方法参见制作放音文件。 语音通知模板ID(可选) templateId 仅接口版本为v2.0时需申请。 语音通知模板唯一标识。 语音通知模板为文本格式,平台将其转化为用户接听来电后的语音通知。可申请多个语音通知模板。 登录管理控制台,从“语音模板管理”页面获取。 添加语音通知模板,请参考添加语音模板。 呼叫状态通知URL(可选) statusUrl 接收呼叫过程中状态信息(振铃、应答、挂机等)的服务器地址。若需订阅呼叫状态通知,可提交该资源。 提前准备可用的服务器地址,创建应用时填写,或调用接口时填写。 创建应用,请参考添加应用。 话单通知URL(可选) feeUrl 接收呼叫结束后产生话单的服务器地址。若需订阅话单通知,可提交该资源。 准备的数据与语音通知API请求参数关联关系如下:
  • “获取录音文件下载地址API”代码样例 /*jshint esversion: 6 */ var https = require('https'); var util = require('./reqUtil.js'); var querystring = require('querystring'); /** * Get the download link of record file. * @param fileName record file name * @param recordDomain domain name of record file restore server * @returns */ function getRecordLinkAPI(fileName, recordDomain, xaksk) { if(fileName === undefined || fileName === null || recordDomain === undefined || recordDomain === null){ return; } if(xaksk === undefined || xaksk === null){ return; } var location; var method = 'GET'; var uri = '/rest/provision/voice/record/v1.0'; var queryParams = querystring.stringify({'fileName': fileName, 'recordDomain': recordDomain}); var options = util.createOptions(method, uri, queryParams, xaksk); var req = https.request(options, function (res) { if(301 === res.statusCode){ location = Object.getOwnPropertyDescriptor(res.headers, 'location').value; } var resHeaders = JSON.stringify(res.headers); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('resp:', chunk); //打印响应数据 }); }); req.on('error', function(e) { console.error('problem with request: ' + e); //打印错误信息 }); req.end(); //结束请求 return location; } module.exports = { getRecordLinkAPI };
  • “语音回呼场景API”代码样例 /*jshint esversion: 6 */ var https = require('https'); var data = require('./data.js'); var util = require('./reqUtil.js'); var record = require('./getRecordLink.js'); /** * voiceCallAPI * @param displayNbr * @param callerNbr * @param displayCalleeNbr * @param calleeNbr * @returns */ function voiceCallAPI(displayNbr, callerNbr, displayCalleeNbr, calleeNbr) { if(displayNbr === undefined || displayNbr === null || callerNbr === undefined || callerNbr === null) { return; } if(displayCalleeNbr === undefined || displayCalleeNbr === null || calleeNbr === undefined || calleeNbr === null) { return; } var method = 'POST'; var uri = '/rest/httpsessions/click2Call/v2.0'; var xaksk = util.buildAKSKHeader(data.data.click2call_appid, data.data.click2call_secret); var options = util.createOptions(method, uri, null, xaksk); var body = { /* 必填参数 */ 'displayNbr': displayNbr,//主叫用户手机终端的来电显示号码。 'callerNbr': callerNbr,//发起呼叫时所使用的主叫号码。 'displayCalleeNbr': displayCalleeNbr,//被叫用户终端的来电显示号码。 'calleeNbr': calleeNbr//发起呼叫时所拨打的被叫号码。 /* 选填参数 */ // 'bindNbr': '+86123456789', //CallEnabler业务号码,即绑定号码 // 'maxDuration': 0, //允许单次通话进行的最长时间 // 'lastMinVoice': 'lastmin_voice1.wav', //最后一分钟放音提示音 // 'lastMinToUE': 'both', //最后一分钟放音的播放对象 // 'playPreVoice': 'false', //设置主叫(callerNbr)应答语音回呼后,呼叫被叫(calleeNbr)前,是否向主叫(callerNbr)播放提示音 // 'preVoice': 'pre_voice1.wav', //设置主叫(callerNbr)应答语音回呼后,呼叫被叫(calleeNbr)前向主叫播放的提示音 // 'waitVoice': 'wait_voice1.wav', //设置主叫应答语音回呼后的等待音 // 'calleeMedia': 'all', //指定被叫的媒体音播放方式 // 'statusUrl': 'aHR0cDovLzIxOC40LjMzLjU1Ojg4ODgvdGVzdA==', //要获取通话状态需要在请求中加入statusUrl // 'feeUrl': 'aHR0cDovLzIxOC40LjMzLjU1Ojg4ODgvdGVzdA==', //要获取话单需要在请求中加入feeUrl // 'recordFlag': 'false', //与调测信息中的recordFlag保持一致 // 'recordHintTone': 'recordhint_voice1.wav', //设置使用录音功能的提示音 // 'partyTypeRequiredInDisconnect': 'false', //disconnect状态是否需要携带通话主动挂机的用户类型 // 'returnIdlePort': 'false', //指示是否需要返回平台空闲呼叫端口数量 // 'userData': 'customerId123' //设置用户的附属信息 }; var req = https.request(options, function (res) { var resHeaders = JSON.stringify(res.headers); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log(chunk); }); }); req.on('error', function(e) { console.error('problem with request: ' + e); }); console.log(JSON.stringify(body)); req.write(JSON.stringify(body)); req.end(); } voiceCallAPI('+8653159511234', '+8613500000001', '+8653159511234', '+8613500000002'); var xaksk = util.buildAKSKHeader(data.data.click2call_appid, data.data.click2call_secret); var location = record.getRecordLinkAPI('1200_366_0_20161228102743.wav', 'ostor.huawei.com', xaksk); console.log('The record file download link is: ' + location);
  • “呼叫状态通知API”代码样例 /** * 呼叫事件通知 * 客户平台收到RTC业务平台的呼叫事件通知的接口通知 */ //呼叫事件通知样例 var jsonBody = JSON.stringify({ 'eventType': 'callout', 'statusInfo': { 'sessionId': '1201_612_4294967295_20190124030424@callenabler245.huaweicaas.com', 'timestamp': '2019-01-24 03:04:24', 'caller': '+8613800000022', 'called': '+8613800000021' } }); console.log('jsonBody:', jsonBody); /** * 呼叫事件通知 * @brief 详细内容以接口文档为准 * @param jsonBody */ function onCallEvent(jsonBody) { var jsonObj = JSON.parse(jsonBody); //将通知消息解析为jsonObj var eventType = jsonObj.eventType; //通知事件类型 if ('fee' === eventType) { console.log('EventType error:', eventType); return; } if (!jsonObj.hasOwnProperty('statusInfo')) { console.log('param error: no statusInfo.'); return; } var statusInfo = jsonObj.statusInfo; //呼叫状态事件信息 console.log('eventType:', eventType); //打印通知事件类型 //callout:呼出事件 if ('callout' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //alerting:振铃事件 if ('alerting' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //answer:应答事件 if ('answer' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //collectInfo:放音收号结果事件,仅应用于语音通知场景 if ('collectInfo' === eventType) { /** * Example: 此处以解析digitInfo为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'sessionId': 通话链路的标识ID * 'digitInfo': 放音收号场景中,RTC业务平台对开发者进行放音收号操作的结果描述 */ if (statusInfo.hasOwnProperty('digitInfo')) { console.log('digitInfo:', statusInfo.digitInfo); } return; } //disconnect:挂机事件 if ('disconnect' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 * 'partyType': 挂机的用户类型,仅在语音回呼场景携带 * 'stateCode': 通话挂机的原因值 * 'stateDesc': 通话挂机的原因值的描述 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } } //呼叫事件处理 onCallEvent(jsonBody);
  • “呼叫状态通知API”代码样例 # -*- coding: utf-8 -*- ''' 呼叫事件通知 客户平台收到语音通话平台的呼叫事件通知的接口通知 ''' import json #呼叫事件通知样例 jsonBody = json.dumps({ 'eventType': 'callout', 'statusInfo': { 'sessionId': '1201_612_4294967295_20190124030424@callenabler245.huaweicaas.com', 'timestamp': '2019-01-24 03:04:24', 'caller': '+86138*******2', 'called': '+86138*******1', 'userData': 'customerId123' } }).encode('ascii') print(jsonBody) ''' 呼叫事件通知 @see: 详细内容以接口文档为准 @param param: jsonBody @return: ''' def onCallEvent(jsonBody): jsonObj = json.loads(jsonBody) #将通知消息解析为jsonObj eventType = jsonObj['eventType'] #通知事件类型 if ('fee' == eventType): print('EventType error: ' + eventType) return if ('statusInfo' not in jsonObj): print('param error: no statusInfo.') return statusInfo = jsonObj['statusInfo'] #呼叫状态事件信息 print('eventType: ' + eventType) #打印通知事件类型 #callout:呼出事件 if ('callout' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #alerting:振铃事件 if ('alerting' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #answer:应答事件 if ('answer' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #collectInfo:放音收号结果事件,仅应用于语音通知场景 if ('collectInfo' == eventType): ''' Example: 此处以解析digitInfo为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'sessionId': 通话链路的标识ID 'digitInfo': 放音收号场景中,语音通话平台对开发者进行放音收号操作的结果描述 ''' if ('digitInfo' in statusInfo): print('digitInfo: ' + statusInfo['digitInfo']) return #disconnect:挂机事件 if ('disconnect' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 'partyType': 挂机的用户类型,仅在语音回呼场景携带 'stateCode': 通话挂机的原因值 'stateDesc': 通话挂机的原因值的描述 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return if __name__ == '__main__': onCallEvent(jsonBody) #呼叫事件处理
  • “呼叫状态通知API”代码样例 /** * 呼叫事件通知 * 客户平台收到RTC业务平台的呼叫事件通知的接口通知 */ //呼叫事件通知样例 var jsonBody = JSON.stringify({ 'eventType': 'callout', 'statusInfo': { 'sessionId': '1201_612_4294967295_20190124030424@callenabler245.huaweicaas.com', 'timestamp': '2019-01-24 03:04:24', 'caller': '+8613800000022', 'called': '+8613800000021' } }); console.log('jsonBody:', jsonBody); /** * 呼叫事件通知 * @brief 详细内容以接口文档为准 * @param jsonBody */ function onCallEvent(jsonBody) { var jsonObj = JSON.parse(jsonBody); //将通知消息解析为jsonObj var eventType = jsonObj.eventType; //通知事件类型 if ('fee' === eventType) { console.log('EventType error:', eventType); return; } if (!jsonObj.hasOwnProperty('statusInfo')) { console.log('param error: no statusInfo.'); return; } var statusInfo = jsonObj.statusInfo; //呼叫状态事件信息 console.log('eventType:', eventType); //打印通知事件类型 //callout:呼出事件 if ('callout' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //alerting:振铃事件 if ('alerting' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //answer:应答事件 if ('answer' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //collectInfo:放音收号结果事件,仅应用于语音通知场景 if ('collectInfo' === eventType) { /** * Example: 此处以解析digitInfo为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'sessionId': 通话链路的标识ID * 'digitInfo': 放音收号场景中,RTC业务平台对开发者进行放音收号操作的结果描述 */ if (statusInfo.hasOwnProperty('digitInfo')) { console.log('digitInfo:', statusInfo.digitInfo); } return; } //disconnect:挂机事件 if ('disconnect' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 * 'partyType': 挂机的用户类型,仅在语音回呼场景携带 * 'stateCode': 通话挂机的原因值 * 'stateDesc': 通话挂机的原因值的描述 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } } //呼叫事件处理 onCallEvent(jsonBody);
  • “语音验证码场景API”代码样例 /*jshint esversion: 6 */ var https = require('https'); var data = require('./data.js'); var util = require('./reqUtil.js'); /** * voiceVerificationCodeAPI * @param displayNbr * @param calleeNbr * @param languageType * @param preTone * @param verifyCode * @returns */ function voiceVerificationCodeAPI(displayNbr, calleeNbr, languageType, preTone, verifyCode) { if(displayNbr === undefined || displayNbr === null || calleeNbr === undefined || calleeNbr === null) { return; } if(languageType === undefined || languageType === null || preTone === undefined || preTone === null) { return; } if(languageType === verifyCode || languageType === verifyCode) { return; } var method = 'POST'; var uri = '/rest/httpsessions/callVerify/v1.0'; var xaksk = util.buildAKSKHeader(data.data.callverify_appid, data.data.callverify_secret); var options = util.createOptions(method, uri, null, xaksk); var body = { /* 必填参数 */ 'displayNbr': displayNbr,//主叫用户手机终端的来电显示号码。 'calleeNbr': calleeNbr,//被叫用户终端的来电显示号码。 'languageType': languageType,//验证码播放的语言类型。 'preTone': preTone,//播放语音验证码之前需要播放的放音文件名 'verifyCode': verifyCode//验证码:只支持0~9的数字,最大8位。 /* 选填参数 */ // 'bindNbr': '+86123456789', //CallEnabler业务号码,即绑定号码 // 'posTone': 'postone.wav', //播放语音验证码之后需要播放的放音文件名 // 'times': 3, //播放次数:0~9 // 'statusUrl': 'aHR0cDovLzIxOC40LjMzLjU1Ojg4ODgvdGVzdA==', //要获取通话状态需要在请求中加入statusUrl // 'feeUrl': 'aHR0cDovLzIxOC40LjMzLjU1Ojg4ODgvdGVzdA==', //要获取话单需要在请求中加入feeUrl // 'returnIdlePort': 'false', //指示是否需要返回平台空闲呼叫端口数量 // 'userData': 'customerId123' //设置用户的附属信息 }; var req = https.request(options, function (res) { var resHeaders = JSON.stringify(res.headers); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log(chunk); }); }); req.on('error', function(e) { console.error('problem with request: ' + e); }); console.log(JSON.stringify(body)); req.write(JSON.stringify(body)); req.end(); } voiceVerificationCodeAPI('+8653159511234', '+8613500000001', 2, 'test.wav', '1234');
  • 前提条件 注册华为云并实名认证。 如果您已有一个华为账户,请跳到下一个任务。如果您还没有华为账户,请参考以下步骤创建。 打开华为云官网,单击“注册”。 根据提示信息完成注册,详细操作请参见如何注册华为云管理控制台的用户?。 注册成功后,系统会自动跳转至您的个人信息界面。 参考实名认证完成个人或企业账号实名认证。 为账户充值。 使用ServiceStage服务的云应用模型功能,会产生额外费用,您需要确保账户有足够金额。 关于ServiceStage服务的价格,请参见应用管理与运维平台价格详情。 关于充值,请参见如何给华为账户充值。 为用户添加操作权限。 如果您是以主账号登录华为云,请跳到下一个任务。 如果您是以 IAM 用户登录华为云,需要联系管理员(主账号或admin用户组中的用户)对IAM用户授予ServiceStage FullAccess权限和RF FullAccess权限。授权方法请参见给IAM用户授权。 CAM作为ServiceStage服务的扩展功能,需要授予ServiceStage服务权限。 CAM内部基于RF(Resource Formation)提供的能力部署实例, RF是一个用于编排系统资源及服务资源的IaC(Infrastructure as Code)系统。
  • 云应用模型(Cloud Application Model)是一个面向终态的应用交付自动化服务,包含应用模型与执行引擎两部分。 开发者通过应用模型描述应用交付三个阶段的内容: 资源编排 、应用发布、应用运维;执行引擎解析模板、编排并执行任务,实现应用交付自动化。 本示例通过使用CAM内置系统模板“简易应用模板(E CS )”,自动创建ECS实例,并绑定EIP,快速完成Ngnix搭建,供您体验CAM部署功能。 目前仅“华南-广州”区域支持该功能。
  • 操作步骤 通过名称过滤,快速找到待添加连接的企业路由器。 您可以通过以下两种操作入口,进入企业路由器的“连接”页签。 在企业路由器右上角区域,单击“管理连接”。 单击企业路由器名称,并选择“连接”页签。 在连接列表中,单击目标连接对应的“连接资源”超链接。 进入VPC“基本信息”页面。 在“网络互通概览”区域,单击子网对应的数字。 进入“子网”页面。 单击子网对应的路由表名称。 进入路由表详情页面。 在“基本信息”页签下,单击“添加路由”。 弹出“添加路由”对话框。 根据界面提示,配置VPC到企业路由器的路由信息,如表1所示。 表1 配置VPC到企业路由器的路由信息-参数说明 参数名称 参数说明 取值样例 目的地址类型 目的地址类型支持“IP地址”,您可以设置单个IP地址或者IP网段。 IP地址 目的地址 目的地址需要确保该VPC的流量可以访问到其他接入企业路由器的VPC,请您根据组网的实际规划进行配置,支持修改。 为了方便配置以及后续的网络扩展,建议您目的地址配置成VPC网段或者子网的地址。 不建议在VPC路由表中将ER的路由配置为默认路由网段0.0.0.0/0,如果VPC内的ECS绑定了EIP,会在ECS内增加默认网段的策略路由,并且优先级高于ER路由,此时会导致流量转发至EIP,无法抵达ER。 10.0.0.0/8 下一跳类型 选择“企业路由器”,支持修改。 企业路由器 下一跳 根据名称选择目标企业路由器,支持修改。 er-test-01 描述 该条路由的描述信息,支持修改。 - 路由信息设置完成后,单击“确定”。 返回路由列表页面,可以看到添加的路由。 重复执行3~8,为其他VPC配置ER的路由信息。
  • 操作步骤 进入企业路由器列表页面。 通过名称过滤,快速找到待添加连接的企业路由器。 您可以通过以下两种操作入口,进入企业路由器的“连接”页签。 在企业路由器右上角区域,单击“管理连接”。 单击企业路由器名称,并选择“连接”页签。 在“连接”页签下,单击“添加连接”。 弹出“添加连接”对话框。 根据界面提示,配置连接的基本信息,如表1所示。 表1 添加连接-参数说明 参数名称 参数说明 取值样例 名称 “虚拟私有云(VPC)”连接的名称,支持修改。 er-attach-01 连接类型 选择“虚拟私有云(VPC)”,不支持修改。 虚拟私有云(VPC) 连接资源 连接类型选择完成后,在下拉列表中选择待接入企业路由器的虚拟私有云,不支持修改。 虚拟私有云选择完成后,在下拉列表中选择待接入企业路由器的子网,不支持修改。 虚拟私有云:vpc-demo-01 子网:subnet-demo-01 配置连接侧路由 如果您在创建连接时开启“配置连接侧路由”选项,则不用手动在VPC路由表中配置静态路由,系统会在VPC的所有路由表中自动添加指向ER的路由,目的地址固定为10.0.0.0/8,172.16.0.0/12,192.168.0.0/16。 如果VPC路由表中的路由与这三个固定网段冲突,则会添加失败。此时建议您不要开启“配置连接侧路由”选项,并在连接创建完成后,手动添加路由。 不建议在VPC路由表中将ER的路由配置为默认路由网段0.0.0.0/0,如果VPC内的ECS绑定了EIP,会在ECS内增加默认网段的策略路由,并且优先级高于ER路由,此时会导致流量转发至EIP,无法抵达ER。 开启 描述 该连接的描述信息,支持修改。 - 标签 为连接绑定标签,用来标识资源,支持修改。 “标签键”:test “标签值”:01 基本信息设置完成后,单击“立即创建”。 返回连接列表页面。 在连接列表页面,查看连接状态。 待状态由“创建中”变为“正常”,表示连接创建成功。 重复执行3~7,在企业路由器中添加其他“虚拟私有云(VPC)”连接。 由于本示例创建ER时,开启“默认路由表关联”和“默认路由表传播”,因此添加完“虚拟私有云(VPC)”连接后,系统会自动在ER路由表做如下配置: 将“虚拟私有云(VPC)”连接关联至ER路由表。 在ER路由表中为“虚拟私有云(VPC)”连接创建传播,自动学习VPC网段。
  • 如何选择组网方案? 方案一是将业务VPC直接接入企业路由器,方案二是使用中转VPC,结合VPC对等连接和企业路由器共同构建组网。相比方案一,方案二可以降低成本,并且免去一些限制,详细说明如下: 相比方案一,使用方案二可以降低流量费用和连接费用,详细说明如下: 业务VPC之间的流量通过VPC对等连接转发,而不再需要经过ER转发,省去部分流量费用。 您只需要将一个中转VPC接入ER,相比接入多个业务VPC,省去部分连接费用。 当前将业务VPC直接接入ER,针对业务VPC有部分使用限制。由于方案二中您只需要将中转VPC接入ER,则可以解决以下针对业务VPC的限制: 当业务VPC下存在共享型弹性负载均衡、 VPC终端节点 私网NAT网关 、分布式缓存服务时,请提交工单联系华为云客服,确认服务的兼容性,并优先考虑使用中转VPC组网方案。 若您在弹性负载均衡、VPC终端节点以及分布式缓存服务场景下,直接将业务VPC接入ER,则当ER处于容灾切换、弹性扩缩容、升级等业务可靠性保障过程中,可能造成长连接会话闪断,请您确保业务客户端具有重连机制,在闪断情况下可以自动重连。 当接入ER的VPC存在以下情况时,则不建议您在VPC路由表中将下一跳为ER的路由配置成默认路由0.0.0.0/0,那样会导致部分业务流量无法转发至ER。 VPC内的ECS绑定了EIP。 VPC被ELB(独享型或者共享型)、NAT网关、VPCEP、DCS服务占用。 当接入ER的VPC关联NAT网关,并配置SNAT或者DNAT规则的“使用场景”选择“云专线/云连接”,则网络不通。
  • 操作流程 本文档介绍如何通过企业路由器构建同区域VPC互通组网,流程如图2所示。 图2 构建同区域VPC互通组网流程图 表1 构建同区域VPC互通组网流程说明 步骤 说明 准备工作 使用云服务前,您需要 注册华为账号 并开通华为云、完成实名认证、为账户充值。 步骤一:规划组网和资源 规划组网和资源,包括资源数量及网段信息等。 步骤二:创建企业路由器 创建1个企业路由器,构建一个同区域组网只需要1个企业路由器。 步骤三:(可选) 创建VPC和ECS资源 创建4个 虚拟私有云VPC 和4个弹性 云服务器ECS 。此处资源数量和规格均为示例,您可以根据实际情况调整。 如果您已有资源,不用执行本章节操作。 步骤四:在企业路由器中添加VPC连接 将4个VPC分别接入企业路由器中。 步骤五:(可选)在VPC路由表中配置路由 在VPC路由表中配置到企业路由器的路由信息。 如果您在创建连接时开启“配置连接侧路由”选项,则不用手动在VPC路由表中配置静态路由,系统会在VPC的所有路由表中自动添加指向ER的路由,目的地址固定为10.0.0.0/8,172.16.0.0/12,192.168.0.0/16。 如果VPC路由表中的路由与这三个固定网段冲突,则会添加失败。此时建议您不要开启“配置连接侧路由”选项,并在连接创建完成后,手动添加路由。 步骤六:验证网络互通情况 登录ECS,执行ping命令,验证网络互通情况。
  • 方案架构 XX企业在华为云区域A内部署了4个虚拟私有云VPC,这4个VPC之间需要互相访问。 在区域A内创建一个企业路由器ER,将VPC接入ER内,ER可以在4个VPC之间路由流量,实现网络互通。 图1 同区域VPC互通组网 本文档指导用户通过企业路由器快速构建同区域组网,实现同区域VPC互通。 您可以使用企业路由器的共享功能,将不同账号下的虚拟私有云添加至同一个企业路由器中构建组网。 企业路由器可以和云专线、云连接、NAT网关组合使用构建不同组网,具体请参见企业路由器最佳实践。
  • 如何使用 在客户端安装节点,把以上程序打包成AddDoublesUDF.jar,并上传到HDFS指定目录下(例如“/user/hive_examples_jars”)。 创建函数的用户与使用函数的用户都需要具有该文件的可读权限。 示例语句: hdfs dfs -put ./hive_examples_jars /user/hive_examples_jars hdfs dfs -chmod 777 /user/hive_examples_jars 判断集群的认证模式。 安全模式,需要使用一个具有Hive管理权限的用户登录beeline客户端,执行如下命令: kinit Hive业务用户 beeline set role admin; 普通模式,执行如下命令: beeline -n Hive业务用户 在Hive Server中定义该函数,以下语句用于创建永久函数: CREATE FUNCTION addDoubles AS 'com.xxx.bigdata.hive.example.udf.AddDoublesUDF' using jar 'hdfs://hacluster/user/hive_examples_jars/AddDoublesUDF.jar'; 其中addDoubles是该函数的别名,用于SELECT查询中使用;xxx通常为程序开发的组织名称。 以下语句用于创建临时函数: CREATE TEMPORARY FUNCTION addDoubles AS 'com.xxx.bigdata.hive.example.udf.AddDoublesUDF' using jar 'hdfs://hacluster/user/hive_examples_jars/AddDoublesUDF.jar'; addDoubles是该函数的别名,用于SELECT查询中使用。 关键字TEMPORARY说明该函数只在当前这个Hive Server的会话过程中定义使用。 在Hive Server中使用该函数,执行SQL语句: SELECT addDoubles(1,2,3); 如果重新连接客户端再使用函数出现[Error 10011]的错误,可执行reload function;命令后再使用该函数。 在Hive Server中删除该函数,执行SQL语句: DROP FUNCTION addDoubles;
  • 如何使用 在客户端安装节点,把以上程序打包成AddDoublesUDF.jar,并上传到HDFS指定目录下(例如“/user/hive_examples_jars”)。 创建函数的用户与使用函数的用户都需要具有该文件的可读权限。 示例语句: hdfs dfs -put ./hive_examples_jars /user/hive_examples_jars hdfs dfs -chmod 777 /user/hive_examples_jars 判断集群的认证模式。 安全模式,需要使用一个具有Hive管理权限的用户登录beeline客户端,执行如下命令: kinit Hive业务用户 beeline set role admin; 普通模式,执行如下命令: beeline -n Hive业务用户 在Hive Server中定义该函数,以下语句用于创建永久函数: CREATE FUNCTION addDoubles AS 'com.xxx.bigdata.hive.example.udf.AddDoublesUDF' using jar 'hdfs://hacluster/user/hive_examples_jars/AddDoublesUDF.jar'; 其中addDoubles是该函数的别名,用于SELECT查询中使用;xxx通常为程序开发的组织名称。 以下语句用于创建临时函数: CREATE TEMPORARY FUNCTION addDoubles AS 'com.xxx.bigdata.hive.example.udf.AddDoublesUDF' using jar 'hdfs://hacluster/user/hive_examples_jars/AddDoublesUDF.jar'; addDoubles是该函数的别名,用于SELECT查询中使用。 关键字TEMPORARY说明该函数只在当前这个Hive Server的会话过程中定义使用。 在Hive Server中使用该函数,执行SQL语句: SELECT addDoubles(1,2,3); 若重新连接客户端再使用函数出现[Error 10011]的错误,可执行reload function;命令后再使用该函数。 在Hive Server中删除该函数,执行SQL语句: DROP FUNCTION addDoubles;
  • 分布式消息服务Kafka版计费模式概述 分布式消息服务Kafka版提供包年/包月和按需计费两种计费模式,以满足不同场景下的用户需求。如您需要快速了解分布式消息服务Kafka版的具体计费模式对应的具体价格,请参见分布式消息服务Kafka版价格详情。 包年/包月:一种预付费模式,即先付费再使用,按照订单的购买周期进行结算。购买周期越长,享受的折扣越大。一般适用于业务需求量长期稳定的成熟业务。 按需计费:一种后付费模式,即先使用再付费,按照Kafka实例实际使用时长计费,秒级计费,按小时结算。按需计费模式允许您根据实际业务需求灵活地调整资源使用,无需提前预置资源,从而降低预置过多或不足的风险。一般适用于电商抢购等业务需求量瞬间大幅波动的场景。 表1列出了两种计费模式的区别。 表1 计费模式 计费模式 包年/包月 按需计费 付费方式 预付费 按照订单的购买周期结算。 后付费 按照Kafka实例实际使用时长计费。 计费周期 按订单的购买周期计费。 秒级计费,按小时结算。 适用计费项 实例费用、存储空间费用 实例费用、存储空间费用 变更计费模式 支持变更为按需计费模式。 但包年/包月资费模式到期后,按需的资费模式才会生效。 支持变更为包年/包月计费模式。 变更规格 支持变更实例规格。 支持变更实例规格。 回收站中实例是否计费 开启回收站策略的包年/包月实例,退订后会存入回收站中,此时不收取实例费用,但是会按需收取存储空间费用。 从回收站中恢复的包年/包月实例,计费模式会变为按需计费。 开启回收站策略的按需实例,删除后会存入回收站中,此时不收取实例费用,按需收取存储空间费用。 适用场景 适用于可预估资源使用周期的场景,价格比按需计费模式更优惠。对于长期使用者,推荐该方式。 适用于资源需求波动的场景,可以随时开通,随时删除。 父主题: 计费模式
  • CTS 支持的DMS for Kafka操作 表1 云审计 服务支持的DMS for Kafka操作列表 操作名称 资源类型 事件名称 创建DMS实例订单成功 kafka createDMSInstanceOrderSuccess 创建DMS实例任务执行成功 kafka createDMSInstanceTaskSuccess 创建DMS实例订单失败 kafka createDMSInstanceOrderFailure 创建DMS实例任务执行失败 kafka createDMSInstanceTaskFailure 删除创建失败的DMS实例成功 kafka deleteDMSCreateFailureInstancesSuccess 删除创建失败的DMS实例失败 kafka deleteDMSCreateFailureInstancesFailure 删除DMS实例任务执行成功 kafka deleteDMSInstanceTaskSuccess 删除DMS实例任务执行失败 kafka deleteDMSInstanceTaskFailure 批量删除DMS实例任务 kafka batchDeleteDMSInstanceTask 提交批量删除DMS实例请求成功 kafka batchDeleteDMSInstanceSuccess 批量删除DMS实例任务执行成功 kafka batchDeleteDMSInstanceTaskSuccess 提交批量删除DMS实例请求失败 kafka batchDeleteDMSInstanceFailure 批量删除DMS实例任务执行失败 kafka batchDeleteDMSInstanceTaskFailure 提交修改DMS实例订单请求成功 kafka modifyDMSInstanceOrderSuccess 提交修改DMS实例订单请求失败 kafka modifyDMSInstanceOrderFailure 提交扩容实例请求成功 kafka extendDMSInstanceSuccess 扩容DMS实例任务执行成功 kafka extendDMSInstanceTaskSuccess 提交扩容实例请求失败 kafka extendDMSInstanceFailure 扩容DMS实例任务执行失败 kafka extendDMSInstanceTaskFailure 提交重置DMS实例密码请求成功 kafka resetDMSInstancePasswordSuccess 提交重置DMS实例密码请求失败 kafka resetDMSInstancePasswordFailure 提交重启DMS实例请求成功 kafka restartDMSInstanceSuccess 重启DMS实例任务执行成功 kafka restartDMSInstanceTaskSuccess 提交重启DMS实例请求失败 kafka restartDMSInstanceFailure 重启DMS实例任务执行失败 kafka restartDMSInstanceTaskFailure 提交批量重启DMS实例请求成功 instance batchRestartDMSInstanceSuccess 批量重启DMS实例任务执行成功 kafka batchRestartDMSInstanceTaskSuccess 提交批量重启DMS实例请求失败 instance batchRestartDMSInstanceFailure 批量重启DMS实例任务执行失败 kafka batchRestartDMSInstanceTaskFailure 提交修改DMS实例信息请求成功 kafka modifyDMSInstanceInfoSuccess 修改DMS实例信息任务执行成功 kafka modifyDMSInstanceInfoTaskSuccess 提交修改DMS实例信息请求失败 kafka modifyDMSInstanceInfoFailure 修改DMS实例信息任务执行失败 kafka modifyDMSInstanceInfoTaskFailure 删除后台任务成功 kafka deleteDMSBackendJobSuccess 删除后台任务失败 kafka deleteDMSBackendJobFailure 开启Smart Connect任务执行成功 kafka createConnectorTaskSuccess 创建Smart Connect任务执行成功 kafka createConnectorSinkTaskSuccess 开启Smart Connect任务执行失败 kafka createConnectorTaskFailure 创建Smart Connect任务执行失败 kafka createConnectorSinkTaskFailure 冻结DMS实例任务执行成功 kafka freezeDMSInstanceTaskSuccess 冻结DMS实例任务执行失败 kafka freezeDMSInstanceTaskFailure 解冻DMS实例任务执行成功 kafka unfreezeDMSInstanceTaskSuccess 解冻DMS实例任务执行失败 kafka unfreezeDMSInstanceTaskFailure Kafka实例创建Topic成功 kafka Kafka_create_topicSuccess Kafka实例创建Topic失败 kafka Kafka_create_topicFailure Kafka实例删除Topic成功 kafka Kafka_delete_topicsSuccess Kafka实例删除Topic失败 kafka Kafka_delete_topicsFailure 开启自动创建Topic成功 kafka enable_auto_topicSuccess 开启自动创建Topic失败 kafka enable_auto_topicFailure 修改Topic成功 kafka Kafka_alter_topicsSuccess 修改Topic失败 kafka Kafka_alter_topicsFailure 执行Topic分区平衡任务成功 kafka kafka_reassignmentTaskSuccess 执行Topic分区平衡任务失败 kafka kafka_reassignmentTaskFailure 提交执行Topic分区平衡请求成功 kafka kafka_reassignmentSuccess 提交执行Topic分区平衡请求失败 kafka kafka_reassignmentFailure 重置消费组偏移量成功 kafka Kafka_reset_consumer_offsetSuccess 重置消费组偏移量失败 kafka Kafka_reset_consumer_offsetFailure 批量删除消费组成功 kafka Kafka_batch_delete_groupSuccess 批量删除消费组失败 kafka Kafka_batch_delete_groupFailure 创建用户成功 kafka createUserSuccess 创建用户失败 kafka createUserFailure 删除用户成功 kafka deleteUserSuccess 删除用户失败 kafka deleteUserFailure 更新用户策略成功 kafka updateUserPoliciesTaskSuccess 更新用户策略失败 kafka updateUserPoliciesTaskFailure 回收站恢复实例成功 kafka out_recycleTaskSuccess 回收站恢复实例失败 kafka out_recycleTaskFailure
  • 实例功能区别 单机版实例与集群实例的功能主要区别如表2所示。 表2 功能区别 功能名称 单机版实例 集群实例 变更实例规格 × √ 修改实例的接入方式 只支持开启/关闭公网访问明文接入 支持修改如下接入方式: 开启内网访问密文接入 开启/关闭内网访问明文接入 开启/关闭公网访问明文接入 开启/关闭公网访问密文接入 重置Kafka密码 × √ 查看磁盘使用量 × √ 分区平衡 × √ 设置Topic权限 × √ 用户管理 × √ 查看重平衡日志 × √ Smart Connect × √ 流控管理 × √ 修改配置参数 × √
  • 产品优势 分布式消息服务Kafka版完全兼容开源社区版本,旨在为用户提供便捷高效的消息队列。业务无需改动即可快速迁移上云,为您节省维护和使用成本。 一键式部署,免去集群搭建烦恼 您只需要在实例管理界面选好规格配置,提交订单。后台将自动创建部署完成一整套Kafka实例。 兼容开源,业务零改动迁移上云 兼容社区版Kafka的API,具备原生Kafka的所有消息处理特性。 业务系统基于开源的Kafka进行开发,只需加入少量认证安全配置,即可使用分布式消息服务Kafka版,做到无缝迁移。 Kafka实例兼容开源社区Kafka 1.1.0、2.7、3.x版本。在客户端使用上,推荐使用和服务端版本一致的版本。 安全保证 独有的安全加固体系,提供业务操作云端审计,消息传输加密等有效安全措施。 在网络通信方面,除了提供SASL(Simple Authentication and Security Layer)认证,还借助虚拟私有云(VPC)和安全组等加强网络访问控制。 数据高可靠 Kafka实例支持消息持久化,多副本存储机制。副本间消息同步、异步复制,数据同步或异步落盘多种方式供您自由选择。 集群架构与跨AZ部署,服务高可用 Kafka后台为多集群部署,支持故障自动迁移和容错,保证业务的可靠运行。 Kafka实例支持跨AZ部署,代理部署在不同的AZ,进一步保障服务高可用。不同AZ之间基于Kafka ISR(in-sync replica)进行数据同步,Topic需要选择数据多副本并且将不同副本分布到不同的ISR上,在ISR正常同步状态下,故障RPO(Recovery Point Objective)趋近于0。 无忧运维 华为云提供一整套完整的监控告警等运维服务,故障自动发现和告警,避免7*24小时人工值守。Kafka实例自动上报相关监控指标,如分区数、主题数、堆积消息数等,并支持配置监控数据发送规则,您可以在第一时间通过短信、邮件等获得业务消息队列的运行使用和负载状态。 海量消息堆积与弹性扩容 内建的分布式集群技术,使得服务具有高度扩展性。分区数可配置多达200个,存储空间、代理数量和代理规格支持弹性扩展,保证在高并发、高性能和大规模场景下的访问能力,轻松实现百亿级消息的堆积和访问能力。 多规格灵活选择 Kafka实例的带宽与存储资源可灵活配置,并且自定义Topic的分区数、副本数。
  • 与其他云服务的关系 云审计(Cloud Trace Service) 云审计为您提供云服务资源的操作记录,记录内容包括您从管理控制台或者开放API发起的云服务资源操作请求以及每次请求的结果,供您查询、审计和回溯使用。 当前CTS记录的操作,请参考云审计日志。 虚拟私有云(Virtual Private Cloud) Kafka实例运行于虚拟私有云,需要使用虚拟私有云创建的IP和带宽。通过虚拟私有 云安全 组的功能可以增强访问Kafka实例的安全性。 弹性云服务器(Elastic Cloud Server) 弹性云服务器是由CPU、内存、操作系统、云硬盘组成的基础的计算组件。Kafka实例运行在弹性云服务器上,一个代理对应一台弹性云服务器。 云硬盘(Elastic Volume Service) 云硬盘为云服务器提供块存储服务,Kafka的所有数据(如消息、元数据和日志等)都保存在云硬盘中。 统一身份认证 (Identity and Access Management) 统一身份认证提供了权限管理功能,可以帮助您安全地控制云服务和资源的访问权限。您可以为不同的用户设置不同的访问Kafka实例的权限,以达到不同用户之前的权限隔离。 云监控 (Cloud Eye) 云监控是一个开放性的监控平台,提供资源的实时监控、告警、通知等服务。 Kafka实例向CloudEye上报监控数据的更新周期为1分钟。 弹性公网IP(Elastic IP) 弹性公网IP提供独立的公网IP资源,包括公网IP地址与公网出口带宽服务。Kafka实例绑定弹性公网IP后,可以通过公网访问Kafka实例。 标签管理服务(Tag Management Service) 标签管理服务是一种快速便捷将标签集中管理的可视化服务,提供跨区域、跨服务的集中标签管理和资源分类功能。 为Kafka实例添加标签,可以方便用户识别和管理拥有的实例资源。 VPC终端节点(VPC Endpoint) 客户端和Kafka实例在同一区域的不同VPC中,利用VPC终端节点在不同VPC间建立跨VPC的连接通道,实现客户端通过内网访问Kafka实例。 NAT网关(NAT Gateway) 使用NAT网关的DNAT通过端口映射方式,将弹性IP地址映射到Kafka实例指定端口,实现Kafka实例和客户端通过公网通信。
  • 问题定位步骤 在管理控制台使用VNC方式登录云服务器。 打开“运行”窗口,输入“perfmon -res”。 图1 打开资源监视器 在“资源监视器”中,单击“CPU”或“网络”,查看CPU占用率或带宽使用情况。 图2 资源监视器 查看CPU和带宽占用率较高的进程ID和进程名。 在控制台VNC登录页面单击“Ctrl+Alt+Del”,打开“Windows任务管理器”。 或打开“运行”窗口,输入“taskmgr”,打开“Windows任务管理器”。 以下步骤为您介绍在任务管理器中打开PID,找到进程的具体位置,核对是否异常进程。 选择“详细信息”选项卡。 单击PID进行排序。 在查找到的CPU或带宽占用率高的进程上右键单击“打开文件位置”。 定位进程是否是正常或是否为恶意程序。 图3 检查进程 打开“运行”窗口,输入“fltmc”,查看系统的文件系统过滤驱动。 下图以windows10操作系统为例,不同操作系统内置驱动不同,请以官网网站说明为准。如果安装了第三方的驱动,也会在这个列表中显示。 图4 查看系统驱动 以下步骤为您介绍如何查看驱动的来源,核对是否为不明来源驱动。 打开系统路径“C:\Windows\System32\drivers”。 在不明驱动名称上单击,选择“属性”,查看详细信息。 选择“数字签名”,查看驱动的来源。 图5 查看驱动来源
  • 分析处理 在您采取措施处理问题前,首先需要判断影响CPU或带宽占用率高的进程和驱动是否正常,并分类进行处理。 正常进程分析处理建议 如果您的操作系统是Windows 2008/Windows 2012,请检查内存大小,建议内存配置在2GB或以上。 检查后台是否有执行Windows Update的行为。 检查杀毒软件是否正在后台执行扫描操作。 核对云服务器运行的应用程序中是否有对网络和CPU要求高的需求,如果是,建议您变更云服务器的配置或修改带宽。 如果 云服务器配置 已经比较高,建议考虑云服务器上应用场景的分离部署,例如将数据库和应用分开部署。 异常进程分析处理建议 如果CPU或带宽利用率高是由于病毒、木马入侵导致的,那么需要手动结束进程。建议的处理顺序如下: 使用商业版杀毒软件或安装微软安全工具Microsoft Safety Scanner,在安全模式下扫描病毒。 安装Windows最新补丁。 使用MSconfig禁用所有非微软自带服务驱动,检查问题是否再次发生,具体请参考微软官方文档《如何在Windows中执行干净启动》。 若服务器或站点遭受DDOS攻击或CC攻击等,短期内产生大量的访问需求。 您可以登录管理控制台执行以下操作: 查看Anti-DDOS攻击是否开启,并检查防护策略是否配置合适;如未配置,请参考:配置开启Anti-DDoS防护。 查看CC防护策略是否开启,并检查防护策略是否配置合适;如未配置,请参考:配置CC防护策略。 不明来源驱动分析处理建议 有些病毒和木马会通过文件系统过滤驱动加载。如果您发现不明来源的驱动,建议您卸载该驱动,也可以使用正规商业杀毒软件或第三方安全管理工具进行删除。 如果发现有无法删除的不明驱动,或者删除后还会再次出现的不明驱动,一般都是病毒或木马的驱动。如果使用正规商业杀毒软件或第三方安全管理工具也不能彻底删除,建议您重装操作系统,在这之前请做好数据备份避免造成损失。
  • 步骤二:绑定服务器资源 完成存储库的购买后,您需要绑定存储库的资源。 所选的服务器需要未绑定存储库,且服务器状态必须为“运行中”或“关机”。 在云服务器备份页面,找到目标存储库,单击“绑定服务器”。 在资源列表中勾选需要备份的资源,勾选后将在已选列表区域展示。 当绑定的服务器进行新增磁盘后,系统会自动识别新增磁盘,备份时也会将新增磁盘一同备份。 考虑到恢复后数据的一致性问题,建议您对整个服务器进行备份。 如果您希望选择部分磁盘备份以节省成本,请尽量确保这些磁盘的数据不受其他未备份磁盘的数据影响,否则可能会导致数据不一致问题。 例如,Oracle应用的数据分散在不同磁盘上,如果只备份了部分磁盘,会导致恢复后数据不一致(已备份磁盘恢复到历史时间点数据,未备份磁盘仍保留当前数据),甚至导致应用无法启动。 单击“确定”。在“绑定的服务器”一列可以看到绑定的服务器,查看到资源已成功绑定。 如果需要开启自动绑定功能,可参见绑定存储库的资源章节。
  • 相关信息 执行备份成功后,后续可以使用云服务器备份恢复服务器数据,详见使用云服务器备份恢复数据。 可以为新的存储库进行创建复制、扩容等操作,请参考存储库管理章节。 若后续需要定期自动备份存储库时,可以创建策略并绑定策略至存储库,详见管理策略章节。 如果您需要备份含有数据库的服务器,需要将目标存储库的规格由服务器备份变更为数据库备份。详见更改云服务器备份存储库规格和数据库服务器备份。 可以使用云服务器备份创建镜像,详见使用备份创建镜像。
  • 步骤二:绑定 云桌面 资源 所选的服务器需要未绑定存储库,且服务器状态必须为“运行中”或“关机”。 前提条件 所选云桌面未绑定存储库,且状态必须为“可用”或“正在使用”。 操作步骤 在云桌面备份页面,找到目标存储库,单击“绑定云桌面”。 在资源列表中勾选需要备份的资源,勾选后将在已选列表区域展示。 单击“确定”。在“绑定的云桌面”一列可以看到绑定的云桌面,查看到资源已成功绑定。 如果需要开启自动绑定功能,可参见绑定存储库的资源章节。
  • 相关信息 执行备份成功后,后续可以使用云服务器备份恢复服务器数据,详见使用云服务器备份恢复数据。 可以为新的存储库进行创建复制、扩容等操作,请参考存储库管理章节。 若后续需要定期自动备份存储库时,可以创建策略并绑定策略至存储库,详见管理策略章节。 如果您需要备份含有数据库的服务器,需要将目标存储库的规格由服务器备份变更为数据库备份。详见更改云服务器备份存储库规格和数据库服务器备份。 可以使用云服务器备份创建镜像,详见使用备份创建镜像。
  • 步骤二:绑定服务器资源 完成存储库的购买后,您需要绑定存储库的资源。 所选的服务器需要未绑定存储库,且服务器状态必须为“运行中”或“关机”。 在云服务器备份页面,找到目标存储库,单击“绑定服务器”。 在资源列表中勾选需要备份的资源,勾选后将在已选列表区域展示。 当绑定的服务器进行新增磁盘后,系统会自动识别新增磁盘,备份时也会将新增磁盘一同备份。 考虑到恢复后数据的一致性问题,建议您对整个服务器进行备份。 如果您希望选择部分磁盘备份以节省成本,请尽量确保这些磁盘的数据不受其他未备份磁盘的数据影响,否则可能会导致数据不一致问题。 例如,Oracle应用的数据分散在不同磁盘上,如果只备份了部分磁盘,会导致恢复后数据不一致(已备份磁盘恢复到历史时间点数据,未备份磁盘仍保留当前数据),甚至导致应用无法启动。 单击“确定”。在“绑定的服务器”一列可以看到绑定的服务器,查看到资源已成功绑定。 如果需要开启自动绑定功能,可参见绑定存储库的资源章节。
  • 步骤二:绑定SFS Turbo文件系统资源 所选的服务器需要未绑定存储库,且服务器状态必须为“运行中”或“关机”。 如果您已在购买存储库时绑定文件系统,可以跳过此步骤。 前提条件 所选文件系统未绑定存储库,且状态必须为“可用”。 操作步骤 在SFS Turbo备份页面,找到目标存储库,单击“绑定SFS Turbo”。 在资源列表中勾选需要备份的资源,勾选后将在已选列表区域展示。 单击“确定”。在“绑定的文件系统”一列可以看到绑定的文件系统,查看到资源已成功绑定。 如果需要开启自动绑定功能,可参见绑定存储库的资源章节。
共100000条