-
体验形式:本次体验采用有奖征集体验评测报告+群内交流的反馈的形式。我们将在体验官群内(点击链接申请成为体验官 )筛选体验官若干位,然后签订协议邮寄实物开发板并按照体验报告(筛选后展示)的要求操作和体验产品,最后输出体验报告。我们会从中筛选出高质量体验报告,给予礼品奖励和积分奖励。体验产品简介:ModelBox 端云协同AI开发套件(RK3568),降低门槛的AI开发板。拥有0.8TOPS算力,支持丰富的硬件接口扩展;具备强大的软件生态,利于进行开发研究。拥有它,你可以快速了解系统的硬件和软件,学习AI应用端侧硬件开发流程,实现云侧AI应用端侧部署;你还可以将部署的AI应用同步到云平台售卖,实现AI应用的商业变现。活动流程:1.如您已经成为产品体验官,小助手会在群内发布招募公告,直接报名即可。2.如您还未申请成为体验官,请点击链接先申请成为体验官,再参与活动哦~申请链接:https://developer.huaweicloud.com/activity/experience-officer.html 3.填写本次活动体验者筛选问卷,等待小助手入选拉群。问卷链接:https://devcloud.huaweicloud.com/expertmobile/qtn?id=93421f85b0704d70b4adb69c18ad5513 4.签订协议收到开发板进行体验5.输出产品体验报告,等待领奖☆奖励设置如下☆参与奖:15名获奖要求:完成体验和体验报告,并完成一篇案例奖励:华为体脂称 优秀奖:10名获奖要求:完成体验和体验报告,并完成一篇优质案例(专家评选)优秀案例:ModelBox开发案例 - 使用YOLO v3做口罩检测奖品:开发板硬件
-
本文分享自华为云社区《[CN与业务并发度的关系-业务并发度不够?CN来帮忙](https://bbs.huaweicloud.com/blogs/342917?utm_source=csdn&utm_medium=bbs-ex&utm_campaign=ei&utm_content=content)》,作者:闻鲜生 。 # 一、CN的作用是什么? CN全称协调节点(Coordinator Node)。是和用户关系最密切也是DWS内部非常重要的一个组件,它负责提供外部应用接口、优化全局执行计划、向Datanode分发执行计划,以及汇总、处理执行结果。 集群中,CN有多个并且CN的角色是对等的(执行DML语句时连接到任何一个CN都可以得到一致的结果)。只需要在CN和应用程序之间增加一个负载均衡器,使得CN对应用是透明的。DWS通过CCN(Control Coordinator Node)负责集群内的资源全局负载控制,以实现自适应的动态负载管理。CM在第一次集群启动时,通过集群部署形式,选择编号最小的CN作为CCN。若CCN故障之后,由CM选择新的CCN进行替换。 ## 一次简单的查询流程如下所示: 1. 用户通过应用程序发出查询本地数据的SQL请求到Coordinator。 2. Coordinator接收用户的SQL请求,分配服务进程,向GTM请求分配全局事务信息。 3. GTM接收到Coordinator的请求,返回全局事务信息给Coordinator。 4. Coordinator根据数据分布信息以及系统元信息,解析SQL为查询计划树,从查询计划树中提取可以发送到Datanode的执行步骤,封装成SQL语句或者子执行计划树,发送到Datanode执行。 5. Datanode接收到读取任务后,查询具体Storage上的本地数据块。 6. Datanode任务执行后,将执行结果返回给Coordinator。 7. Coordinator将查询结果通过应用程序返回给用户。  # 二、CN与业务并发度的关系 CN是外部应用的接口,CN的并发能力直接决定了业务的并发度。单CN的并发能力受如下几个参数控制: max_connections: 允许和数据库连接的最大并发连接数。此参数会影响集群的并发能力。CN节点默认值为800,DN节点默认值为5000。 max_active_statements:设置全局的最大并发数量。此参数只应用到CN,且针对一个CN上的执行作业。默认值60。 CN的max_connections和max_active_statements参数支持用户根据业务并发度诉求修改,详细操作流程如下图: 点击集群详情的“参数修改”页面,搜索需要修改的参数,会显示对应参数和当前值,参数值框里面输入修改值,点击“保存”按钮保存配置。“是否重启集群”栏显示“是”的参数说明需要重启集群生效,请寻找业务空闲期修改。  # 三、CN不够怎么办? 单CN的并发能力会受到硬件资源和拓扑结构的限制,不能无限制调大。DWS是分布式架构集群,此时就要考虑横向扩展,增加更多的CN来提升业务并发度,充分利用分布式架构的优势。 ## o 下发集群时配置更多的CN CN数量在下发DWS集群时可以配置。默认值3个,最少2个,最多不超过“节点数量”,如果节点数量大于20,则CN数量最多可配置20个。如下图所示,在“创建数据仓库集群”的购买页面的“高级配置”选择“自定义”,“CN部署量”即为CN的初始部署数量。  ## o 下发集群后在线添加CN 集群下发后,如果由于业务并发度高导致CN不够用,可以在线添加CN,具体操作如下图所示。增加CN耗时与用户表数量有关,大概10分钟左右,增加CN过程中间有一段时间会锁集群,阻塞DDL语句执行。   # 四、如何做到多个CN负载均衡? 如果集群部署了多个CN,但是怎么做到CN的负载均衡,保证业务并发度和性能最大化呢?DWS提供了弹性负载均衡(Elastic Load Balance,简称ELB)服务。弹性负载均衡可以通过流量分发扩展应用系统对外的服务能力,同时通过消除单点故障提升应用系统的可用性。 - **ELB的配置原理介绍**  - **ELB的绑定方法**  # 五、CN故障了怎么办? 由于DWS的CN角色是对等的,同时对外提供服务,因此必须保证其元数据的强一致性,因此外部应用连接任一个CN执行涉及元数据变更的操作(如DDL,DCL)必须分发到所有的CN同时完成。 如果单个CN故障,会影响所有CN的DDL和DCL操作。目前DWS提供了两个解决方案: **自动剔除CN** 如果集群绑定了弹性负载均衡(ELB),则会自动打开自动剔除CN功能,DWS CM周期性检测CN的状态,如果发现CN连续故障600s,则会立即从整个集群剔除该故障CN,保证其余CN的业务不受到影响。再配合弹性负载均衡服务,会自动把发送到故障CN的作业转发到其他正常CN。 **删除cn介绍** 如果发现集群部分CN故障,或存在亚健康状态,可以选择手动删除故障CN,具体操作流程如下。手动删除CN耗时固定,1分钟左右。   总结:希望通过此文,让你能够对CN作用,CN运维操作,业务并发度有进一步的了解!
-
>**摘要:Ingress可以基于七层的HTTP和HTTPS协议转发,可以通过域名和路径做到更细粒度的划分,本文以华为云CCE ingress 的两种实现方式进行实操,简述两种方式的优缺点。** ------------ # 目录: > 1 华为云CCE ingress实现方式 >> 1.1 ELB ingress 工作原理 >> 1.2 Nginx ingress 工作原理 >> 1.3 ingress 访问类型 >> 1.4 验证方式 > 2 Nginx ingress 方式创建ingress >> 2.1 新建无状态工作负载 Tomcat1 >> 2.2 新建无状态工作负载 Tomcat2 >> 2.3 创建ingress(IP访问) >> 2.4 创建ingress(域名访问),设置转发规则实现不同 URL 访问不同服务 > 3 ELB ingress 方式创建ingress >> 3.1 创建无状态工作负载 Tomcat3 >> 3.2 新建无状态工作负载 Tomcat4 >> 3.3 创建ingress(IP访问) >> 3.4 创建ingress(域名访问),设置转发规则实现不同 URL 访问不同服务 > 4 ELB ingress 与 Nginx ingress 的优缺点 >> 4.1 Nginx ingress优缺点 >> 4.2 ELB ingress优缺点 ## 1 华为云CCE ingress实现方式 CCE支持两种Ingress Controller类型,ELB Ingress Controller由华为云自研,基于弹性负载均衡服务(ELB)实现流量转发;Nginx Ingress Controller使用Kubernetes社区维护的模板与镜像,通过Nginx组件完成流量转发。 ### 1.1 ELB ingress 工作原理  ### 1.2 Nginx ingress 工作原理  ### 1.3 ingress 访问类型  ### 1.4 验证方式 **当前文章采用 ingress 的两种方式进行实操验证:** Nginx ingress + 负载均衡路由 + 节点访问(NodePort) →见第2章节 ELB ingress + ENI负载均衡路由 + 集群内访问(ClusterIP) →见第3章节 ## 2 Nginx ingress 方式创建ingress ### 2.1 新建无状态工作负载 Tomcat1 - 无状态工作负载-step1-工作负载基本信息  - 无状态工作负载-step2-容器设置:开源镜像中心-tomcat  - 无状态工作负载-step3-工作负载访问设置:节点访问  - 无状态工作负载-step3-高级设置:高级设置保持默认,点击创建  - 进入容器,设置访问界面,内容为:It is a test!  ### 2.2 新建无状态工作负载 Tomcat2 - 按照同样的步骤新建的tomcat负载  - 进入容器,设置访问界面,内容为:Test for ingress!  ### 2.3 创建ingress(IP访问) - 创建前提:安装nginx-ingress插件 安装步骤参考:https://support.huaweicloud.com/usermanual-cce/cce_01_0034.html - 进入华为云CCE控制台,进入资源管理下的网络管理界面,点击ingress  - 添加ingress,开启“对接nginx”选项,设置转发规则如下  - 创建成功后,查看ingress  - 访问服务,进行验证  ### 2.4 创建ingress(域名访问),设置转发规则实现不同 URL 访问不同服务 **说明:2.3章节的验证为IP直接访问,当前章节以域名访问进行验证** - DNS新建两个域名并解析到 1.1.1.1  **DNS配置参考:** https://support.huaweicloud.com/qs-dns/dns_qs_0002.html - 新建ingress,增加转发规则,转发规则的域名设置为上一步新建的两个域名  - 查看ingress  **注:由上图可知,增加后的ingress使用的是同一个ELB的IP进行服务访问** - 修改DNS的解析到ingress的访问IP  - 访问服务,进行验证 通过域名 ingress1.xxxxxxx 只能访问到 **Test for ingress!**  通过域名 ingress2.xxxxxxx 只能访问到 **It is a test!**  ## 3 ELB ingress 方式创建ingress ### 3.1 创建无状态工作负载 Tomcat3 - 无状态工作负载-step1-工作负载基本信息,选择绑定弹性网卡  - 无状态工作负载-step2-容器设置:开源镜像中心-tomcat  - 无状态工作负载-step3-工作负载访问设置:集群内访问 ( ClusterIP )  - 无状态工作负载-step3-高级设置:高级设置保持默认,点击创建  - 进入容器,设置访问界面,内容为:It is a test ENI!  ### 3.2 新建无状态工作负载 Tomcat4 - 按照同样的步骤新建的tomcat负载  - 进入容器,设置访问界面,内容为:Test for ingress ENI!  ### 3.3 创建ingress(IP访问) - 进入华为云CCE控制台,进入资源管理下的网络管理界面,点击ingress  - 添加ingress,选择ENI负载均衡路由,设置转发规则如下  - 创建成功后,查看ingress  - 访问服务,进行验证  ### 3.4 创建ingress(域名访问),设置转发规则实现不同 URL 访问不同服务 **说明:3.3章节的验证为IP直接访问,当前章节以域名访问进行验证** - DNS新建两个域名并解析到 1.1.1.1  **DNS配置参考:** https://support.huaweicloud.com/qs-dns/dns_qs_0002.html - 新建ingress,增加转发规则,转发规则的域名设置为上一步新建的两个域名  - 查看ingress  **注:由以上步骤可知,增加ingress时可以选择新建ELB,使不同的ELB的转发不同的服务** - 修改DNS的解析到ingress的访问IP  - 访问服务,进行验证 通过域名 ingress3.xxxxxxx 只能访问到 **It is a test ENI!**  通过域名 ingress4.xxxxxxx 只能访问到 **Test for ingress ENI!**  **说明:当前仅为演示操作,实际项目中可以根据服务的需要创建多个ingress实现服务转发。(一个ingress对应一个独享型 ELB)** ## 4 ELB ingress 与 Nginx ingress 的优缺点 ### 4.1 Nginx ingress优缺点 - 优点: 1、可自定义配置参数,详情参考:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/ 2、转发规则配置service同时支持集群内访问(ClusterIP)和节点访问(NodePort) 3、可以设置路由重定向 - 缺点 1、需要安装nginx-ingress 插件,占用node资源 2、需要自行升级,维护 2、性能依赖于pod资源配置 3、多个ingress使用同一个ELB(即nginx-ingress暴露服务的ELB),性能受ELB限制 ### 4.2 ELB ingress优缺点 - 优点: 1、不需要进行插件安装,华为云直接提供,免维护,免升级 2、多个ingress可以使用多个ELB,高性能 3、ingress controller部署在master节点,不占用集群node资源 - 缺点 1、转发规则配置service 仅支持集群内访问(ClusterIP)或节点访问(NodePort) 2、不支持路由重定向
-
在老CN执行查询正常,执行DDL语句卡住。在新老CN上查对方连接,老CN没有建连到新CN,新CN有与老CN的连接。检查新增CN节点防火墙配置,新CN防火墙少追加-A INPUT -p tcp -m tcp --dport 8000 -j ACCEPT内容,配置后执行systemctl restart iptables.service重启防火墙。在老CN上执行DDL成功。
-
问题现象:向elb监听器中增加后台云服务器组时报错ip address xxx is not valid IP for the specified subnet 问题版本:HCS 8.0.2, HCS 8.0.3 问题分析:1.排查子网ID无误,内网ip也正常2.子网和内网ip不(cn ip)在一个网段3.了解到该集群需要和之前的集群做网段隔离,专门申请一个24的网段,配置了对应的vpc4.登录cdk 查看ctype,btype 并没有修改 //查看参数请参考 https://bbs.huaweicloud.com/forum/thread-169569-1-1.html5.参数vpc.peering.enable 也还是 false //查看参数请参考 https://bbs.huaweicloud.com/forum/thread-169569-1-1.html 问题根因:网段隔离并实施方案有问题,确定使用修改 vpc.peering.enable 为false的方案,使用挂网卡,cn的ip从vpc对应的子网获取,这样的配置elb的时候则不会出现不再范围内的情况 问题修复:1.删除集群2.修改vpc.peering.enable为false,重启pod使集群生效3.重发集群4.继续做ELB配置成功
-
各位亲爱的华为云er:即日起填写ELB产品调研问卷,反馈您的使用体验及建议,即有机会获得2000码豆,可以兑换海量奖品,赶快行动起来吧!参与方式【步骤一】注册账号(如果已有华为云账号可跳过) 1.1 进入ELB产品主页,点击“注册”按钮 https://www.huaweicloud.com/product/elb.html1.2 输入手机号,完成账号注册【步骤二】实名认证(如果已完成认证则可跳过)2.1 进入账号中心,点击实名认证选择对应认证类型与认证方式,完成实名认证【步骤三】进入产品页面,试用与体验产品https://www.huaweicloud.com/product/elb.html【步骤四】试用完成,反馈体验评价进入体验反馈入口完成评分与评价,点击提交,完成体验反馈
-
DWS 8.0/8.1 , 目前使用的 ELB 加权最小连接方式来进行负载均衡 。 如下是官方文档。 负载均衡采用的算法。加权轮询算法:根据后端服务器的权重,按顺序依次将请求分发给不同的服务器。它用相应的权重表示服务器的处理性能,按照权重的高低以及轮询方式将请求分配给各服务器,相同权重的服务器处理相同数目的连接数。加权最少连接:最少连接是通过当前活跃的连接数来估计服务器负载情况的一种动态调度算法。加权最少连接就是在最少连接数的基础上,根据服务器的不同处理能力,给每个服务器分配不同的权重,使其能够接受相应权值数的服务请求。源IP算法:将请求的源IP地址进行一致性Hash运算,得到一个具体的数值,同时对后端服务器进行编号,按照运算结果将请求分发到对应编号的服务器上。这可以使得对不同源IP的访问进行负载分发,同时使得同一个客户端IP的请求始终被派发至某特定的服务器。 问题: 1. 通过当前活跃的连接数来估计服务器负载情况的一种动态调度算法 ---- 当前活跃连接是指DWS的 active ,idle in transaction 状态的连接 ? idle连接不算 ? ELB 是通过连接是否有网络信号判断是否活跃的 ? 2. 加权最少连接就是在最少连接数的基础上,根据服务器的不同处理能力,给每个服务器分配不同的权重 ----- ELB 是如何知道服务器的处理能力 ? 是需要手工单独配置 ?
-
log.info("开始上传文件");ObsClient obsClient = new ObsClient(ak, sk, endPoint);obsClient.putObject(defaultBucketName, pre + dirName + "/" + f.getName(), f);log.info("上传结束");2021-08-06 11:31:02.130 INFO 13816 --- [nPool-worker-27] c.oppein.gltf.controller.GltfController : 上传结束2021-08-06 11:31:02.130 INFO 13816 --- [nPool-worker-27] c.oppein.gltf.controller.GltfController : 开始上传文件2021-08-06 11:31:02.130 INFO 13816 --- [nPool-worker-27] com.obs.services.AbstractClient : Storage|1|HTTP+XML|ObsClient||||2021-08-06 11:31:02|2021-08-06 11:31:02|||0|2021-08-06 11:31:02.130 WARN 13816 --- [nPool-worker-27] com.obs.services.AbstractClient : [OBS SDK Version=3.21.4];[Endpoint=https://obs.cn-south-1.myhwclouds.com:443/];[Access Mode=Virtul Hosting]2021-08-06 11:31:02.162 INFO 13816 --- [nPool-worker-27] c.o.s.internal.RestStorageService : OkHttp cost 32 ms to apply http request2021-08-06 11:31:02.162 INFO 13816 --- [nPool-worker-27] c.o.s.internal.RestStorageService : Storage|1|HTTP+XML|performRequest||||2021-08-06 11:31:02|2021-08-06 11:31:02||[responseCode: 200][request-id: ]|0|2021-08-06 11:31:02.177 INFO 13816 --- [nPool-worker-27] c.o.s.internal.RestStorageService : write data end, cost 0 ms2021-08-06 11:31:02.177 INFO 13816 --- [nPool-worker-27] c.o.s.internal.RestStorageService : OkHttp cost 15 ms to apply http request2021-08-06 11:31:02.177 INFO 13816 --- [nPool-worker-27] c.o.s.internal.RestStorageService : Storage|1|HTTP+XML|performRequest||||2021-08-06 11:31:02|2021-08-06 11:31:02||[responseCode: 200][request-id: 0000017B1983A1B7941995133A0E9EC9]|0|2021-08-06 11:31:02.177 INFO 13816 --- [nPool-worker-27] com.obs.services.AbstractClient : Storage|1|HTTP+XML|putObject||||2021-08-06 11:31:02|2021-08-06 11:31:02|||0|2021-08-06 11:31:02.177 INFO 13816 --- [nPool-worker-27] com.obs.services.AbstractClient : ObsClient [putObject] cost 47 ms2021-08-06 11:31:02.177 INFO 13816 --- [nPool-worker-27] com.obs.log.AccessLogger : 2021-08-06 11:31:02 130|com.obs.services.AbstractClient|init|78|Storage|1|HTTP+XML|ObsClient||||2021-08-06 11:31:02|2021-08-06 11:31:02|||0|2021-08-06 11:31:02 130|com.obs.services.AbstractClient|init|97|[OBS SDK Version=3.21.4];[Endpoint=https://obs.cn-south-1.myhwclouds.com:443/];[Access Mode=Virtul Hosting]2021-08-06 11:31:02 162|com.obs.services.internal.RestStorageService|executeRequest|553|OkHttp cost 32 ms to apply http request2021-08-06 11:31:02 162|com.obs.services.internal.RestStorageService|performRequest|378|Storage|1|HTTP+XML|performRequest||||2021-08-06 11:31:02|2021-08-06 11:31:02||[responseCode: 200][request-id: ]|0|2021-08-06 11:31:02 177|com.obs.services.internal.RepeatableRequestEntity|writeTo|108|write data end, cost 0 ms2021-08-06 11:31:02 177|com.obs.services.internal.RestStorageService|executeRequest|553|OkHttp cost 15 ms to apply http request2021-08-06 11:31:02 177|com.obs.services.internal.RestStorageService|performRequest|378|Storage|1|HTTP+XML|performRequest||||2021-08-06 11:31:02|2021-08-06 11:31:02||[responseCode: 200][request-id: 0000017B1983A1B7941995133A0E9EC9]|0|2021-08-06 11:31:02 177|com.obs.services.AbstractClient|doActionWithResult|392|Storage|1|HTTP+XML|putObject||||2021-08-06 11:31:02|2021-08-06 11:31:02|||0|2021-08-06 11:31:02 177|com.obs.services.AbstractClient|doActionWithResult|393|ObsClient [putObject] cost 47 ms2021-08-06 11:31:02.193 INFO 13816 --- [nPool-worker-27] c.oppein.gltf.controller.GltfController : 上传结束2021-08-06 11:31:02.193 INFO 13816 --- [nPool-worker-27] c.oppein.gltf.controller.GltfController : 开始上传文件2021-08-06 11:31:02.193 INFO 13816 --- [nPool-worker-27] com.obs.services.AbstractClient : Storage|1|HTTP+XML|ObsClient||||2021-08-06 11:31:02|2021-08-06 11:31:02|||0|2021-08-06 11:31:02.193 WARN 13816 --- [nPool-worker-27] com.obs.services.AbstractClient : [OBS SDK Version=3.21.4];[Endpoint=https://obs.cn-south-1.myhwclouds.com:443/];[Access Mode=Virtul Hosting]2021-08-06 11:31:02.193 WARN 13816 --- [nPool-worker-27] c.o.s.internal.RestStorageService : Encountered 1 Internal Server error(s), will retry in 100ms2021-08-06 11:31:02.209 ERROR 13816 --- [o-8089-Acceptor] org.apache.tomcat.util.net.Acceptor : Socket accept failedjava.io.IOException: 一个封锁操作被对 WSACancelBlockingCall 的调用中断。 at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) ~[na:1.8.0_151] at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422) ~[na:1.8.0_151] at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250) ~[na:1.8.0_151] at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:466) ~[tomcat-embed-core-9.0.33.jar:9.0.33] at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:72) ~[tomcat-embed-core-9.0.33.jar:9.0.33] at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:95) ~[tomcat-embed-core-9.0.33.jar:9.0.33] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]2021-08-06 11:31:02.209 INFO 13816 --- [ioEventLoop-4-1] io.lettuce.core.protocol.CommandHandler : null Unexpected exception during request: java.io.IOException: 应用程序没有调用 WSAStartup,或者 WSAStartup 失败。java.io.IOException: 应用程序没有调用 WSAStartup,或者 WSAStartup 失败。 at sun.nio.ch.SocketDispatcher.read0(Native Method) ~[na:1.8.0_151] at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43) ~[na:1.8.0_151] at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) ~[na:1.8.0_151] at sun.nio.ch.IOUtil.read(IOUtil.java:192) ~[na:1.8.0_151] at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380) ~[na:1.8.0_151] at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:253) ~[netty-buffer-4.1.48.Final.jar:4.1.48.Final] at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1133) ~[netty-buffer-4.1.48.Final.jar:4.1.48.Final] at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350) ~[netty-transport-4.1.48.Final.jar:4.1.48.Final] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148) ~[netty-transport-4.1.48.Final.jar:4.1.48.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) [netty-transport-4.1.48.Final.jar:4.1.48.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) [netty-transport-4.1.48.Final.jar:4.1.48.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) [netty-transport-4.1.48.Final.jar:4.1.48.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) [netty-transport-4.1.48.Final.jar:4.1.48.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [netty-common-4.1.48.Final.jar:4.1.48.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.48.Final.jar:4.1.48.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.48.Final.jar:4.1.48.Final] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]2021-08-06 11:31:02.209 WARN 13816 --- [ioEventLoop-4-1] io.netty.channel.nio.NioEventLoop : Failed to create a new Selector.io.netty.channel.ChannelException: failed to open a new selector at io.netty.channel.nio.NioEventLoop.openSelector(NioEventLoop.java:175) [netty-transport-4.1.48.Final.jar:4.1.48.Final] at io.netty.channel.nio.NioEventLoop.rebuildSelector0(NioEventLoop.java:381) [netty-transport-4.1.48.Final.jar:4.1.48.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:470) [netty-transport-4.1.48.Final.jar:4.1.48.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [netty-common-4.1.48.Final.jar:4.1.48.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.48.Final.jar:4.1.48.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.48.Final.jar:4.1.48.Final] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]Caused by: java.io.IOException: Unable to establish loopback connection at sun.nio.ch.PipeImpl$Initializer.run(PipeImpl.java:94) ~[na:1.8.0_151] at sun.nio.ch.PipeImpl$Initializer.run(PipeImpl.java:61) ~[na:1.8.0_151] at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_151] at sun.nio.ch.PipeImpl.<init>(PipeImpl.java:171) ~[na:1.8.0_151] at sun.nio.ch.SelectorProviderImpl.openPipe(SelectorProviderImpl.java:50) ~[na:1.8.0_151] at java.nio.channels.Pipe.open(Pipe.java:155) ~[na:1.8.0_151] at sun.nio.ch.WindowsSelectorImpl.<init>(WindowsSelectorImpl.java:127) ~[na:1.8.0_151] at sun.nio.ch.WindowsSelectorProvider.openSelector(WindowsSelectorProvider.java:44) ~[na:1.8.0_151] at io.netty.channel.nio.NioEventLoop.openSelector(NioEventLoop.java:173) [netty-transport-4.1.48.Final.jar:4.1.48.Final] ... 6 common frames omittedCaused by: java.net.SocketException: Successful WSAStartup not yet performed: socket at sun.nio.ch.Net.socket0(Native Method) ~[na:1.8.0_151] at sun.nio.ch.Net.serverSocket(Net.java:415) ~[na:1.8.0_151] at sun.nio.ch.ServerSocketChannelImpl.<init>(ServerSocketChannelImpl.java:88) ~[na:1.8.0_151] at sun.nio.ch.SelectorProviderImpl.openServerSocketChannel(SelectorProviderImpl.java:56) ~[na:1.8.0_151] at java.nio.channels.ServerSocketChannel.open(ServerSocketChannel.java:108) ~[na:1.8.0_151] at sun.nio.ch.PipeImpl$Initializer$LoopbackConnector.run(PipeImpl.java:120) ~[na:1.8.0_151] at sun.nio.ch.PipeImpl$Initializer.run(PipeImpl.java:76) ~[na:1.8.0_151] ... 14 common frames omitted2021-08-06 11:31:02.209 WARN 13816 --- [ioEventLoop-4-1] io.netty.channel.nio.NioEventLoop : Unexpected exception in the selector loop.java.io.IOException: 应用程序没有调用 WSAStartup,或者 WSAStartup 失败。 at sun.nio.ch.SocketDispatcher.close0(Native Method) ~[na:1.8.0_151] at sun.nio.ch.SocketDispatcher.close(SocketDispatcher.java:63) ~[na:1.8.0_151] at sun.nio.ch.SocketChannelImpl.kill(SocketChannelImpl.java:879) ~[na:1.8.0_151] at sun.nio.ch.WindowsSelectorImpl.implDereg(WindowsSelectorImpl.java:588) ~[na:1.8.0_151] at sun.nio.ch.SelectorImpl.processDeregisterQueue(SelectorImpl.java:149) ~[na:1.8.0_151] at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:142) ~[na:1.8.0_151] at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) ~[na:1.8.0_151] at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) ~[na:1.8.0_151] at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101) ~[na:1.8.0_151] at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68) ~[netty-transport-4.1.48.Final.jar:4.1.48.Final] at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:803) ~[netty-transport-4.1.48.Final.jar:4.1.48.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:457) ~[netty-transport-4.1.48.Final.jar:4.1.48.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [netty-common-4.1.48.Final.jar:4.1.48.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.48.Final.jar:4.1.48.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.48.Final.jar:4.1.48.Final] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]2021-08-06 11:31:02.273 ERROR 13816 --- [o-8089-Acceptor] org.apache.tomcat.util.net.Acceptor : Socket accept failedjava.io.IOException: 应用程序没有调用 WSAStartup,或者 WSAStartup 失败。 at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) ~[na:1.8.0_151] at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422) ~[na:1.8.0_151] at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250) ~[na:1.8.0_151] at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:466) ~[tomcat-embed-core-9.0.33.jar:9.0.33] at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:72) ~[tomcat-embed-core-9.0.33.jar:9.0.33] at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:95) ~[tomcat-embed-core-9.0.33.jar:9.0.33] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]
-
我们知道GaussDB(DWS)为了保证业务的连续性和高可靠性,各个组件都进行了高可用设计。下图是应用访问GaussDB(DWS)的业务流程架构图,对于业务应用或者用户来说,他们发生请求给CN,CN解析并生成执行计划,交给DN去执行,执行后再由CN汇总将数据返回给业务用户或者业务应用。这个过程是容易理解的,本次我们重点关注的是站在CN前面的LVS+KeepAlived。现在的问题是:CN的返回结果是否会经过LVS,然后再返回给前端应用?如果经过LVS,那么,LVS会不会成为单点瓶颈?带着这两个问题我们探究一下LVS和KeepAlived的原理。一、LVS是什么? LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。二、LVS的目的是什么?LVS主要用于服务器集群的负载均衡,拥有VIP,客户端将所有请求发送至此VIP,LVS负责将请求分发到不同的RS,客户不感知RS。其目的是提高服务器的性能,将请求均衡的转移到不同的服务器上执行,从而将一组服务器构成高性能、高可靠的虚拟服务器。 三、LVS的体系结构使用LVS架设的服务器集群系统有三个部分组成: (1)最前端的负载均衡层,用Load Balancer表示; (2)中间的服务器集群层,用Server Array表示; (3)最底端的数据共享存储层,用Shared Storage表示;在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。如图:Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。Shared Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Red hat的GFS文件系统,oracle提供的OCFS2文件系统等。 从整个LVS结构可以看出,Director Server是整个LVS的核心,目前,用于Director Server的操作系统只能是Linux和FreeBSD,linux2.6内核不用任何设置就可以支持LVS功能,而FreeBSD作为Director Server的应用还不是很多,性能也不是很好。对于Real Server,几乎可以是所有的系统平台,Linux、windows、Solaris、AIX、BSD系列都能很好的支持。四、LVS的程序组成部分LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)五、LVS的负载均衡机制1、 LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。因为LVS是四层负载均衡,因此它相对于其它高层负载均衡的解决办法,比如DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。2、 LVS的转发主要通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。 GaussDB(DWS)目前主要采用的是DR(Direct Routing)模式,所以,我们主要聊一聊DR模式。下图是DR模式的一个示意图:DR模式下需要LVS和RS集群绑定同一个VIP(RS通过将VIP绑定在loopback实现),请求由LVS接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过LVS。详细来看,一个请求过来时,LVS只需要将网络帧的MAC地址修改为某一台RS的MAC,该包就会被转发到相应的RS处理,注意此时的源IP和目标IP都没变,LVS只是做了一下移花接木。RS收到LVS转发来的包时,链路层发现MAC是自己的,到上面的网络层,发现IP也是自己的,于是这个包被合法地接受,RS感知不到前面有LVS的存在。而当RS返回响应时,只要直接向源IP(即用户的IP)返回即可,不再经过LVS。至此,回答了我们第一个问题:CN的返回结果是否会经过LVS,然后再返回给前端应用?答:GaussDB(DWS)采用的是LVS的DR模式,返回时不再经过LVS。 接下来,我们看看keepAlived。一、什么是keepAlived?Keepalived顾名思义,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生。二、keepAlived的原理Keepalived的实现基于VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议),而VRRP是为了解决静态路由的高可用。虚拟路由器由多个VRRP路由器组成,每个VRRP路由器都有各自的IP和共同的VRID(0-255),其中一个VRRP路由器通过竞选成为MASTER,占有VIP,对外提供路由服务,其他成为BACKUP,MASTER以IP组播(组播地址:224.0.0.18)形式发送VRRP协议包,与BACKUP保持心跳连接,若MASTER不可用(或BACKUP接收不到VRRP协议包),则BACKUP通过竞选产生新的MASTER并继续对外提供路由服务,从而实现高可用。三、KeepAlived与LVS的关系1、keepalived 是 lvs 的扩展项目,是对LVS项目的扩展增强,因此它们之间具备良好的兼容性。2、对LVS应用服务层的应用服务器集群进行状态监控:若应用服务器不可用,则keepalived将其从集群中摘除,若应用服务器恢复,则keepalived将其重新加入集群中。3、检查LVS主备节点的健康状态,通过IP漂移,实现主备冗余的服务高可用,服务器集群共享一个虚拟IP,同一时间只有一个服务器占有虚拟IP并对外提供服务,若该服务器不可用,则虚拟IP漂移至另一台服务器并对外提供服务,解决LVS本身单点故障问题。 至此,我们可以回答第二个问题:如果经过LVS,那么,LVS会不会成为单点瓶颈或者出现单独故障?答:返回结果不会经过LVS,不会因为返回的数据量太大造成单独瓶颈的问题。对应请求, LVS只需要将用户请求转发给CN即可,负载很低,也不会出现单独瓶颈的问题。另外,LVS通过keepAlived实现了主备冗余,避免了单独故障。
-
资源创建之创建VPC、CCE集群和ELB创建虚拟私有云以及子网 步骤 1 登录控制台,选择“虚拟私有云”。 步骤 2 单击“创建虚拟私有云”。 步骤 3 在“创建虚拟私有云”页面,根据界面提示配置虚拟私有云参数。 表1-1 创建虚拟私有云参数配置 其它使用默认配置,单击“立即创建”。 ----结束 至此您已经快速创建一个虚拟私有云。快速创建Kubernetes混合集群 步骤 1 登录控制台,在左侧导航栏中单击“基础设施 > K8S集群(CCE)”,单击“创建Kubernetes集群”,单击 “创建混合集群”,进入购买混合集群页面。 步骤 2 在购买混合集群页面的“服务选型”步骤中配置集群参数: 表1-2 创建集群参数配置 其它使用默认配置,单击“下一步:创建节点”进入“创建节点”步骤。 步骤 1 在“创建节点”步骤中,配置如下参数: l 计费模式:跟随集群的计费方式。 l 可用区:选择“可用区1”。 l 节点名称:cluster-test01-node01。 l 节点规格选择“2核8GB”,如下图: l 其它使用默认配置 步骤 2 单击“下一步:安装插件”,使用默认配置。 步骤 3 单击“下一步:配置确认”,勾选“使用说明”的“我已知晓上述限制”。 步骤 4 确认规格和费用后,单击“去支付”。 勾选领取的代金券并完成订单即可。 集群创建预计需要6-10分钟,您可以单击“返回集群管理”进行其他操作或单击“查看集群事件列表”后查看集群详情。 ----结束 至此,您已经快速创建一个Kubernetes集群。快速购买弹性IP并绑定集群 步骤 1 登录控制台,在左侧导航栏中单击“弹性公网IP和带宽 > 弹性公网IP”,单击“购买弹性公网IP”,选择 “共享负载均衡”,进入购买弹性负载均衡页面。 步骤 2 在购买弹性IP页面中配置如下参数: 步骤 3 单击“立即购买”,确认参数并提交。 步骤 4 在绑定弹性公网IP:在“弹性公网IP”界面待绑定弹性公网IP地址所在行,单击“绑定”。选择实例。单击“确定”。 ----结束 至此,您已经快速创建一个弹性公网IP并绑定实例。快速创建ELB负载均衡器 步骤 1 登录控制台,在左侧导航栏中单击“弹性负载均衡 > 负载均衡器”,单击“购买弹性负载均衡”,选择 “共享负载均衡”,进入购买弹性负载均衡页面。 步骤 2 在购买弹性负载均衡页面中配置参数: 表1-1 购买弹性负载均衡参数配置 其它使用默认配置,单击“立即购买”。 步骤 3 负载均衡创建完成后,需要配置监听器。在左侧导航栏中单击“弹性负载均衡 > 负载均衡器” 步骤 4 在刚才创建的负载均衡的“监听器(前端协议/端口)”一列点击“点我开始配置”。 步骤 5 在“监听器”页签单击添加监听器,配置如下: l 前端协议/端口: TCP/31543 l 名称:server_group-test01。 l 其它使用默认配置 步骤 7 单击“完成”,ELB配置成功。 ----结束 至此,您已经快速创建一个ELB负载均衡器。
-
1 订单接口说明订单接口以及其他云服务对接指导,请参考cid:link_02 对接准备订单接口参数较为复杂,建议您使用可视化工具对接口进行测试,如postman(使用前请关闭SSL证书校验),restclient等。请参考帖子:【华为云Stack ManageOne 运营侧北向对接】北向接口对接准备工作,获取接口文档,接口对接需要的IP,域名等信息本帖提供的方法,适配华为云Stack 6.5.X,8.X版本3 订单接口对接步骤我们知道ManageOne订单接口不能独立使用,需要配合云服务接口使用,这里给出主要的对接步骤,如下:通过用户名和密码调用鉴权接口获取Token和user_id。(可选)通过user_id查询用户关联的project,用户是以project维度操作资源,资源也必须属于某一个project根据选择的project的id查询project详细信息,获取region_id、支持的云服务列表、每个云服务的资源池id和包含的az(可用分区)列表。选择需要申请的云服务类型,比如云硬盘的service_type为evs。订购接口还需要product_id,因此通过查询可用产品列表接口获取。根据不同的云服务定义的数据结构获取对应的参数,这部分由每个云服务具体的订购章节详细描述,参考《ManageOne 6.5.x/8.x 云服务Params参数说明》。组合订购接口所需的所有参数,调用接口完成订购。下面给出通过订单接口创建、释放弹性负载均衡(ELB)的详细步骤。ELB服务仅在华为云Stack的type1(软件实现的SDN)和type2(硬件组网SDN)场景中支持,正式对接前,请咨询现场的华为云Stack服务工程师确认现场环境是否支持ELB4 申请弹性负载均衡ELB(Elastic Load Balance),即弹性负载均衡,是将访问流量根据转发策略分发到多台后端云服务器的流量分发控制服务。弹性负载均衡可以通过流量分发扩展应用系统对外的服务能力,实现更高水平的应用程序容错性能。弹性负载均衡可以消除单点故障,提高整个系统的可用性。同时ELB是内网外网统一部署,支持VPN(Virtual Private Network)、专线及跨VPC(Virtual Private Cloud)访问能力。这里先给出涉及到的接口清单,如下:序号接口功能URL涉及到的接口文档调用接口使用的域名(样例)1鉴权【POST】/v3/auth/tokens《ManageOne 6.5.X OTenantSecurity服务API参考.doc》iam-apigateway-proxy.demo.com2查询用户关联的project列表【GET】/rest/vdc/v3.0/users/{user_id}/projects《ManageOne 8.X 运营面API参考.doc》sc.demo.com3查询project详情,获取该project关联的资源池信息【GET】/rest/vdc/v3.1/projects/{project_id}《ManageOne 8.X 运营面API参考.doc》sc.demo.com4查询可申请的产品列表【GET】/rest/product/v3.0/apply/products《ManageOne 8.X 运营面API参考.doc》sc.demo.com5查询云资源池可用分区【GET】/rest/serviceaccess/v3.0/available-zones《ManageOne 8.X 运营面API参考.doc》sc.demo.com6创建订购【POST】/rest/subscription/v3.0/subscriptions《ManageOne 8.X 运营面API参考.doc》《ManageOne 8.x 云服务Params参数说明》sc.demo.com7查询订单详情【GET】/rest/order/v3.0/orders/{order_id}《ManageOne 8.X 运营面API参考.doc》sc.demo.com8获取弹性IP列表(可选)【GET】/v1/{tenant_id}/publicips《弹性IP(EIP) 8.x API参考(for 华为云Stack 8.x).pdf》vpc.sa-fb-1.demo.com10获取VPC信息【GET】/v1/{project_id}/vpcs《虚拟私有云(VPC) 8.x API参考(for 华为云Stack 8.x).pdf》vpc.sa-fb-1.demo.com12获取子网【GET】/v1/{project_id}/subnets?vpc_id={vpc_id}《虚拟私有云(VPC) 8.x API参考(for 华为云Stack 8.x).pdf》vpc.sa-fb-1.demo.com申请ELB,调用步骤如下:步骤 1 获取token调用示例:URL:https://{IAM对外访问域名}/v3/auth/tokens 请求方法:POST 请求头: Content-Type: application/json;charset=UTF-8 Accept: application/json;charset=UTF-8 Connection: keep-alive 请求体: { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "租户名" }, "name": "XXXXXX", "password": "XXXXXX" } } }, "scope": { "project": { "domain": { "name": "租户名" }, "id": "项目Id" } } } } 响应消息如下: 响应头: X-Subject-Token→MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 响应体: { "token": { "expires_at": "2025-02-25T12:54:08.357000Z", "methods": [ "password" ], "catalog": [ .... ], "roles": [ .... ], "project": { "domain": { "name": "hzp_vdc", "id": "93dd703146c44bbc86cd8b4e35020b2d" }, "name": "sa-fb-1_hzp_project", "id": "735bb0f4a760490d9638aba5e022f504" }, "issued_at": "2025-02-24T12:54:08.357000Z", "user": { "domain": { "name": "hzp_vdc", "id": "93dd703146c44bbc86cd8b4e35020b2d" }, "name": "hzp_admin1", "id": "056b909a06ca4ee395b1f72fe4cdd4a2" } } }从响应头中我们可以获得X-Subject-Token的值,即为我们所需要的token的值; 从响应体中还可以获得用户的Id,以便后续查询用户关联的所有的project步骤2 查询用户关联的project(可选)创建资源时,需要指定该资源所属的project,若一个租户下有多个project,第三方平台需要指明需要使用的project,此时需要查询该用户关联的project,若仅涉及单个project,则不涉及此操作。需要说明的是,当选择某个project创建资源时,需要用该project参考步骤1去获取token。调用示例如下: URL: https://{ManageOne运营侧API对外域名}/rest/vdc/v3.1/users/{user_id}/projects 请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "total": 1, "projects": [ { "regions": [ { "region_id": "sa-fb-1", "region_status": "normal", "region_name": { "zh_cn": "东莞", "en_us": "东莞" } } ], "id": "735bb0f4a760490d9638aba5e022f504", "name": "sa-fb-1_hzp_project", "iam_project_name": "sa-fb-1_hzp_project", "display_name": "sa-fb-1_hzp_project", "description": "", "enabled": true, "domain_id": "93dd703146c44bbc86cd8b4e35020b2d", "tenant_id": "eeeb8a47-c543-4c20-ba99-a51e0e661243", "tenant_name": "hzp_vdc", "level": "1", "role_id": null, "role_name": null, "is_shared": "false" } ] }步骤 3 查询资源池信息创建、变更、删除资源时,需要指定资源所在的region、资源池、可用分区,我们可以通过查询project详情获取该project关联的region、资源池、可用分区信息,接口调用示例如下:URL: https://{ManageOne运营侧API对外域名}/rest/vdc/v3.1/projects/{project_id} 请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "project": { "domain_id": "93dd703146c44bbc86cd8b4e35020b2d", "tenant_id": "eeeb8a47-c543-4c20-ba99-a51e0e661243", "tenant_name": "hzp_vdc", "regions": [ { "region_status": "normal", "cloud_infras": [ { "cloud_infra_status": "normal", "cloud_infra_name": "OpenStack_sa-fb-1", "cloud_infra_type": "FUSION_CLOUD", "azs": [ { "az_status": "normal", "az_name": "华为", "az_id": "az0.dc0" } ], "cloud_infra_id": "FUSION_CLOUD_sa-fb-1" } ], "region_id": "sa-fb-1", "region_name": { "en_us": "东莞", "zh_cn": "东莞" } } ], "is_shared": false, "name": "sa-fb-1_hzp_project", "tenant_type": "vdc", "region_name": null, "id": "735bb0f4a760490d9638aba5e022f504", "enabled": true } }此处我们可以获得region_id、cloud_infra_id、az_id,需要注意的是,创建资源时指定的AZ必须与cloud_infra_id、region_id匹配,不能交叉混用!!!步骤4 查询产品列表不同的云服务在ManageOne中体现为对外提供不同的产品,查询时需要指定产品类型(service_type)。调用示例如下: URL: https://{ManageOne运营侧API对外域名}/rest/product/v3.0/apply/products?service_type=elb®ion_id={region_id}&start=1&limit=4 请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "total": 1, "products": [ { "product_id": "00239168b8f44e349d3b9b94ba85fb8f", "service_type": "elb", "create_vdc_id": "all", "create_user_id": "c6ff93f5503949c1bae8b18d56647f90", "icon_id": "defaulticonelb", "catalog_id": "3", "region_id": "sa-fb-1", "params": "{}", "name": "{\"en_US\":\"ELB\",\"zh_CN\":\"弹性负载均衡\"}", "description": "{\"en_US\":\"Elastic Load Balance (ELB), also known as Unified Load Balancing (ULB), is a service that automatically distributes traffic among multiple ECSs to balance workloads. It improves the fault tolerance and expands the service capabilities of your applications. The ELB service provides standard OpenStack APIs, uses the same architecture for private and public network load balancers, and offers load balancing functions for the VPN, Direct Connect, and VPC services.\",\"zh_CN\":\"弹性负载均衡,又称作统一负载均衡,通过将访问流量自动分发到多台弹性云服务器,扩展应用系统对外的服务能力,实现更高水平的应用程序容错性能。它提供标准Openstack API,支持内外网统一部署,可以为VPN、专线及跨VPC提供负载均衡的能力。\"}", "create_time": 1674959139000, "publish_status": "publish", "deletable_status": "normal", "is_default": true, "resource_pool_id": "", "project_id": "", "az_id": "", "secret_params": null, "product_type": null, "custom_catalog_info": null, "custom_catalog_id": "10003", "version": null, "support_user": null, "charge_user": null, "service_vendor": null, "endpoint": null, "approval_parameter_mode": null, "create_top_vdc_id": null, "console_apply_url": "", "console_create_url": "", "console_detail_url": "", "console_modify_url": "", "console_delete_url": "" } ] }响应体中,is_default字段值为true的产品表示,该产品为系统预置产品,没有关联人和审批流程,申请该产品后,不需要经过任何审批流程,直接对订单进行实施步骤 5 查询弹性IP(可选)一般的,ELB通过弹性IP对外提供应用的访问入口,故而我们在申请ELB时,通常会为ELB绑定一个弹性IP,这里给出弹性IP的查询方法,示例如下: URL: https://{vpc对外访问域名}/v1/{tenant_id}/publicips 请求方法:GET 请求头: Content-Type: application/json;charset=UTF-8 Accept: application/json;charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "publicips": [ { "id": "40067fbb-c2d8-4ffa-8a81-60c3abb258ca", "type": "EIP_external_net", "external_net_id": "a340cd45-fa9f-41cb-96a8-672507e08f71", "public_ip_address": "160.105.16.168", "status": "DOWN", "tenant_id": "c7c6a276578e411ab2ef2d999d9ef59e", "project_id": "c7c6a276578e411ab2ef2d999d9ef59e", "create_time": "2021-11-25T06:32:03", "bandwidth_id": "c13878e7-1076-41af-aad2-054f4c3fe095", "bandwidth_name": "bandwidth-7133", "bandwidth_share_type": "PER", "bandwidth_size": 5, "profile": { "product_id": null, "region_id": "dg-tky-12", "order_id": null }, "op_status": 0, "updated_at": "2021-12-15T02:30:06", "created_at": "2021-11-25T06:32:03" } ] }注意,只有status的值为DOWN的弹性IP才是没有被使用的,我们需要获取处于这种状态的弹性IP 步骤6 查询VPC列表ELB需要占用VPC子网下一个私有IP,该子网与后端云服务器使用的子网相同,以便ELB能够监测云服务器状态进行调度,下面给出查询VPC的方式 URL: https://{vpc对外访问域名}/v1/{project_id}/vpcs 请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "vpcs": [ { "id": "f4c30853-2f53-4a23-a681-1af55086a45b", "name": "vpc-a7da", "cidr": null, "status": "OK", "routes": [], "external_gateway_info": {...}, "service_availability_zones": [...], "ntp": [], "expiry": "0", "op_status": 0, "project_id": "735bb0f4a760490d9638aba5e022f504", "ntp_v6": [] } ] }id即为VPC Id步骤 7 查询VPC子网列表获取到VPC Id后,我们需要查询出该VPC下的子网列表,方法如下: URL: https://{vpc对外访问域名}/v1/{project_id}/subnets?vpc_id={vpc_id} (vpc_id由上一步查询获得) 请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "subnets": [ { "id": "b501787e-d7a0-431e-841d-85ca4fa49d71", "name": "subnet-a7df", "description": "", "cidr": "192.168.2.0/24", "dnsList": [...], "status": "ACTIVE", "external": false, "routed": true, "vpc_id": "f4c30853-2f53-4a23-a681-1af55086a45b", "project_id": "735bb0f4a760490d9638aba5e022f504", "gateway_ip": "...", "dhcp_enable": true, "primary_dns": "...", "secondary_dns": "...", "host_routes": [], "allocation_pools": [ { "start": "192.168.2.2", "end": "192.168.2.254" } ], "segmentation_id": 5722, "neutron_subnet_id": "fb2b3546-9d4e-40ca-bba0-b9440c53171e", "ipv4_enable_multicast": false, "ipv4_multicast_status": "", "ip_version": 4, "neutron_network_id": "b501787e-d7a0-431e-841d-85ca4fa49d71", "ipv6_enable": false } ] }subnet_id的值即为子网id 至此,我们获得了创建ELB的所有参数,如下:序号参数名称参考值备注1operate_typeapply申请,固定值apply2service_typeelb弹性负载均衡,固定值elb3region_idsa-fb-11区域id,参考步骤3获取4tenancy30服务有效期,单位天,永久有效则填写05product_id 产品id,参考步骤4查询可申请的产品列表,查找elb的产品id6tenant_id 云服务中的tenant_id和manageOne中的project_id相同,与步骤1获取token时指定的project相同7params 配置elb所需参数,见后续表格说明 params参数说明参数类型必选值域描述loadbalancerObject是-负载均衡器信息。publicipObject否-EIP信息。暂不使用EIP时不必传此参数。新创建或者使用已有EIP时此参数必选。bandwidthObject否-带宽信息。新创建EIP时,此参数必选。countInteger是-申请ELB数量。只能为1。displayObject是-订单页面呈现的内容。 loadbalancer参数说明参数类型必选值域描述descriptionString否1-16位。描述。admin_state_upBoolean否-管理状态:true/false。固定为true。tenant_idString否-项目ID。provisioning_statusString否ACTIVE,PENDING_CREATE,ERRORprovisioning状态。vip_subnet_idString是-分配VIP的子网ID。仅支持内网类型。参考步骤7listenersList<Map<String, String>>否-关联的监听器列表vip_addressString否-负载均衡VIP 地址。手动分配时提供此参数。vip_port_idString否-VIP的端口IP。providerString否-供应商。Type2时此参数必选。Type1只支持vlb。Type2支持vlb、原生lb以及第三方厂商的lb。poolsList<Map<String, String>>否-pool列表。idString否-负载均衡器ID.operating_statusString否ONLINE,OFFLINE,DEGRADED,DISABLED,NO_MONITORoperating状态。nameString是由中文、英文字母、数字、下划线、中划线组成,长度1-64位。负载均衡器名称。 publicip参数说明参数类型必选值域描述idString否-EIP ID。使用已有EIP时此参数必选。参考步骤5typeString否-EIP外部网络。新创建EIP时此参数必选,使用已有EIP时不必传此参数。external_net_idString否-外部网络ID。参考步骤6subnet_idString否-EIP所属外部网络子网ID。新创建EIP时此参数必选,使用已有EIP时不必传此参数。port_idString否-EIP关联的端口ID。ip_addressString否-EIP地址。新创建EIP手动分配IP地址时传此参数。profileMap<String, Object>否-弹性IP订单详情。 display参数说明参数类型必选值域描述zh_CNList<Resource>是-中文显示内容。en_USList<Resource>是-英文显示内容。 Resource参数说明参数类型必选值域描述labelString是-显示key值。valueString是-显示value值。typeString是-显示value的类型(string,array)。步骤 10 调用订单接口,创建ELB申请ELB请求示例如下: URL: https://{ManageOne运营侧API对外域名}/rest/subscription/v3.0/subscriptions 请求方法:POST 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体: { "subscriptions": [ { "operate_type": "apply", "product_id": "00239168b8f44e349d3b9b94ba85fb8f", "service_type": "elb", "tenancy": 0, "region_id": "sa-fb-1", "project_id": "735bb0f4a760490d9638aba5e022f504", "params": "{\"loadbalancer\":{\"name\":\"elb-98e7\",\"description\":\"\",\"guaranteed\":false,\"tenant_id\":\"735bb0f4a760490d9638aba5e022f504\",\"admin_state_up\":true,\"vip_subnet_id\":\"fb2b3546-9d4e-40ca-bba0-b9440c53171e\",\"l4_flavor_id\":\"\",\"l7_flavor_id\":\"\",\"tags\":[],\"selector\":\"\"},\"count\":1,\"resource_subset_id\":\"0\",\"display\":{\"en_US\":[{\"label\":\"Region\",\"value\":\"东莞\",\"type\":\"string\"},{\"label\":\"Name\",\"value\":\"elb-98e7\",\"type\":\"string\"},{\"label\":\"VPC\",\"value\":\"vpc-a7da\",\"type\":\"string\"},{\"label\":\"Subnets\",\"value\":\"subnet-a7df(IPv4:192.168.2.0/24)\",\"type\":\"string\"},{\"label\":\"Service IPv4 of Load Balancer\",\"value\":\"Automatic\",\"type\":\"string\"}],\"zh_CN\":[{\"label\":\"区域\",\"value\":\"东莞\",\"type\":\"string\"},{\"label\":\"名称\",\"value\":\"elb-98e7\",\"type\":\"string\"},{\"label\":\"VPC\",\"value\":\"vpc-a7da\",\"type\":\"string\"},{\"label\":\"子网\",\"value\":\"subnet-a7df(IPv4:192.168.2.0/24)\",\"type\":\"string\"},{\"label\":\"Service IPv4 of Load Balancer\",\"value\":\"自动分配\",\"type\":\"string\"}]}}", } ] } 响应体: { "purchases": [ { "subscription_id": "20190914113546169610061" } ], "expected_total": 0, "error_details": null }subscription_id即为订单ID步骤11 查询订单详情,确认订单实施状态订单提交成功后,需要定时轮询订单状态,直到订单状态(status字段)为成功URL: https://{ManageOne运营侧API对外域名}/rest/order/v3.0/orders/{order_id}(order_id由上一步响应体获得) 请求方法:POST 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "order_id": "20190914113546169610061", "parents_id": null, "type": "apply", "service_type": "vpc", "params": "{\"regionId\":\"dg-tky-1\",\"tenant_id\":\"27a008f1b83e4dfdbf1143dd336006df\",\"vpc\":{\"name\":\"vpc-5e10\",\"ntp\":[],\"ntp_v6\":[]},\"subnet\":{\"regionId\":\"dg-tky-1\",\"tenantId\":\"27a008f1b83e4dfdbf1143dd336006df\",\"availableZoneId\":\"\",\"name\":\"subnet-5e10\",\"dhcpEnable\":true,\"cidr\":\"192.168.10.0/24\",\"physicalNetwork\":\"physnet1\",\"segmentationId\":\"177\",\"routed\":false,\"dnsList\":[\"160.102.8.53\",\"160.102.8.54\"]},\"display\":{\"en_US\":[{\"label\":\"Region\",\"value\":\"东莞\",\"type\":\"string\"},{\"label\":\"VPC Name\",\"value\":\"vpc-5e10\",\"type\":\"string\"},{\"label\":\"External Network\",\"value\":\"\",\"type\":\"string\"}],\"zh_CN\":[{\"label\":\"区域\",\"value\":\"东莞\",\"type\":\"string\"},{\"label\":\"VPC名称\",\"value\":\"vpc-5e10\",\"type\":\"string\"},{\"label\":\"外部网络\",\"value\":\"\",\"type\":\"string\"}]}}", "create_user_id": "b54310fb838b4f8ebf1e9d23bf9691d5", "create_user_name": "xssvdc", "vdc_id": "d58cc7b4-59a8-49ff-8f0c-0c7dff90b5e9", "vdc_name": "xssvdc", "status": "successed", "create_time": "2019-06-11 01:53:42", "implement_time": "2019-06-11 01:53:43", "complete_time": "2019-06-11 01:53:48", "project_id": "27a008f1b83e4dfdbf1143dd336006df", "cloud_infra_id": null, "product_id": "04e12eba75e243368f5cb6a0f52db4af", "region_id": "dg-tky-1", "product_defination_params": "{\"en_US\":\"VPC\",\"zh_CN\":\"虚拟私有云\"}", "tenancy": "0", "original_tenancy": "0", "time_zone": null, "comments": null, "contract_number": null, "rate_params": null, "domain_id": null }5 删除ELB删除ELB,我们需要指定ELB的Id,所属的区域,AZ等信息,步骤如下:步骤 1 获取token参考第4章 步骤1即可步骤2 查询区域列表参考 第4章 步骤3即可步骤3 查询ELB列表获取elb的id,然后选择一个不再使用的elb进行删除,示例如下:URL: https://{vpc对外访问域名}/v2.0/lbaas/loadbalancers 请求方法:GET 请求头: Content-Type: application/json;charset=UTF-8 Accept: application/json;charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "loadbalancers": [ { "tenant_id": "1a3e005cf9ce40308c900bcb08e5320c", "listeners": [ { "id": "45196943-2907-4369-87b1-c009b1d7ac35" } ], "provisioning_status": "ACTIVE", "description": "simple lb", "pools": [ { "id": "21d49cf7-4fd3-4cb6-8c48-b7fc6c259aab" } ], "vip_subnet_id": "5328f1e6-ce29-44f1-9493-b128a5653350", "vip_address": "10.0.0.2", "provider": "vlb", "operating_status": "ONLINE", "admin_state_up": true, "name": "loadbalancer1", "id": "a9729389-6147-41a3-ab22-a24aed8692b2", "vip_port_id": "cbced4fe-6f6f-4fd6-9348-0c3d1219d6ca" } ] }至此,我们获得了创建删除ELB订单所需要的参数,如下:序号参数名称参考值备注1operate_typedelete删除,固定值delete2service_typeelb弹性负载均衡,固定值elb3region_idsa-fb-11区域id,参考步骤2获取4project_id 项目Id,参考步骤1获取,与获取token时指定的project相同5params 删除ELB请求参数,见后续表格说明 params参数说明参数类型必选值域描述idsList<Map<String, String>>是-资源信息。displayObject是-订单页面呈现的内容。 ids参数信息参数类型必选值域描述idString是-资源ID。参考步骤3service_typeString是-服务类型。取值为elb。 display参数说明参数类型必选值域描述zh_CNList<Resource>是-中文显示内容。en_USList<Resource>是-英文显示内容。 Resource参数说明参数类型必选值域描述labelString是-显示key值。valueString是-显示value值。typeString是-显示value的类型(string,array)。 步骤4 调用订单接口删除ELBURL: https://{ManageOne运营侧API对外域名}/rest/subscription/v3.0/subscriptions 请求方法:POST 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体: { "subscriptions": [{ "service_type": "elb", "project_id": "c898048bfcd640cda49f5090eb82566f", "params": "{\"display\": [{\"type\": \"string\", \"value\": \"cn-sz-1\", \"label\": \"region\"}, {\"type\": \"string\", \"value\": \"test_elb\", \"label\": \"name\"}], \"ids\": [{\"service_type\": \"elb\", \"id\": \"edb0dda9-6889-478a-a0e6-819581cee94b\"}]}", "region_id": "cn-sz-1", "operate_type": "delete" }] } 响应体: { "purchases": [ { "subscription_id": "20190914110658422269247" } ], "expected_total": 0, "error_details": null }同样的,我们需要调用订单查询接口(参考底5章 步骤11),查询订单状态,直到ELB删除完成 补充说明:ELB的查询、属性更新等操作均需要调用云服务的接口,具体接口参考文档《华为云Stack 6.5.X API接口参考.chm》中“网络”-->“ELB”章节。ELB的申请、删除、扩容需要使用ManageOne订单接口,不可将ManageOne订单接口与ELB接口混用(如:使用ManageOne订单接口创建资源,使用ELB接口删除资源),否则会导致ManageOne上数据展示异常
-
使用Hive建表建表语句样例:CREATE EXTERNAL TABLE IF NOT EXISTS elb_logs ( msec string, access_log_topic_id string, time_iso8601 string, log_ver string, remote_addr string, remote_port string, status string, request_method string, request_uri string, server_protocol string, request_length int, bytes_sent int, body_bytes_sent int, request_time double, upstream_status string, upstream_connect_time double, upstream_header_time double, upstream_response_time double, upstream_addr string, upstream_port string, http_user_agent string, http_referer string, http_x_forwarded_for string, lb_name string, listener_name string, listener_id string, pool_name string, member_name string, tenant_id string, eip_address string, eip_port string, upstream_addr_priv_ip string, upstream_addr_priv_port string, certificate_id string, ssl_protocol string, ssl_cipher string, sni_domain_name string, tcpinfo_rtt int ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1', 'input.regex' = '([^ ]*) ([^ ]*) \\[([^ ]*)\\] ([^ ]*) ([^ ]*):([0-9]*) (|[-0-9]*) \\\"([^ ]*) ([^ ]*) (- |[^ ]*)\\\" (|[-0-9]*) (|[-0-9]*) (|[-0-9]*) ([-.0-9]*) \\\"(|[-0-9]*)\\\" \\\"([-.0-9]*)\\\" \\\"([-.0-9]*)\\\" \\\"([-.0-9]*)\\\" \\\"([^ ]*):([0-9]*)\\\" \\\"(.*?)\\\" \\\"([^ ]*)\\\" \\\"(.*?)\\\" ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) \\\"([^ ]*)\\\" ([^ ]*) ([^ ]*):([0-9]*) \\\"([^ ]*):([0-9]*)\\\" ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (|[-0-9]*)' ) LOCATION 'obs://xxx/xxx/';正则表达式匹配2019.9.10日ELB日志格式,请参考ELB说明文档:https://support.huaweicloud.com/usermanual-elb/zh-cn_topic_0150301848.html执行查询语句SELECT msec, request_uri FROM elb_logs WHERE status LIKE '2%' LIMIT 10;
-
#化鲲为鹏,我有话说#华为云的负载均衡是怎么用的呢?在华为云创建ELB后,只需要配置好监听器和后端服务器组就行了。监听器:前端协议+端口 eg. https (TCP/443)后端服务器组:就是我们应用所在的服务器,知道服务器地址+端口号就行了
-
尊敬的华为云客户:华为云计划于2018/11/08将弹性负载均衡服务(ELB)控制台,从云服务器控制台迁移至网络控制台,届时请您前往网络控制台购买并查看弹性负载均衡的相关资源。路径:登录华为云控制台—所有服务—网络—弹性负载均衡ELB如您有任何问题,欢迎您拨打华为云服务热线:4000-955-988与我们联系。感谢您对华为云的支持!
-
【摘要】 弹性负载均衡( Elastic Load Balance,简称ELB)将访问流量自动分发到多台云服务器,扩展应用系统对外的服务能力,实现更高水平的应用容错。上一章我们学习了如何创建共享云硬盘,我们基于上一个模板加入创建负载均衡ELB的内容。弹性负载均衡( Elastic Load Balance,简称ELB)将访问流量自动分发到多台云服务器,扩展应用系统对外的服务能力,实现更高水平的应用容错。上一章我们学习了如何创建共享云硬盘,我们基于上一个模板加入创建负载均衡ELB的内容。tosca_definitions_version: huaweicloud_tosca_version_1_0node_templates: myecs: type: HuaweiCloud.ECS.CloudServer properties: availabilityZone: cn-south-1a flavor: c1.medium imageId: a3934478-bfeb-4a02-b257-9089779f0380 instances: 1 name: my-ecs nics: - subnetId: get_reference: mysubnet rootVolume: size: 40 volumeType: SATA securityGroups: - id: get_reference: mysg vpcId: get_reference: myvpc mountedVolumes: - mountPath: '/dev/sdc' volumeId: get_reference: myevs requirements: - vpcId: node: myvpc - securityGroups.id: node: mysg - nics.subnetId: node: mysubnet - mountedVolumes.volumeId: node: myevs mysg: type: HuaweiCloud.VPC.SecurityGroup properties: name: my-sg requirements: - vpcId: node: myvpc mysgrule: type: HuaweiCloud.VPC.SecurityGroupRule properties: direction: ingress ethertype: IPv4 maxPort: 5444 minPort: 5443 protocol: TCP securityGroupId: get_reference: mysg requirements: - securityGroupId: node: mysg mysubnet: type: HuaweiCloud.VPC.Subnet properties: cidr: '192.168.1.0/24' dhcpEnable: true gateway: 192.168.1.1 name: my-subnet vpcId: get_reference: myvpc requirements: - vpcId: node: myvpc myvpc: type: HuaweiCloud.VPC.VPC properties: cidr: '192.168.0.0/16' name: my-vpc myevs: type: HuaweiCloud.EVS.SharedVolume properties: size: 10 availabilityZone: cn-south-1a volumeType: SATA myelb: type: HuaweiCloud.ELB.LoadBalancer.External properties: name: my-elb vpcId: get_reference: myvpc requirements: - vpcId: node: myvpc myelb-listener: type: HuaweiCloud.ELB.Listener properties: protocol: TCP name: my-elb-listener backendPort: 80 backendProtocol: TCP port: 80 lbAlgorithm: roundrobin loadBalanceId: get_reference: myelb requirements: - loadBalanceId: node: myelb myhealth: type: HuaweiCloud.ELB.HealthMonitor properties: unhealthyThreshold: 3 healthyThreshold: 3 healthCheckInterval: 5 healthCheckConnectPort: 80 healthCheckTimeout: 10 listenerId: get_reference: myelb-listener requirements: - listenerId: node: myelb-listener mymember: type: HuaweiCloud.ELB.Members properties: serverIds: - get_reference: myecs listenerId: get_reference: myelb-listener requirements: - serverIds: node: myecs - listenerId: node: myelb-listener首先创建一个elb元素,它是部署华为云PaaS层私网LoadBalancer对象,通过创建LoadBalancer,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并将请求进行负载分发到后端的各个容器应用上。参数vpcId是ELB实例所属的VPC,弹性负载均衡需要与后端监听的弹性云服务器处于同一个VPC下。elb-listener元素是弹性负载均衡下的监听器,一个loadBalancer可对应多个监听器,支持对监听器进行增加、删除。它有几个属性值: 1. protocol是负载均衡器协议。 2. name是监听器的名称,设置为my-elb-listener。 3. backendPort表示云服务器端口,可根据实际情况修改。 4. backendProtocol是云服务器协议。 5. port是负载均衡器端口,默认为80,可根据实际情况修改。 6. lbAlgorithm是监听器负载均衡方式,roundrobin:轮询算法, leastconn:最少连接, source:源IP算法;其中轮询算法支持会话保持功能。 7. loadBalanceId是所属的负载均衡器ID,将elb-listener与之前创建的elb关联起来。,然后创建health-monitor元素,它是弹性负载均衡下的健康检查,一个Listener对应一个健康检查,一个健康检查管理多个弹性云服务器,支持对健康检查进行增加删除。 1. unhealthyThreshold判定健康检查结果为fail的阈值,即健康检查连续失败多少次后,将后端云服务器的健康检查状态由success改为fail。 2. healthyThreshold判定健康检查结果为success的阈值。 3. healthCheckInterval是健康检查时间间隔(秒)。 4. healthCheckConnectPort是健康检查使用端口,可根据实际情况修改,默认为云服务器端口。 5. healthCheckTimeout是健康检查超时时间(秒)。 6. listenerId健康检查所属的监听器ID,将health-monitor与elb-listener元素相关联。member元素是弹性负载均衡下的弹性云服务器,一个Listener可以对应多个弹性云服务器,并且可以对监听器进行增加删除。一个HealthMonitor管理多个云服务器。 1. serverIds是后端云服务器ID。 2. listenerId是所属的监听器ID,该参数将member与elb-listener元素相关联。为确保ELB健康检查正常运行,需要在后端弹性云服务器的安全组中添加入方向规则,允许来自100.125.0.0/16网段HTTP协议的访问,同时需要确保云服务器上80端口可返回200。部署堆栈时elb参数组中的vpcId及member参数组中的serverId需要根据实际情况填写,未正确填写会导致堆栈部署失败。负载均衡创建成功:
推荐直播
-
华为云码道 × 仓颉编程:工程化AI编码探索2026/05/27 周三 19:00-21:00
刘俊杰-华为云仓颉语言专家/李炎-华为云码道技术专家/王智鹏-OpenCangjie开源社区发起人
本场直播围绕华为云仓颉语言与华为云码道的深度结合,展示华为云智能编程从零基础到高效落地的完整生态能力。以华为云码道为引擎,仓颉语言为载体,带给大家日常提效、趣味创新到极速量产的开发体验。
回顾中
热门标签