-
>**摘要: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 工作原理 ![02.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/11/095124vcy05hyic1slrepx.png) ### 1.2 Nginx ingress 工作原理 ![01.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/11/095136rxdhyeqvlwrrbtav.png) ### 1.3 ingress 访问类型 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/14/093201jlfd3fvvg2lndzqh.png) ### 1.4 验证方式 **当前文章采用 ingress 的两种方式进行实操验证:** Nginx ingress + 负载均衡路由 + 节点访问(NodePort) →见第2章节 ELB ingress + ENI负载均衡路由 + 集群内访问(ClusterIP) →见第3章节 ## 2 Nginx ingress 方式创建ingress ### 2.1 新建无状态工作负载 Tomcat1 - 无状态工作负载-step1-工作负载基本信息 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/11035258bv3h2a41pv6jjm.png) - 无状态工作负载-step2-容器设置:开源镜像中心-tomcat ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/110610rxo4w2z1360gx6uj.png) - 无状态工作负载-step3-工作负载访问设置:节点访问 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/111128paqams8psd1ly3dg.png) - 无状态工作负载-step3-高级设置:高级设置保持默认,点击创建 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/111418wygf4dk3olwhmc6b.png) - 进入容器,设置访问界面,内容为:It is a test! ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/115206dhrgcxtdyhkjktog.png) ### 2.2 新建无状态工作负载 Tomcat2 - 按照同样的步骤新建的tomcat负载 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/1414328kkihscdgzouevcb.png) - 进入容器,设置访问界面,内容为:Test for ingress! ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/141714lhyquxptwl8eyafp.png) ### 2.3 创建ingress(IP访问) - 创建前提:安装nginx-ingress插件 安装步骤参考:https://support.huaweicloud.com/usermanual-cce/cce_01_0034.html - 进入华为云CCE控制台,进入资源管理下的网络管理界面,点击ingress ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/143027fheqs5mfmmuwxytk.png) - 添加ingress,开启“对接nginx”选项,设置转发规则如下 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/145747usdpn4itna5rc4vy.png) - 创建成功后,查看ingress ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/150042vwflyg9eus54f1bq.png) - 访问服务,进行验证 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/13/110130bhcovjnxr7xvi9qi.png) ### 2.4 创建ingress(域名访问),设置转发规则实现不同 URL 访问不同服务 **说明:2.3章节的验证为IP直接访问,当前章节以域名访问进行验证** - DNS新建两个域名并解析到 1.1.1.1 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/13/102437ss2wsycpidfhdu8k.png) **DNS配置参考:** https://support.huaweicloud.com/qs-dns/dns_qs_0002.html - 新建ingress,增加转发规则,转发规则的域名设置为上一步新建的两个域名 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/13/101218u2i904irzm47kvzj.png) - 查看ingress ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/13/103315me7cjm9vurjrhuzy.png) **注:由上图可知,增加后的ingress使用的是同一个ELB的IP进行服务访问** - 修改DNS的解析到ingress的访问IP ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/13/103634pr97mqcls3wzxj9k.png) - 访问服务,进行验证 通过域名 ingress1.xxxxxxx 只能访问到 **Test for ingress!** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/152144nmiaavajxjblfb0m.png) 通过域名 ingress2.xxxxxxx 只能访问到 **It is a test!** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/152309tnhurqd5soifsnug.png) ## 3 ELB ingress 方式创建ingress ### 3.1 创建无状态工作负载 Tomcat3 - 无状态工作负载-step1-工作负载基本信息,选择绑定弹性网卡 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/185925fhl7ioqszacpwn3v.png) - 无状态工作负载-step2-容器设置:开源镜像中心-tomcat ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/110610rxo4w2z1360gx6uj.png) - 无状态工作负载-step3-工作负载访问设置:集群内访问 ( ClusterIP ) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/190437orgn3j2h9wqvxtzo.png) - 无状态工作负载-step3-高级设置:高级设置保持默认,点击创建 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/190528zq3nylpenc4vm5ap.png) - 进入容器,设置访问界面,内容为:It is a test ENI! ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/191009hsi5cdtjxg3u6esr.png) ### 3.2 新建无状态工作负载 Tomcat4 - 按照同样的步骤新建的tomcat负载 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/191227azumehvp8rsejsnh.png) - 进入容器,设置访问界面,内容为:Test for ingress ENI! ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/191458ldfox8iqwpl3qitt.png) ### 3.3 创建ingress(IP访问) - 进入华为云CCE控制台,进入资源管理下的网络管理界面,点击ingress ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/143027fheqs5mfmmuwxytk.png) - 添加ingress,选择ENI负载均衡路由,设置转发规则如下 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/10/192407nb0l3an1q01zs4gt.png)![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/11/173510eu19jo2hfld5aklu.png) - 创建成功后,查看ingress ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/13/105639ybvb32viaxejwxxd.png) - 访问服务,进行验证 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/13/105847apgwfraiw9j4e7bo.png) ### 3.4 创建ingress(域名访问),设置转发规则实现不同 URL 访问不同服务 **说明:3.3章节的验证为IP直接访问,当前章节以域名访问进行验证** - DNS新建两个域名并解析到 1.1.1.1 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/13/110546ocspkjucruzu425w.png) **DNS配置参考:** https://support.huaweicloud.com/qs-dns/dns_qs_0002.html - 新建ingress,增加转发规则,转发规则的域名设置为上一步新建的两个域名 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/13/1113051iz87mhjzrwd99hb.png)![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/13/111336wcbzytnwfdsezke3.png) - 查看ingress ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/13/111448lqior2tpfcwvz0wu.png) **注:由以上步骤可知,增加ingress时可以选择新建ELB,使不同的ELB的转发不同的服务** - 修改DNS的解析到ingress的访问IP ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/13/111802jbu4wj27gz1ukqxm.png) - 访问服务,进行验证 通过域名 ingress3.xxxxxxx 只能访问到 **It is a test ENI!** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/12/172134zrnywrlizaamtfqm.png) 通过域名 ingress4.xxxxxxx 只能访问到 **Test for ingress ENI!** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/12/172306khyft5aj7z5sswxz.png) **说明:当前仅为演示操作,实际项目中可以根据服务的需要创建多个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配置成功
-
作者Codelabs助理上架时间 2021/10/13 15:16:51 GMT+08:00基于华为云CLI,以shell脚本模板形式集成CLI调用命令,对弹性负载均衡ELB进行管理和配置。描述基于华为云CLI,以shell脚本模板形式实现对弹性云服务器进行重装系统、切换系统以及job执行状态查询。关于华为云CLI更多使用帮助请参考用户指南。场景介绍本示例以实现切换弹性云服务器(未安装Cloud-Init)为主,同时提供密钥管理、镜像查询、弹性云服务器查询以及重装系统等相关操作,具体如下:密钥相关:创建和导入SSH密钥、删除SSH密钥、查询SSH密钥列表;镜像相关:查询公共镜像列表、查询私有镜像列表、查询可以使用的共享镜像列表;弹性云服务器相关:查询弹性云服务器、重装弹性云服务器操作系统、切换弹性云服务器操作系统、查询任务的执行状态。前提条件下载安装HCloud CLIHCloud CLI的下载安装请参考安装指南。配置(删除配置)HCloud CLI开发者在配置HCloud CLI前需先获取认证相关的信息。1.AK/SK 访问密钥请在华为云控制台“我的凭证-访问密钥”页面上创建和查看您的AK/SK。更多信息请查看访问密钥。2.region 当前可调用的区域华为云各服务应用区域和各服务的终端节点请查看地区和终端节点。3.project-id 云服务所在项目ID根据需要操作的项目所属区域选择对应的项目ID 。配置和删除配置HCloud CLI的命令如下:hcloud configure set --profile=cliProfile --project-id={project_id} --region={region} --mode=AKSK --access-key={AK} --secret-key={SK} --read-timeout=60 --connect-timeout=30hcloud configure delete --profile=cliProfile目标弹性云服务器弹性云服务器ECS购买相关的操作可参考《使用CLI便捷管理弹性云服务器ECS》模板。获取切换或重装弹性云服务器操作系统相关的参数在切换操作系统过程中需获取如下参数:serverId、imageId、adminPass(keyname、userid)。1.serverId:标服务器的ID可通过执行hcloud ECS NovaListServers --name={ecs_name} --json-filter="servers[].id | [0]"命令获取;或可通过”华为云控制台-弹性云服务器ECS“页面,选取指定ECS查看其ID。2.imageId:镜像ID可通过执行hcloud IMS GlanceListImages --__imagetype="gold" --protected=true --visibility="public" --__platform="Ubuntu" --__os_type="Linux" --__os_bit="64" --__isregistered=true --status="active" --json-filter="images[?name=='{image_name}'].id | [0]"命令获取;或可通过“华为云控制台-弹性云服务器ECS-镜像服务”页面,选取指定镜像,查看其ID。 如下所示,选取Ubuntu 18.04 server 64bit版本镜像。3.adminPass:标服务器的管理员密码。4.keyname:密钥名称。使用秘钥方式切换操作系统,则该字段为必选字段。密钥可以通过执行hcloud ECS NovaCreateKeypair --keypair.name={your key name}命令进行创建,或执行hcloud ECS NovaListKeypairs 命令查询已有的密钥。5.userid:用户ID。使用秘钥方式切换操作系统,则该字段为必选字段。在重装系统过程中需获取如下参数:serverId、adminPass(keyname、userid)。1.serverId:标服务器的ID。可通过执行hcloud ECS NovaListServers --name={ecs_name} --json-filter="servers[].id | [0]"命令获取;或可通过”华为云控制台-弹性云服务器ECS“页面,选取指定ECS查看其ID。2.adminPass:标服务器的管理员密码。3.keyname:密钥名称。使用秘钥方式切换操作系统,则该字段为必选字段。密钥可以通过执行hcloud ECS NovaCreateKeypair --keypair.name={your key name}命令进行创建,或执行hcloud ECS NovaListKeypairs 命令查询已有的密钥。4.userid:用户ID。使用秘钥方式切换操作系统,则该字段为必选字段。开发说明本模板默认使用密钥方式切换弹性云服务器操作系统,您也可参考模板中提供的使用密码方式切换弹性云服务器操作系统。使用时请根据实际需要注释或修改部分参数内容。示例代码使用如下代码管理密钥,调用前请根据实际情况修改或替换部分参数内容。# Querying SSH Key Pairs hcloud ECS NovaListKeypairs --limit=20 # Importing an SSH Key Pair hcloud ECS NovaCreateKeypair --keypair.public_key={public_key} --keypair.type="ssh" --keypair.user_id={user ID of the key} --keypair.name={key_name} # Creating an SSH Key Pair hcloud ECS NovaCreateKeypair --keypair.name={key_name} # Deleting an SSH Key Pair hcloud ECS NovaDeleteKeypair --keypair_name={key_name}使用如下代码查询镜像信息,调用前请根据实际情况修改或替换部分参数内容。# Querying Private Images hcloud IMS GlanceListImages --owner={project_id} # Querying Available shared Images hcloud IMS GlanceListImages --__imagetype="shared" --visibility="shared" --member_status="accepted" # Querying Public Images (when you don't know the image name) hcloud IMS GlanceListImages --__imagetype="gold" --visibility="public" --protected=true --json-filter="images[].{id:id,name:name,status:status}" # Querying Public Images (when you know the image name) hcloud IMS GlanceListImages --__imagetype="gold" --protected=true --visibility="public" --__platform="Ubuntu" --__os_type="Linux" --__os_bit="64" --__isregistered=true --status="active" --json-filter="images[?name=='{image_name}'].id | [0]"使用如下代码查询弹性云服务器,调用前请根据实际情况修改部分参数内容。# Querying ECSs hcloud ECS NovaListServers --name={ecs_name} --json-filter="servers[].id | [0]"使用如下代码重装弹性云服务器操作系统,调用前请根据实际情况修改部分参数内容。# Changing an ECS OS with Cloud-Init(Using a Password) hcloud ECS ChangeServerOsWithCloudInit --server_id={server_id} --os-change.imageid={image_id} --os-change.adminpass={adminpass} [--os-change.mode="withStopServer"] # Changing an ECS OS with Cloud-Init(Using a Key) hcloud ECS ChangeServerOsWithCloudInit --server_id={server_id} --os-change.imageid={image_id} --os-change.keyname={key_pair_name} --os-change.userid={user_id} [--os-change.mode="withStopServer"] # Changing an ECS OS without Cloud-Init(Using a Password) hcloud ECS ChangeServerOsWithoutCloudInit --server_id={server_id} --os-change.imageid={image_id} --os-change.adminpass={adminpass} [--os-change.mode="withStopServer"] # Changing an ECS OS without Cloud-Init(Using a Key) hcloud ECS ChangeServerOsWithoutCloudInit --server_id={server_id} --os-change.imageid={image_id} --os-change.keyname={key_pair_name} --os-change.userid={user_id} --os-change.mode="withStopServer" --json-filter=job_id使用如下代码切换弹性云服务器操作系统,调用前请根据实际情况修改部分参数内容。# Reinstalling an ECS OS with Cloud-Init(Using a Password) hcloud ECS ReinstallServerWithCloudInit --server_id={server_id} --os-reinstall.adminpass={adminpass} [--os-change.mode="withStopServer"] # Reinstalling an ECS OS with Cloud-Init(Using a Key) hcloud ECS ReinstallServerWithCloudInit --server_id={server_id} --os-reinstall.keyname={key_pair_name} --os-reinstall.userid={user_id} [--os-change.mode="withStopServer"] # Reinstalling an ECS OS without Cloud-Init(Using a Password) hcloud ECS ReinstallServerWithoutCloudInit --server_id={server_id} --os-reinstall.adminpass={adminpass} [--os-change.mode="withStopServer"] # Reinstalling an ECS OS without Cloud-Init(Using a Key) hcloud ECS ReinstallServerWithoutCloudInit --server_id={server_id} --os-reinstall.keyname={key_pair_name} --os-reinstall.userid={user_id} [--os-change.mode="withStopServer"]使用如下代码查询任务的执行状态,调用前请根据实际情况修改部分参数内容。# Querying Task Execution Status hcloud ECS ShowJob --job_id={job_id}运行示例运行时首先通过sudo ln -s CLI工具所在目录 /usr/local/bin/命令配置华为云CLI工具环境变量,或将脚本模板放置在华为云CLI工具所在目录,并在hcloud开头的相关命令前加“./”。其次,根据实际情况修改部分参数内容、或注释无关的命令,最后执行sh reinstall_or_change_an_ecs_os.sh image_name ecs_name key_pair_name user_id命令运行脚本。运行结果脚本执行成功后,控制台打印云服务器详情列表信息。{ "job_id": "ff8080xxxxxxxxxxxxxxxxxxx7453e4c", "job_type": "changeOS", "begin_time": "2021-08-17T02:08:26.430Z", "end_time": "2021-08-17T02:16:55.498Z", "status": "SUCCESS", "error_code": null, "fail_reason": null, "entities": { "server_id": "a3985dbb-xxxx-xxxx-xxxx-xxxxdab21fe0" } }参考关于华为云CLI的更多信息请参考:https://support.huaweicloud.com/productdesc-hcli/hcli_01.html
-
【背景描述】:希望通过本地电脑上安装的第三方客户端工具去连接MRS Clickhouse集群。【操作概述】:本地网络和 MRS 的网络不通,无法通过内网连接,需要借助ELB(弹性负载均衡器),具体步骤如下:【操作步骤】:操作一:创建ELB实例(1)创建ELB实例在弹性负载均衡ELB console页面,点击“购买弹性负载均衡”,进行ELB实例创建。注意:网络类型选择 公网,使用和ClickHouse相同的VPC和子网。 操作二:配置ELB实例(2)ELB上添加监听器 注意:选择默认的“加权轮询算法”即可。(3)添加后端服务器(clickhouse节点)选择clickhouse集群的core 节点:使用默认的8123端口:注:这个端口可以在clickhouse的配置文件文件中找到,默认是8123端口。健康检查异常:注:100开头的IP为弹性负载均衡服务与后端服务器通信所使用的内部IP,所属网段为100.125.0.0/16。负载均衡实例以该网段IP作为源地址,向后端服务器转发前端业务流量及健康检查探测(假设您已启用健康探测)。因此,为了保证您所配置的负载均衡实例可正常提供服务,请确保后端服务器的安全策略已放通100.125.0.0/16网段。单击任意一台后端服务器:选择安全组实例:选择“更改安全组规则”:选择“入方向规则”---“添加规则”:放通100.125.0.0/16网段:添加安全组规则后,刷新页面,ELB 后端服务器健康检查正常。操作三:测试(4)连接测试在本地通过第三方客户端管理工具连接,连接地址是ELB的公网地址,端口号默认是8123,用户名需要在manager上创建并且赋予clickhouse的权限,测试成功。
-
各位亲爱的华为云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负载均衡器。
-
学习网络规划设计 助力企业轻松上云 如今,企业上云已成为热门话题,云可以驱动流程创新和业务创新,成为企业新的利润增长点,被看成是企业实现数字化转型的必经之路。华为云网络服务可以为企业用户的云服务器、云容器、云数据库等资源构建隔离的、用户自主配置和管理的虚拟网络环境,提升用户云上资源的安全性,简化用户的网络部署。如何更好地运用云上网络,保证其安全性、可控性?云上网络规划成为重中之重。学习华为云微认证《企业上云网络规划设计》,你将提升对华为云网络规划设计能力,为企业上云助一臂之力!华为云网络服务小讲堂在使用传统数据中心时,需要管理复杂的网络装置,包括服务器机架、路由器、防火墙设备等,但是在云上可以更快地自定义服务并调节其规模,以应对不同用户的需求。在学习云上网络规划之前,我们先来了解一下华为云上部分网络服务。 VPC:虚拟私有云 是用户在华为云上申请的隔离的、私密的虚拟网络环境。 EIP:弹性公网IP 提供独立的公网IP资源,包括公网IP地址与公网出口带宽服务。 VPN:虚拟专用网络 用于在远端用户和虚拟私有云之间建立一条安全加密的公网通信隧道,当您作为远端用户需要访问VPC的业务资源时,您可以通过VPN连通VPC。 NAT网关:能够为虚拟私有云内的弹性云服务器提供网络地址转换服务,使多个弹性云服务器可以共享使用弹性IP访问Internet。 DNS:云解析服务 提供高可用,高扩展的权威DNS服务和DNS管理服务,把人们常用的域名或应用资源转换成用于计算机连接的IP地址,从而将最终用户路由到相应的应用资源上。对等连接:两个VPC之间的网络连接。终端节点:VPC终端节点能够将VPC私密地连接到终端节点服务,使VPC中的云资源无需弹性公网IP就能够访问终端节点服务。 了解了这么多云上网络服务知识,接下来我们如何规划设计云上网络呢?做完下面的实验,你就可以掌握云上网络规划设计啦!实验六步走 推开企业网络设计的大门 下面这张图就模拟了企业实际环境,我们用一个实验就能搭建好这看似复杂的一张架构图。 1、搭建本地数据中心 也就是图上的广州区域。2、配置VPN连接 实现本地数据中心跟云上环境(上海区域)互联互通。3、创建NAT网关 使得Public Subnet下面的资源能够通过SNAT规则访问互联网。而位于Private Subnet的资源则限制访问互联网。4、部署云上环境WEB业务 为图上的上海区域配置DNS内网解析并添加关于RDS内网IP地址的A记录,使得WEB业务能够通过域名访问数据库。5、配置VPC对等连接 因业务环境变化,需要在云上环境(上海区域)再次新增一个VPC,并通过VPC对等连接配置两个VPC能够互相通信。6、配置VPC终端节点内网访问OBS 如果你希望自己的本地数据中心通过VPN或者云专线以内网方式访问OBS服务,可以通过创建终端节点连接终端节点服务实现。通过上述实践,你就能快速了解华为云网络服务,提升企业业务上云后服务的安全性、可控性。想不想轻松掌握,来开启《企业云上网络规划设计》学习之旅吧,小白也能变大咖哦。 如果您是对云网络感兴趣的人员,计划上云的企业运维人员、架构师和社会大众,那么就来学习《企业云上网络规划设计》,来提升对华为云网络规划设计能力吧,点击链接,详细了解一下吧!
-
如今,随着互联网规模和消费者规模的不断扩大,企业面对着高并发请求场景下的流量冲击,尤其是每逢618或双11,会有数以亿计的用户同时访问互联网进行购物,网站访问用户的激增,会导致单服务器超负荷运行,导致网站访问卡顿或失败,严重影响用户体验,会给企业带来巨大损失。华为云负载均衡服务可以轻松帮助企业解决这个难题。弹性负载均衡(Elastic Load Balance,简称ELB)是将访问流量根据转发策略分发到后端多台服务器的流量分发控制服务。弹性负载均衡可以通过流量分发扩展应用系统对外的服务能力,同时通过消除单点故障提升应用系统的可用性。ELB支持包含TCP协议和UDP协议的四层负载均衡,也支持包含HTTP协议和HTTPS协议的七层负载均衡,其中针对HTTPS协议提供多种加密协议和加密套件,满足灵活安全的业务诉求。弹性负载均衡优势:1、 性能强悍集群支持最高1亿并发连接,满足用户的海量业务访问需求。2、 高可用通过健康检查来自动剔除后端异常主机,消除单点故障; ELB采用集群化部署,支持多可用区的同城双活容灾,无缝实时切换。3、 灵活扩展根据应用流量自动完成分发,与弹性伸缩服务无缝集成,灵活扩展用户应用的对外服务能力。4、 简单易用快速部署,实时生效,支持多种协议、多种调度算法。一、满足多种场景下的高并发、高可用要求典型应用场景场景描述应用举例高访问量业务对于业务量访问较大的业务,可以通过ELB设置相应的转发规则,将访问量均匀的分到多个后端云服务器处理;同时开启会话保持功能,保证同一个客户请求转发到同一个后端云服务器,从而提升访问效率大型门户网站,移动应用市场等横向扩张系统对于存在潮汐效应的业务,可以随时在ELB上添加和移除后端云服务器,同时可以和弹性伸缩服务结合,更好的提升业务的灵活扩展能力电商,手游,直播网站等消除单点故障对于可靠性有较高要求的业务,可以在负载均衡器上添加多个后端云服务器实例。负载均衡器会通过健康检查及时发现并屏蔽故障实例,并将流量转发到其他正常运行的后端云服务器,确保业务不中断。官网,收费业务,常用的Web业务等多可用区容灾对于可靠性和容灾有很高要求的业务,负载均衡器支持跨可用区的流量转发和容灾,即使出现某个可用区网络故障,负载均衡器仍可将流量转发到其他可用区的后端云服务器进行处理。银行业务,警务业务,大型应用系统等 二、提供完善的功能,满足不同业务差异化需求1、弹性伸缩通过将ELB的后端服务器加入到弹性伸缩组,ELB可以根据流量负载快速伸缩后端服务器数量,实现业务的弹性伸缩,基于业务的压力大小来对资源进行按需使用。2、流量调度ELB实例通过监听器检查连接请求,然后根据调度算法定义的转发策略将请求流量分发至后端服务器。ELB支持三种调度算法:轮询算法、最少连接和源IP算法。l 轮训算法:根据后端服务器的权重,按顺序依次将请求分发给不同的服务器。l 最小链接算法:通过当前活跃的连接数来估计服务器负载情况的一种动态调度算法。加权最少连接就是在最少连接数的基础上,根据服务器的不同处理能力,给每个服务器分配不同的权重,使其能够接受相应权值数的服务请求。l 源IP算法:将请求的源IP地址进行Hash运算,得到一个具体的数值,同时对后端服务器进行编号,按照运算结果将请求分发到对应编号的服务器上。3、健康检查ELB通过定期向后端ECS服务器发送请求或尝试连接来测试后端服务器运行的情况。当后端某台ECS健康检查出现异常时,ELB会自动将新的请求分发到其他健康检查正常的ECS上;而当该ECS恢复正常运行时,ELB将恢复把新的请求转发给它。4、会话保持会话保持用于保持会话的连续性和一致性,由于不同服务器之间很难做到实时同步用户访问信息,这就要求把用户的前后访问会话保持到一台后端服务器上来处理。ELB提供丰富的会话保持策略,四层协议监听器支持基于源IP的会话保持,七层协议监听器支持HTTP cookie和应用程序cookie的会话保持。5、HTTP/HTTPS高级配置1) 转发策略:支持在监听其中配置,将特定URL的请求转发到特定的后端主机组处理,适用于无法做到多机状态同步的业务场景。2) HTTPS双向认证:适用于关键业务(如银行支付),需要对通信双方的身份都做认证的场景,来确保业务安全性。3) HTTP重定向至HTTPS:实现强制以HTTPS访问网页,提升安全性。4) 配置SNI:适用于HTTPS场景下,用户应用提供多个域名供外部访问,并且每个域名都用独立证书,解决一个应用只能使用一个证书的缺点。6、访问控制ELB支持监听器级别的访问控制,业务可以根据自身需要,配置白名单或黑名单,灵活控制业务可以被访问的范围。三、提供完善的监控和日志能力ELB提供了完善的监控和七层访问日志能力,可以让企业实时且全方位的掌控自己业务的运行状态。1、ELB监控ELB提供完善的监控数据,包括并发连接数、活跃连接数、非活跃连接数、新建连接数、后端异常主机数、流入流出包速率、流入流出带宽等。针对七层监听器,ELB还提供了七层请求的相关监控数据,比如监听器前后端返回码(3××、4××、5××、2××、499等)曲线、监听器前后端响应时间曲线等,能更协助企业对ELB前后端业务的健康状态进行深入监控。2、ELB七层访问日志针对七层监听器,ELB提供了访问日志功能,企业可以根据自身需要选择开启。通过访问日志,企业可以查看到每条经过ELB的七层业务请求记录,可进行更细粒度的业务监控和分析。日志中记录了客户端IP与端口、请求体大小、前端返回码、后端业务返回码、前端响应时间、后端响应时间等信息。
-
我公司购买了弹性负载均衡和NAT网关,请问用户访问的时候是从NAT网关进入还是从负载均衡进入?
-
1 订单接口说明ManageOne中,用户通过申请订单的方式对云资源进行申请、变更、释放操作,实现对云资源生命周期的管理,订单接口具有以下特点:订单支持关联审批流程(最大支持五级审批,详情参考ManageOne用户指南),用户完成资源配置并提交后,如果审批通过,Manageone会自动完成订单实施;订单接口对云服务接口(经加固后对外开放的OpenStack接口)进行了一定程度的封装,通过调用订单接口,可以同步完成云资源的多个操作,如,申请虚拟机的同时,为虚拟机挂载数据盘,绑定弹性IP;通过订单接口申请、释放云资源时,会同步扣除、恢复租户配额,当租户配额不够时,会导致订单实施失败;订单接口只提供资源的申请,延期,变更,释放功能,不提供云服务的查询,操作(如虚拟机的开关机,列表查询等)功能,不能独立使用,需要配合云服务接口使用,也就是说,您需要通过ManageOne订单接口申请,延期,变更,释放云资源,使用云服务接口查询,操作云资源说明: 云服务接口也支持申请云资源,与使用ManageOne订单接口的区别是:通过云服务接口创建的资源,在ManageOne页面上,可以查询,操作这些资源,但不能执行变更(如扩容,减容),释放云资源的操作ManageOne中为该租户设置的配额也将不再生效(即使用云服务接口申请、释放资源,ManageOne中对应租户的配额不会变化),这也意味着,如果您不加约束,租户可以超配额申请资源2 订单接口使用场景如第1部分所述,ManageOne订单接口是在云服务接口的基础上封装得到的,包含了ManageOne自身的运营特性,例如产品、服务、区域、配额等,使用上有一定的约束,如果您希望通过调用接口实现对华为云Stack中云资源的生命周期管理,请参考以下几个场景进行评估,符合以下任何一种场景的,建议您选择使用ManageOne订单接口进行对接:如果您公司购买了并部署了华为云Stack产品,您希望通过自动化工具实现云服务资源的自动化发放,从而提高资源申请效率;如果您购买了并部署了华为云Stack产品,公司围绕IT资产的运营运维有一整套流程,您希望已有的流程平台(如ITSM、BOSS等)能够与华为云Stack进行对接,实现现有流程与云服务的整合,在简化服务的申请周期,提高应用上线效率的同时,还能够实现云资源的全流程监控;如果您是云服务提供商,将华为云Stack提供的云服务,按照租户的形式租售给了客户,客户希望实现云服务的自动化发放,需要您提供对接接口;如果您是云服务提供商,希望现有运营平台能够与华为云Stack对接,实现租户的自动化创建,并为每个租户预置指定类型的云资源,租户的日常运维由运维部门通过ManageOne进行运维。如果您购买了多家厂商的云平台,希望通过一套云管理软件进行纳管,建议您直接对接云服务接口进行对接,这样可以屏蔽ManageOne的运营特性,只关注云服务特性,对接起来更加灵活。3 对接准备订单接口参数较为复杂,建议您使用可视化工具对接口进行测试,如postman(使用前请关闭SSL证书校验),restclient等。请参考帖子:【华为云Stack ManageOne 运营侧北向对接】北向接口对接准备工作,获取接口文档,接口对接需要的IP,域名等信息本帖提供的方法,适配华为云Stack 6.5.X,8.0版本4 订单接口对接步骤我们知道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 云服务Params参数说明》。组合订购接口所需的所有参数,调用接口完成订购。下面给出通过订单接口创建、释放弹性负载均衡(ELB)的详细步骤。ELB服务仅在华为云Stack的type1(软件实现的SDN)和type2(硬件组网SDN)场景中支持,正式对接前,请咨询现场的华为云Stack服务工程师确认现场环境是否支持ELB5 申请虚拟防火墙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 6.5.X 运营面API参考.doc》sc.demo.com3查询project详情,获取该project关联的资源池信息【GET】/rest/vdc/v3.1/projects/{project_id}《ManageOne 6.5.X 运营面API参考.doc》sc.demo.com4查询可申请的产品列表【GET】/rest/product/v3.0/apply/products《ManageOne 6.5.X 运营面API参考.doc》sc.demo.com5查询云资源池可用分区【GET】/rest/serviceaccess/v3.0/available-zones《ManageOne 6.5.X 运营面API参考.doc》sc.demo.com6创建订购【POST】/rest/subscription/v3.0/subscriptions《ManageOne 6.5.X 运营面API参考.doc》《ManageOne 6.5.x 云服务Params参数说明》sc.demo.com7查询订单详情【GET】/rest/order/v3.0/orders/{order_id}《ManageOne 6.5.X 运营面API参考.doc》sc.demo.com8获取弹性IP列表/v2.0/floatingips《华为云Stack 6.5.X API参考.chm》>网络>EIP>弹性IPvpc.sa-fb-1.demo.com9获取外部网关(可选)/v2.0/networks《华为云Stack 6.5.X API参考.chm》>网络>VPC>VPCvpc.sa-fb-1.demo.com10获取VPC信息/v2.0/routers《华为云Stack 6.5.X API参考.chm》>网络>VPC>VPCvpc.sa-fb-1.demo.com11获取端口列表/v2.0/ports《华为云Stack 6.5.X API参考.chm》>网络>VPC>VPCvpc.sa-fb-1.demo.com12获取子网详情/v2.0/subnets/{subnet-id}《华为云Stack 6.5.X API参考.chm》>网络>VPC>VPCvpc.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": "2019-09-09T07:38:55.643000Z", "methods": [ "password" ], "catalog": [], "roles": [ ...... ], "project": { "domain": { "name": "xssvdc", "id": "15488ac7aec547a68d9451c91173c68c" }, "name": "xssvdc", "id": "27a008f1b83e4dfdbf1143dd336006df" }, "issued_at": "2019-09-08T07:38:55.643000Z", "user": { "domain": { "name": "xssvdc", "id": "15488ac7aec547a68d9451c91173c68c" }, "name": "xssvdc", "id": "b54310fb838b4f8ebf1e9d23bf9691d5" //用户Id } } }从响应头中我们可以获得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": [ { "domain_id": "15488ac7aec547a68d9451c91173c68c", "tenant_id": "39d881e6-e6a6-4516-8d8e-83446abc263b", "role_name": null, "tenant_name": "tt002", "regions": [ { "region_status": "normal", "region_id": "dg-tky-1", "region_name": { "en_us": "东莞", "zh_cn": "东莞" } } ], "level": "2", "role_id": null, "name": "pj002", "iam_project_name": "pj002", "description": null, "id": "4313bc0e240e4086995e606f6601b730", "enabled": true } ] }步骤 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": "15488ac7aec547a68d9451c91173c68c", "tenant_id": "d58cc7b4-59a8-49ff-8f0c-0c7dff90b5e9", "tenant_name": "xssvdc", "regions": [ { "region_status": "normal", "cloud_infras": [ { "cloud_infra_status": "normal", "cloud_infra_name": "OpenStack_dg-tky-1", "cloud_infra_type": "FUSION_CLOUD", "azs": [ { "az_status": "normal", "az_name": "华为", "az_id": "az0.dc0" } ], "cloud_infra_id": "FUSION_CLOUD_dg-tky-1" } ], "region_id": "dg-tky-1", "region_name": { "en_us": "东莞", "zh_cn": "东莞" } } ], "is_shared": false, "name": "xssvdc", "tenant_type": "vdc", "region_name": null, "id": "27a008f1b83e4dfdbf1143dd336006df", "enabled": true } }此处我们可以获得region_id、cloud_infra_id、az_id,需要注意的是,创建资源时指定的AZ必须与cloud_infra_id、region_id匹配,不能交叉混用!!!步骤4 查询产品列表不同的云服务在ManageOne中体现为对外提供不同的产品,查询时需要指定产品类型(service_type),常用类型有:service_type云服务名称ecs弹性云服务器evs云硬盘ims镜像服务vpc虚拟私有云vfw虚拟防火墙elb弹性负载均衡as弹性伸缩bms裸金属服务调用示例如下:URL: https://{ManageOne运营侧API对外域名}/rest/product/v3.0/apply/products?service_type={ecs,evs,ims,vpc,vfw,elb,as,bms}®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= 请求体:无 响应体(本示例为查询ecs,请结合实际情况,选择需要查询的产品类别): { "total": 1, "products": [ { "product_id": "71347fb04fed43b5bb1eea9527f845ae", "service_type": "ecs", "create_vdc_id": "all", "create_user_id": "138539a4c8604121be05c1f932e947fe", "icon_id": "defaulticonecs", "catalog_id": "1", "region_id": "dg-tky-1", "params": "{}", "name": "{\"en_US\":\"ECS\",\"zh_CN\":\"弹性云服务器\"}", "description": "{\"zh_CN\": \"由CPU、内存、磁盘等组成的随时可获取、弹性可扩展、按需使用的虚拟的计算服务器。\",\"en_US\": \"Provides scalable virtual compute servers consisting of CPUs, memory, and disks resources.\"}", "create_time": 1560197802000, "publish_status": "publish", "deletable_status": "normal", "is_default": true, "resource_pool_id": "", "project_id": "", "az_id": "", "secret_params": null, "product_type": null } ] }响应体中,is_default字段值为true的产品表示,该产品为系统预置产品,没有关联人和审批流程,申请该产品后,不需要经过任何审批流程,直接对订单进行实施步骤 5 查询弹性IP(可选)一般的,ELB通过弹性IP对外提供应用的访问入口,故而我们在申请ELB时,通常会为ELB绑定一个弹性IP,这里给出弹性IP的查询方法,示例如下:URL: https://{vpc对外访问域名}/v2.0/floatingips 请求方法:GET 请求头: Content-Type: application/json;charset=UTF-8 Accept: application/json;charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "floatingips": [ { "fixed_ip_address": "", "floating_ip_address": "8.0.0.11", "floating_network_id": "6c136cc7-3e0b-457e-9316-1a9970e639e2", "id": "046fa5d9-bf50-460c-9ba2-3d069ff5ee4a", "port_id": "", "router_id": "77b15706-4a9e-4e06-b8ce-0b4fea07af3c", "status": "ACTIVE", "tenant_id": "4ffcfaa890994422b23ed46bb98e8df6", "created_at": "2018-12-16T23:47:30", "updated_at": "2018-12-17T00:01:52" } ] }注意,只有port_id、fixed_ip_address的值为空的弹性IP才是没有被使用的,我们需要获取处于这种状态的弹性IP步骤6 查询外部网关列表(可选)如果环境中没有可用的弹性IP,您也可以直接在申请ELB的同时申请一个弹性IP,并绑定到ELB上,申请弹性IP需要指定外部网络,这里给出查询方法,如下:URL: https://{vpc对外访问域名}/v2.0/networks?router:external=True&tags=service_type=Internet 请求方法:GET 请求头: Content-Type: application/json;charset=UTF-8 Accept: application/json;charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "networks": [ { "provider:physical_network": "physnet1", "ipv6_address_scope": null, "port_security_enabled": true, "mtu": 1500, "id": "cfd58c32-eb48-4fe4-8744-749940b73b72", "router:external": true, "availability_zone_hints": [], "availability_zones": [ "nova" ], "provider:segmentation_id": 210, "ipv4_address_scope": null, "shared": true, "project_id": "a3f457bbf1054e27a59804f4050f24e1", "status": "ACTIVE", "subnets": [ "39385d8e-0d67-4ecc-a1f0-1db294c3f21f" ], "description": "", "tags": [ "group=group1", "service_type=Internet", "az=az0.dc0", "location=DG:localcloud", "name=exNet_02" ], "updated_at": "2019-06-11T01:24:17", "is_default": false, "qos_policy_id": null, "name": "ext_net02", "admin_state_up": true, "tenant_id": "a3f457bbf1054e27a59804f4050f24e1", "created_at": "2019-06-11T01:24:17", "provider:network_type": "vlan" } ] }步骤7 查询VPC列表ELB需要占用VPC子网下一个私有IP,该子网与后端云服务器使用的子网相同,以便ELB能够监测云服务器状态进行调度,下面给出查询VPC的方式URL: https://{vpc对外访问域名}/v2.0/routers 请求方法:GET 请求头: Content-Type: application/json;charset=UTF-8 Accept: application/json;charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "routers": [ { "id": "7a172056-73be-4247-9f78-aaa5bed573d0", "name": "vpc-5e10", "status": "ACTIVE", "description": "{\"product_id\":\"04e12eba75e243368f5cb6a0f52db4af\",\"tenancy\":\"0\",\"region_id\":\"dg-tky-1\",\"order_id\":\"20190611015342195818052\",\"status\":\"normal\"}", "tenant_id": "27a008f1b83e4dfdbf1143dd336006df", "admin_state_up": true, "routes": [], "created_at": "2019-06-11T01:53:44", "updated_at": "2019-06-11T01:53:44", "project_id": "27a008f1b83e4dfdbf1143dd336006df" } ] }router的id即为VPC Id步骤 8 查询VPC子网列表获取到VPC Id后,我们需要查询出该VPC下的子网列表,方法如下:URL: https://{vpc对外访问域名}/v2.0/ports?device_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= 请求体:无 响应体: { "ports": [ { "id": "f8e20436-6ee3-4d8d-860d-cf6607acff21", "name": "6df75f53-9a47-4c9d-b882-7c36f38c39eb", "status": "DOWN", "description": "", "admin_state_up": true, "fixed_ips": [ { "subnet_id": "6df75f53-9a47-4c9d-b882-7c36f38c39eb", "ip_address": "192.168.10.24" } ], ...... } ] }subnet_id的值即为子网id步骤 9 查询子网详情(可选)根据获得的subnet_id,查询子网详情,以便了解该子网的网络配置信息,如网关、可用的IP池,示例如下:URL: https://{vpc对外访问域名}/v2.0/subnets/{subnet_id}(subnet_id由上一步查询获得) 请求方法:GET 请求头: Content-Type: application/json;charset=UTF-8 Accept: application/json;charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "subnet": { "name": "subnet-5e10", "cidr": "192.168.10.0/24", "id": "6df75f53-9a47-4c9d-b882-7c36f38c39eb", "description": "", "enable_dhcp": true, "network_id": "243e425b-daae-43f2-8b35-8803e163b487", "tenant_id": "27a008f1b83e4dfdbf1143dd336006df", "dns_nameservers": [ "160.102.8.53", "160.102.8.54" ], "allocation_pools": [ { "start": "192.168.10.1", "end": "192.168.10.254" } ], "host_routes": [], "ip_version": 4, "gateway_ip": null, "created_at": "2019-06-11T01:53:46", "updated_at": "2019-06-11T01:53:46", "project_id": "27a008f1b83e4dfdbf1143dd336006df" } }至此,我们获得了创建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。仅支持内网类型。参考步骤7、8、9listenersList<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时不必传此参数。参考参考步骤6external_net_idString否-外部网络ID。参考步骤6subnet_idString是-EIP所属外部网络子网ID。新创建EIP时此参数必选,使用已有EIP时不必传此参数。参考步骤6port_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": [{ "region_id": "cn-sz-1", "service_type": "elb", "project_id": "c898048bfcd640cda49f5090eb82566f", "product_id": "a177114dbf394016a921f6d85327acaf", "operate_type": "apply", "tenancy": 0, "params": "{\"publicip\": {\"subnet_id\": \"2c512223-4215-4835-8b68-dead1eac37ce\", \"type\": \"eip_externel_network\", \"profile\": {\"regionId\": \"\", \"user_id\": \"c2c6738f0af64a5494b831fa5b4580d9\", \"product_id\": \"\"}, \"ip_address\": \"\"}, \"count\": 1, \"bandwidth\": {\"description\": \"test_elb", \"name\": \"bandwidth-r19f\", \"share_type\": \"PER\", \"size\": 1}, \"display\": {\"en_US\": [{\"type\": \"string\", \"value\": \"test\", \"label\": \"Region\"}], \"zh_CN\": []}, \"loadbalancer\": {\"vip_subnet_id\": \"0128a69a-ea62-4875-9890-fdad2f81f482\", \"tenant_id\": \"c2c6738f0af64a5494b831fa5b4580d9\", \"admin_state_up\": true, \"name\": \"elb-3wcq\", \"description\": \"elb_description\"}}" }] } 响应体: { "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 }6 删除ELB删除ELB,我们需要指定ELB的Id,所属的区域,AZ等信息,步骤如下:步骤 1 获取token参考第5章 步骤1即可步骤2 查询区域列表参考 第5章 步骤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上数据展示异常
-
尊敬的华为云客户:华为云ELB服务计划于2019/11/18-2019/11/20在华东-上海二进行升级,升级详情如下:升级时间影响区域影响服务升级影响2019/11/18 00:00-01:00(北京时间)华东-上海二 可用区3ELB升级过程中ELB服务长连接业务将会出现1~2次闪断重连,每次闪断小于1秒华东-上海二 可用区12019/11/19 00:00-01:00(北京时间)华东-上海二 可用区3华东-上海二 可用区12019/11/20 00:00-01:00(北京时间)华东-上海二 可用区1如您有不中断传输的操作需求,请您避开升级时间段。给您带来的不便,敬请谅解。感谢您对华为云的支持!
推荐直播
-
TinyEngine低代码引擎系列第2讲——向下扎根,向上生长,TinyEngine灵活构建个性化低代码平台
2024/11/14 周四 16:00-18:00
王老师 华为云前端开发工程师,TinyEngine开源负责人
王老师将从TinyEngine 的灵活定制能力出发,带大家了解隐藏在低代码背后的潜在挑战及突破思路,通过实践及运用,帮助大家贴近面向未来低代码产品。
即将直播 -
华为云AI入门课:AI发展趋势与华为愿景
2024/11/18 周一 18:20-20:20
Alex 华为云学堂技术讲师
本期直播旨在帮助开发者熟悉理解AI技术概念,AI发展趋势,AI实用化前景,了解熟悉未来主要技术栈,当前发展瓶颈等行业化知识。帮助开发者在AI领域快速构建知识体系,构建职业竞争力。
去报名 -
华为云软件开发生产线(CodeArts)10月新特性解读
2024/11/19 周二 19:00-20:00
苏柏亚培 华为云高级产品经理
不知道产品的最新特性?没法和产品团队建立直接的沟通?本期直播产品经理将为您解读华为云软件开发生产线10月发布的新特性,并在直播过程中为您答疑解惑。
去报名
热门标签