• [互动交流] 已经给子用户授权过,但点击云容器cce资源组,同意cpts后提示开通服务失败
  • [技术干货] 解构HE2E中的Kubernetes技术应用[转载]
    链接:https://bbs.huaweicloud.com/blogs/352564在《解构 H E2E 中的容器技术应用》 一文当中,为大家分析了HE2E项目的代码仓库、编译构建、部署等各环节中对于容器技术的应用。今天,我们将从Kubernetes技术应用的角度解构华为云 DevCloud HE2E D evOps 实践 。什么是Kubernetes?Kubernetes (也称K8S)是用于自动部署,扩展和管理容器化应用程序的开源系统。K8S与CCE在上一篇文章中,大家已经了解了HE2E项目中通过Docker实现容器化部署,在该实践中通过此方式部署至ECS弹性云服务器中,并称之为ECS部署。在该实践中,提供了另外一套部署方式,将应用部署至CCE集群当中,即CCE部署,使用的工具即K8S。总之,根据部署目标的不同,HE2E实践中分别介绍了ECS部署与CCE部署。根据部署采用的技术工具不同,也可以将这两种方式称为Docker部署与K8S部署。为什么选择K8S在正式的生产环境中,企业和团队往往会需要将应用部署至多个服务器主机,而CCE集群和K8S则共同为应用的部署、运行及管理提供了保障。相较而言,HE2E实践中介绍的ECS部署方式更倾向于开发、测试等环境下的单机部署。K8S的代码配置回到项目本身,代码仓库中的./kompose/文件夹下有多个yaml文件。可以看出,每个服务都有两个配置文件(*-deployment.yaml与*-service.yaml)共同进行配置。此处以db-deployment.yaml为例,对yaml配置仅作简短的介绍,帮助大家理解配置内容。随着集群版本和产品能力的更迭,也有很多配置信息将发生变化。所以在实践当中,需要调整 yaml 文件配置 。• apiVersion:此处值为apps/v1,这个版本号需要根据安装的K8S版本和资源类型进行变化。目前实践中对应v1.19版本的K8S集群。• kind:此处创建的是Deployment,根据实际情况,此处资源类型可以是Pod、Job、Ingress、Service等。如:在*-service.yaml文件中,创建的资源类型则是Service。• metadata:包含Deployment的一些meta信息。其中,annotations的含义是注解。• spec:你所期望的该对象的状态。包括replicas、selector、containers等Kubernetes需要的参数。其中,containers定义了该deployment使用的镜像:docker-server/docker-org/postgres:9.4。在上篇文章中提到过,这里的docker-server、docker-org都会在构建任务中替换为实际镜像对应的镜像地址和组织。strategy、restartPolicy等字段共同构成了容器失败时重启的策略。在*-service.yaml当中,主体内容与*-deployment.yaml相差也不算大,主要差异集中于spec这部分。*-service.yaml对应的spec主要是定义了集群内访问的方式,使各个服务之间可以互相访问。可以看出,*-deployment.yaml 与*-service.yaml共同定义了一个服务*。*-deployment.yaml主要定义了该服务的镜像源,或者说工作负载是什么。而*-service.yaml则定义了该服务访问方式。K8S的部署配置在编译构建环节,主体还是制作镜像上传到SWR镜像仓库,与上篇文章的没有区别。相关的配置文件也通过构建任务上传到软件发布库了,所以这里就不赘述了。镜像、配置和集群资源都准备妥当以后,就是使用K8S部署的环节了。代理机配置我们在HE2E实践中采用的是代理机的部署方式,将集群中的一个节点作为代理机进行授信、部署。所以在实践中我们从集群下载Kubectl配置文件并配置到节点主机当中(见《配置 Kubectl 》)。通过配置Kubectl的操作,我们就可以在节点主机上执行命令进而影响整个CCE集群。CCE部署任务HE2E实践中,phoenix-cd-cce是我们所需执行的部署任务。该任务将配置文件传输到目标主机,即代理机、集群节点。而后,通过执行shell命令启动Kubenetes。kubectl delete secret regcredkubectl create secret docker-registry regcred --docker-server=${docker-server} --docker-username=${docker-username} --docker-password=${docker-password} --docker-email=***@***.cn kubectl delete -f /root/phoenix-sample-deploy/kompose/kubectl apply -f /root/phoenix-sample-deploy/kompose/• 这里先是删除原有的secret,这一步主要是为了防止由于使用临时登录命令变化而导致secret错误引发的任务执行失败。• 接着,创建新的secret。包含docker-server、docker-username、docker-password等信息。• 按配置文件(/root/phoenix-sample-deploy/kompose/)删除资源。• 按配置文件(/root/phoenix-sample-deploy/kompose/)对资源进行配置。成功执行该部署任务后,可以在CCE集群中看到五个工作负载已经处于“运行中”的状态。不过目前还需要设置“节点访问”才能正常访问。所以在后续实践中对工作负载vote和result手动添加访问方式。节点访问设置完毕后,即可访问项目的用户端与管理端了。K8S的模板部署方式理论上,讲到现在,HE2E实践中的K8S部署就已经讲完了。但是,笔者猜到,肯定有很多人不喜欢这种通过代理机部署集群的方式。不过没关系,下面我就来介绍DevCloud当中的Kubernetes模板部署。新建模板时,现在可以选择模板:Kubernetes部署。进入模板以后,可以选择集群类型、区域、命名空间、部署方式等信息。由于本项目通过10个yaml文件共同配置,所以需要添加相同的“Kubernetes部署”步骤共计10个,每个步骤都对应一个yaml文件。而由于我们在代码仓库中的配置并非我们最终部署时所需的配置(经过编译构建修改docker-server等参数),所以我们需要每个步骤都设置软件发布库中对应的yaml文件。此时,我们会发现,我们原本的构建任务是将所有yaml文件进行了打包压缩后才上传的,没有办法直接选中。所以,我们可以再次创建一个构建任务或者在原有构建任务上进行修改,以使软件发布库中存放有所有的yaml文件。构建任务上传步骤的配置参考:(上传所有yaml文件而非打包后上传)完成以上配置以后,执行Kubernetes部署模板任务,即可将服务部署至选定的CCE集群当中。此时再添加节点访问方式即可访问用户端与管理端。当然,我们也可以将节点访问也写入yaml文件中,实现进一步的一键部署。这里就暂且留作一个小思考题,感兴趣的小伙伴可以自己尝试一下,将节点访问写入yaml当中。结语本篇文章一面介绍了HE2E实践中的CCE部署方式,一面又介绍了该实践中未提到的Kubernetes模板部署。两者的主要区别是“CCE部署”是通过代理机控制集群进行K8S部署;Kubernetes模板部署则是直接在集群中部署。此外,本文也对项目中关于K8S的配置进行了一定程度的解析。希望可以帮助小伙伴们理解K8S、HE2E,祝大家在技术成长的道路上越走越远。感谢小伙伴们的阅读。如果觉得还不错,不妨点个赞再走~此文由DevSecOps专家服务团队出品,前往 专家服务 ,获取更多DevSecOps工程方法、工具平台、最佳实践等干货。
  • [技术干货] 华为云云容器引擎CCE使用入门【与云原生的故事】【转载】
    一、创建Kubernetes集群1、创建集群1.1、登录CCE控制台https://console.huaweicloud.com/cce/1.2、创建CCE集群登录CCE控制台后会看见一个引导页面,请在CCE集群下单击“创建”按钮。1.3、配置集群参数参数说明如下:参数参数说明集群名称新建集群的名称。集群名称长度范围为4-128个字符,以小写字母开头,由小写字母、数字、中划线(-)组成,且不能以中划线(-)结尾。集群版本集群版本。建议选择最新的版本,对应Kubernetes社区基线版本。集群规模当前集群可以管理的最大Node节点规模。若选择50节点,表示当前集群最多可管理50个Node节点。高可用默认选择“是”。网络模型默认即可。虚拟私有云新建集群所在的虚拟私有云。若没有可选虚拟私有云,单击“新建虚拟私有云”进行创建,完成创建后单击刷新按钮。容器网段按默认配置即可。服务网段按默认配置即可。1.4、提交在右侧界面中会显示集群的资源清单,选择计费模式后,单击“提交”按钮,等待集群创建成功。创建成功后在集群管理下会显示一个运行中的集群,且集群节点数量为0。2、创建节点集群创建成功后,您还需要在集群中创建运行工作负载的节点。2.1、参数配置登录CCE控制台,单击创建的集群,进入集群控制台,在左侧菜单栏选择节点管理,单击右上角“创建节点”,在弹出的页面中配置节点的参数。参数说明如下:参数参数说明计算配置可用区默认即可。节点类型选择“虚拟机节点”。节点规格根据业务需求选择相应的节点规格。操作系统请选择节点对应的操作系统。节点名称自定义节点名称。登录方式支持密码和密钥对两种方式“密码”方式:用户名默认为“root”,请输入登录节点的密码,并确认密码。“密钥对”方式:在选项框中选择用于登录本节点的密钥对,并单击勾选确认信息。密钥对用于远程登录节点时的身份认证。若没有密钥对,可单击选项框右侧的“创建密钥对”来新建。存储配置系统盘按您的业务需求选择,缺省值为50GB。数据盘按您的业务需求选择,缺省值为100GB。网络配置虚拟私有云使用默认,即创建集群时选择的子网。节点子网选择节点所在的子网。2.2、规格确认在页面最下方选择节点的数量和计费模式,单击“下一步: 规格确认”。2.3、提交查看节点规格无误后,阅读页面上的使用说明,勾选“我已阅读并知晓上述使用说明”,单击“提交”按钮,等待节点创建成功,创建成功后在节点管理下会显示一个运行中的节点。二、镜像创建无状态工作负载(Nginx)1、前提条件您需要创建一个至少包含一个节点的集群,且该节点已绑定弹性公网IP,集群是运行工作负载的逻辑分组,包含一组云服务器资源,每台云服务器即集群中的一个节点。2、Nginx应用概述Nginx是一款轻量级的Web服务器,您可通过CCE快速搭建nginx web服务器。博主这里以选择“开源镜像中心”的方式创建应用为例,来创建一个Nginx工作负载。3、操作步骤3.1、镜像创建登录CCE控制台,单击集群进入集群控制台,在左侧菜单栏选择“工作负载”,单击右上角“镜像创建”。3.2、参数配置填写以下参数,其它保持默认。(1)基本参数配置参数参数说明负载类型选择无状态负载。负载名称nginx。实例数量设置为1。容器配置在基本信息中单击“选择镜像”,在弹出的窗口中选择“镜像中心”,并搜索“nginx”,选择nginx镜像。(2)服务配置单击服务配置下的加号,创建服务(Service),用于从外部访问负载,配置参数如下:参数参数说明Service名称输入应用发布的可被外部访问的名称,设置为:nginx。访问类型选择“负载均衡 ( LoadBalancer )”。服务亲和保持默认。负载均衡器如果已有负载均衡(ELB)实例,可以选择已有ELB,如果没有可单击“创建负载均衡器”,在ELB控制台创建一个公网类型负载均衡器。端口配置对外协议:TCP。服务端口:设置为8080,该端口号将映射到容器端口。容器端口:容器中应用启动监听的端口,nginx镜像请设置为80,其他应用容器端口和应用本身的端口一致。3.3、创建工作负载单击右下角“创建工作负载”,等待工作负载创建成功。创建成功后在无状态负载下会显示一个运行中的工作负载。4、访问Nginx(1)获取Nginx的外部访问地址单击Nginx工作负载名称,进入工作负载详情页。在访问方式页签下可以看到nginx的IP地址,其中负载均衡IP就是外部访问地址,如图所示:(2)在浏览器中输入“外部访问地址”,即可成功访问应用,如下图所示:【与云原生的故事】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/345260链接:https://bbs.huaweicloud.com/blogs/351622
  • [技术干货] 智慧园区数字平台如何获取接口所需access-token值
    调用资产前需要先调用该接口,获取access-token值。注意事项无。基本信息接口名称token接口路径/baas/auth/v1.0/oauth2/token接口协议HTTPS接口方法POST请求参数请求参数如表1所示。表1 请求参数说明参数名称类型必选(M)/可选(O)参数位置参数含义Content-TypeStringMHeadersHTTP协议中设定的一个参数,用于标识返回的内容用什么格式去解析。取值为:“application/x-www-form-urlencoded”,表示urlencode格式。说明:当前使用的是OAuth 2.0的客户端鉴权模式获取用户access_token,由于不需要access-token认证,所以Header中只需要设置“Content-Type”为“application/x-www-form-urlencoded”即可,即需要将Body中的请求消息体参数以www-form-urlencoded格式传入。grant_typeStringMBody类型。取值:client_credentialsclient_idStringMBody客户端id,可在OAuth查看,参考创建OAuth。例如:08b357*****7af28d1client_secretStringMBody客户端密钥,可在OAuth查看,参考创建OAuth。例如:3c4e95*****4a5blocaleStringOBody语言。例如:en_US创建OAuthclient_id和client_secret获取方式如下:创建权限配置信息。管理员账号登录AppCube平台。依次选择“管理 > 用户管理 > 权限配置”,单击“新建”,新建权限配置。填写权限配置名称,如“test”,单击“保存”,创建完毕。自定义编辑步骤1创建的权限配置信息。单击选择步骤1创建的权限配置名称,进入权限配置详情页面。单击右上角编辑按钮,勾选需要调用的API对应的业务权限凭证,如图1所示信息。图1 权限配置详情创建用户。获取AppCube鉴权信息之前,先要创建用户,为用户配置OAuth权限。依次选择“管理 > 用户管理 > 用户”,进入用户列表页面。单击“新建”,输入用户信息,选择用户权限为步骤1创建的权限配置名称,如下图所示。单击“保存”,用户创建完成。获取AppCube的鉴权信息。依次选择“管理 > 系统管理 > OAuth”菜单。单击“新建”,输入名称,选择上个步骤创建的用户,并单击“保存”。系统会自动生成客户端ID和客户端密钥。每个OAuth都有特定的用途,因此需要为AppCube鉴权信息单独新建一个OAuth。单击,下载excel文件,从中获取client_id和client_secret。响应样例{ "access_token": "0000000000***********jbd0qVnm6qhfGBnaEwbMU=", "expires_in": 3600, "token_type": "Bearer" }
  • [技术干货] FusionAccess桌面云解决方案介绍导图
    见附件
  • [互动交流] CCE VPC网络下需要安装calico等网络插件吗?
    我在节点下没有发现网络插件的Pod,那容器之间是怎么通信的?
  • [云实验室] 基于CCE进行云原生应用部署与运维管理_步骤
    应该没有问题,此贴删除
  • [技术干货] 基于sermant 实现dubbo 接入CSE,并实现流量分发
    1、获取Dubbo demo 并打包镜像1.1、Demo GitHub地址:cid:link_0软件包目录软件包名称说明/demo-registry-dubbo/dubbo-provider/dubbo-provider.jar消费者/demo-registry-dubbo/dubbo-consumer/dubbo-consumer.jar生产者1.2、当前文档使用Codehub 存储代码代码上传codehub 指导链接:cid:link_3 1.3、修改 dubbo-consumer 以及 dubbo-provider 下的 /src/main/resources/application.yaml中的address 为 sc://127.0.0.1:30100 如下所示:server: port: 28020 dubbo: application: name: dubbo-consumer protocol: port: 28820 registry: # 模拟存量dubbo应用注册到nacos的情况,新开发的应用建议配置为 sc://127.0.0.1:30100 # address: nacos://127.0.0.1:8848 address: sc://127.0.0.1:301001.4、当前文档基于华为云 Devcloud 进行编译构建dubbo-provider Dockerfile 文件FROM openjdk:8u181-jdk-alpine WORKDIR /opt/provider COPY target/*.jar /opt/provider/provider.jar ENTRYPOINT ["java","-jar","/opt/provider/provider.jar"]dubbo-consumer Dockerfile 文件FROM openjdk:8u181-jdk-alpine WORKDIR /opt/consumer COPY target/*.jar /opt/consumer/consumer.jar ENTRYPOINT ["java","-jar","/opt/consumer/consumer.jar"]1.5、编译构建指导maven 编译构建指导链接:cid:link_6镜像构建推送到华为云SWR指导链接:cid:link_41.6、修改 dubbo-provider 下/src/main/java/com/huawei/dubbotest/impl/TestInterfaceImpl.java ,修改响应参数,如下所示: /** * 测试接口 * * @return 测试信息 */ @Override public Map test() { Map map = new HashMap<>(); // map.put("provider-dubbo-registry-address", registryConfig.getAddress()); # 修改 map.put map.put("灰度测试", "dubbo-provider:v2.0"); return map; } }1.7、重新打包dubbo-provider v2.0镜像,所有打包好的镜像版本如下dubbo-provider:v1.0dubbo-provider:v2.0dubbo-consumer:v1.02、创建华为云CSE2.1、说明:1、当前仅华为云上海一 Region 支持serment 接入CSE2、VPC 需要与后续创建的 CCE 相同2.2、CSE 创建指南链接:cid:link_72.3、获取CSE注册中心以及配置中心地址3、创建华为云CCE3.1、说明:1、创建Region 华为云上海一2、VPC 需要与 CSE相同3、CCE节点1个 4核8G 服务器即可3.2、CCE创建指南链接:cid:link_54、CCE基于模板安装sermant injection4.1、sermant injection 模板下载链接链接:cid:link_14.2、上传至CCE模板4.3、基于CCE节点安装 kubectl 客户端链接:cid:link_24.4、在已安装 kubectl 的节点上申请Sermant Injector https证书wget -O- https://cse-bucket-cn-east-3.obs.cn-east-3.myhuaweicloud.com/javaagent/certificate.sh | sh4.5、获取K8s 集群证书kubectl config view --raw --minify --flatten -o jsonpath='{.clusters[].cluster.certificate-authority-data}'4.6、使用模板安装 sermant-injection1、CCE 控制台进入集群模板管理点击sermant injection的安装按钮 2、输入实例名称,配制yaml文件并安装,yaml内容如下:agent: image: version: 0.5.1 cse: config: # CSE配置中心地址,输入2.3中获取的地址 endpoints: https://192.168.0.xx:30110,https://192.168.0.xx:30110 registry: # CSE注册中心地址,输入2.3中获取的地址 endpoints: https://192.168.0.xxx:30100,https://192.168.0.xx:30100 image: pullPolicy: IfNotPresent # CCE所在的region,cn-east-3(华东-上海一) region: cn-east-3 injector: image: pullSecrets: default-secret version: 0.5.1 # injector实例数,若CCE集群只有一个节点,则需配置为1 replicas: 2 webhooks: # K8s集群证书,输入4.5中获取到的证书内容 caBundle: xxxxxx==5、部署应用5.1、部署dubbo-consumerapiVersion: apps/v1 kind: Deployment metadata: labels: version: v1 name: consumer spec: selector: matchLabels: app: consumer version: v1 template: metadata: labels: app: consumer version: v1 sermant-injection: enabled spec: containers: - image: '输入 dubbo-consumer v1.0 SWR的镜像地址' name: container-0 imagePullSecrets: - name: default-secret terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst replicas: 15.2、部署 dubbo-provider v1.0apiVersion: apps/v1 kind: Deployment metadata: labels: version: v1 name: provider spec: selector: matchLabels: app: provider version: v1 template: metadata: labels: app: provider version: v1 sermant-injection: enabled spec: containers: - image: '输入 dubbo-provider V1.0 SWR的镜像地址' name: container-0 imagePullSecrets: - name: default-secret terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst replicas: 15.3、部署 dubbo-provider v2.0apiVersion: apps/v1 kind: Deployment metadata: labels: version: v1 name: provider-v101 spec: selector: matchLabels: app: provider-v101 version: v1 template: metadata: labels: app: provider-v101 version: v1 sermant-injection: enabled spec: containers: - image: '输入 dubbo-provider V2.0 SWR的镜像地址' name: container-0 env: # 指定微服务版本号为 1.0.1 ,不指定时默认为 1.0.0 - name: SERVICE_META_VERSION value: 1.0.1 # 指定微服务所属应用为 default,不指定时默认为default - name: SERVICE_META_APPLICATION value: default imagePullSecrets: - name: default-secret terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst replicas: 15.4 为dubbo-consumer 添加service,提供对外访问方式apiVersion: v1 kind: Service metadata: name: '' labels: app: consumer namespace: default spec: selector: app: consumer externalTrafficPolicy: Cluster ports: - name: cce-service-0 targetPort: 28020 nodePort: 0 port: 28020 protocol: TCP type: NodePort6、访问验证6.1、获取访问方式,http://节点ip:30740 6.2、http://节点ip:30740/test 进行服务访问 7、查看微服务的注册情况7.1、dubbo-consumer 注册情况 7.2、dubbo-provider v1.0 注册情况 7.3、dubbo-provider v2.0 注册情况 8、添加路由规则实现,流量控制8.1、在CSE控制台配置管理点击新建配制配置项:servicecomb.routeRule.{微服务名称}配置范围:应用级配置应用:按应用和环境实际情况填写,默认为:default <空>配置格式: yaml配置内容如下:--- - precedence: 2 route: - weight: 10 tags: version: 1.0.0 - weight: 90 tags: version: 1.0.18.2、通过脚本访问服务,并统计 provider v1.0 请求次数占比 10% , provider v2.0 请求次数占比 90%;与设置的规则相匹配8.3、python脚本内容import requests import threading import time list= [] class postrequests(): def __init__(self): # 需要修改连接 self.url = 'http://{服务器ip}:{端口}/test' # 请求链接 # self.data = {'phone': '176*****286', 'code': '12***6'} # 传递参数 # self.headers = {'content-type': 'application/json'} # 请求头 # self.data = json.dumps(self.data) def post(self): try: # r = requests.post(self.url, self.data, headers=self.headers) r = requests.get(self.url) # print(r.text) list.append(r.text) except Exception as e: print(e) def kquan_bf(): login = postrequests() return login.post() try: i = 0 # 开启线程数目 tasks_number = 100 print('测试启动') list = [] while i < tasks_number: t = threading.Thread(target=kquan_bf) t.start() i += 1 time.sleep(10) print(list) print("请求次数:") print("灰度测试"+" : "+str(list.count("{灰度测试=dubbo-provider:v2.0}"))) print("sc://localhost:30100"+" : "+str(list.count("{provider-dubbo-registry-address=sc://localhost:30100}"))) except Exception as e: print(e) # 请求结果
  • [已解决问题归档] ccgateway开发,根据callid取呼叫信息结果为succes,但返回值为null
    问题来源】:湖北农信【问题简要】        根据开发文档5.2.66  根据callid取呼叫信息结果为succes,但返回值为null【AICC解决方案版本】     CMS版本:AICC 8.15.1     CTI版本   ICDV300R008C23SPC002测试工号1026,测试时间09:55电话:13339088579 
  • [问题求助] 【AppCube】【ABC】提供给外界(Postman)访问的服务接口,外界是否有办法不传access_token访问?
    【功能模块】【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [知识分享] CCE容器业务如何配置访问外部静态资源
    背景:       容器业务中需要访问到某些静态文件,如鉴权文件、图片、前端静态资源等,直接将静态文件打包至容器中会导致容器臃肿,尤其是多负载需要共享这些资源时,每个容器中都需要配置这些文件,从而降低整体业务迭代更新速度。那CCE中有没有方法可以保持容器轻量化的同时,保证容器业务也能正常运行呢?解决方式:方案一:配置存储类型为HostPath模式       这种方式是一种常见的处理方案,其原理就是将这些静态文件配置在宿主机的某个目录,然后通过k8s中HostPath模式,将宿主机的路径挂载到容器的某个具体的目录下,实现两个目录间资源文件的共享。CCE中也支持这种配置方式,具体配置方式是:1)远程登录CCE Node节点,将静态文件上传至虚拟机的某个文件目录,如/tmp/front。2)起负载,并配置文件的挂载路径,如挂载至容器的/mnt/test目录3)配置亲和性。因为静态资源上传时只上传到了容器的部分节点,需要保证负载启动时运行在静态文件上传的那个宿主机节点,因此需要配置负载和节点的亲和性策略。4)配置完成后,启动容器,即可在容器中访问到这些文件。方案二:配置云端持久化存储       持久化存储是一种共享存储的概念,不仅能实现容器和宿主机之间文件数据的共享,而且能更加完整的保存应用运行的状态数据,便于应用恢复。云端通过插件机制完成共享存储的对接,以对象存储卷为例,看看云端持久化存储如何进行配置。1)首先需要创建对象存储卷。2)将静态文件上传至OBS对象存储桶。文件较大时建议通过OBS Broswer+进行上传。3)上传完成后,在CCE负载中配置挂载持久化存储。在负载中选择更新升级》高级设置》数据存储》云存储,点击天际云存储,选择对象存储,输入挂载至容器中的路径,如/mnt/test4)挂载完成后,点击提交,即可在容器中访问到这些静态文件。两种方案对比:方案一:优点是文件读取的性能较高,配置方式简单;缺点是需要设置节点亲和性;方案二:优点是pod的创建不依赖于某一个固定节点,文件配置、修改都较方便;缺点是通过插件对接了后端的存储服务,存在网络IO的消耗,存在性能问题。
  • [互动交流] CCE最佳实践-游戏容器化改造提供的镜像有问题,烦请尽快更新镜像,急求
    CCE最佳实践-游戏容器化改造提供的镜像有问题,烦请尽快更新镜像,急求提供镜像的联系人
  • [知识分享] CCE ELB ingress PK Nginx ingress 孰胜孰负?
    >**摘要: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、不支持路由重定向
  • [问题求助] CCE创建工作负载时,环境必须是全新的吗,上面安装了其他组件创建不成功
    【功能模块】CCE创建工作负载不成功【操作步骤&问题现象】1、环境已经安装其他组件2、创建工作负载,实例异常报错:重新拉取镜像失败已经排除内存大小的原因【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [知识分享] CCE proxysql+mysql 实现MySQL主从读写分离
    >**摘要:本文基于华为云CCE部署 Proxysql + Mysql,实现数据库主从读写分离,部署过程涉及到数据库的持久化存储、数据库配置文件的Configmap挂载、CCE环境变量设置、CCE的服务(ClusterIP,负载均衡)设置。详细内容可阅读文章了解** # 目录 > 1.部署架构图 > 2.组件简介 > 3.部署前提 > 4.部署MySQL主从 >> 4.1 通过配置项configmap创建MySQL master的配置文件 >> 4.2 通过配置项configmap创建MySQL slave的配置文件 >> 4.3 创建MySQL master工作负载 >> 4.4 创建MySQL slave工作负载 >> 4.5 MySQL master配置 > 5.部署proxySQL >> 5.1 通过配置项configmap创建proxysql的配置文件 >> 5.2 创建proxySQL 工作负载 >> 5.3 proxySQL配置数据库读写分离 >> 5.4 proxySQL另一实例配置 > 6.验证 >> 6.1 验证MySQL读写分离 >> 6.2 验证proxysql 负载均衡 > 7.FAQ >> 7.1 通过负载均衡数据库后,SQL语句执行报错 >> 7.2 数据库连接报 1251 错误 >> 7.3 ELB 负载均衡后连接失败 ## 1.部署架构图 ![部署架构图.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/27/094936myiwnsv6dtwcffmp.png) ## 2.组件简介 **MySQL**:关系型数据库,按照数据结构来组织、存储和管理数据的仓库 **proxySQL**:proxySQL是灵活强大的MySQL代理层, 是一个能实实在在用在生产环境的MySQL中间件,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行 cache,支持动态加载配置、故障切换和一些 SQL的过滤功能。默认管理连接端口6032,数据库连接端口 3306。 ## 3. 部署前提 - 具备可使用的CCE集群以及CCE节点 - CCE购买参考:https://support.huaweicloud.com/usermanual-cce/cce_01_0028.html ## 4. 部署MySQL主从 ### 4.1 通过配置项configmap创建MySQL master的配置文件 - MySQL主my.cnf文件 - CCE控制台,进入配置中心下的配置项ConfigMap,点击创建配置项,如下图所示 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/190127w1kmrgxzdo5a2t9s.png) - my.cnf mysql-master配置内容如下: ```shell [mysqld] pid-file=/var/run/mysqld/mysqld.pid socket=/var/run/mysqld/mysqld.sock datadir=/var/lib/mysql secure-file-priv= NULL server-id=101 ##用于高可用区分服务的ID,MySQL主从ID不一致即可 log-bin=master-binlog ``` ### 4.2 通过配置项configmap创建MySQL slave的配置文件 - MySQL主my.cnf文件 - CCE控制台,进入配置中心下的配置项ConfigMap,点击创建配置项,如下图所示 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/191149iadp7anvbyfcly6i.png) - my.cnf mysql-slave配置内容如下: ```shell [mysqld] pid-file=/var/run/mysqld/mysqld.pid socket=/var/run/mysqld/mysqld.sock datadir=/var/lib/mysql secure-file-priv= NULL server-id=102 ##用于高可用区分服务的ID,MySQL主从ID不一致即可 log-bin=master-binlog ``` - 说明:配置文件内的其他参数可自行设置,当前仅为演示,未进行其他配置。 ### 4.3 创建MySQL master工作负载 - 进入华为云CCE控制台,工作负载下的有状态工作负载界面,点击创建有状态工作负载 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/1915430noeucaifvpvqqb1.png) - 创建MySQL master负载-工作负载基本信息 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/19180224eqsuvpspq4jsgm.png) - 创建MySQL master负载-容器设置-step1-开源镜像中心:MySQL 8.0 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/192057jgzuivr73ain1a6r.png) - 创建MySQL master负载-容器设置-step2-环境变量:设置MySQL密码 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/192243vlex7wfvmfidjgvr.png) - 创建MySQL master负载-容器设置-step3-数据存储:mysql-master-cnf挂载 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/17/1455134djzm8gdhtvvmpgh.png) - 创建MySQL master负载-容器设置-step4-数据存储:挂载SFS存储MySQL数据 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/193230fgpzuvtf39txk0vs.png) - 创建MySQL master负载-工作负载访问设置-实例间发现服务:访问端口3306 - 创建MySQL master负载-工作负载访问设置-服务:节点访问,节点模式,访问端口3306,访问端口自动生成 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/19373203snpsxkzedahrrd.png) - 创建MySQL master负载-高级设置保持默认即可,点击创建 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/1941349jgmk1ucgzbfl3id.png) ### 4.4 创建MySQL slave工作负载 - 进入华为云CCE控制台,工作负载下的有状态工作负载界面,点击创建有状态工作负载 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/1915430noeucaifvpvqqb1.png) - 创建MySQL slave负载-工作负载基本信息 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/194841zp1ulzuw0nb4gafg.png) - 创建MySQL slave负载-容器设置-step1-开源镜像中心:MySQL 8.0 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/192057jgzuivr73ain1a6r.png) - 创建MySQL slave负载-容器设置-step2-环境变量:设置MySQL密码 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/192243vlex7wfvmfidjgvr.png) - 创建MySQL slave负载-容器设置-step3-数据存储:mysql-slave-cnf挂载 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/17/145606msiofmx76xxwu6pi.png) - 创建MySQL slave负载-容器设置-step4-数据存储:挂载SFS存储MySQL数据 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/193230fgpzuvtf39txk0vs.png) - 创建MySQL slave负载-工作负载访问设置-实例间发现服务:访问端口3306 - 创建MySQL slave负载-工作负载访问设置-服务:节点访问,节点模式,访问端口3306,访问端口自动生成 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/1116283eob8kvwl9napvdg.png) - 创建MySQL slave负载-高级设置:设置与MySQL master负载的反亲和性 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/195501mmk3v2xjxbi2aszc.png) - 创建负载 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/195631qvj4a54jsrp5rcjn.png) ### 4.5 MySQL master配置 - 登录MySQL master数据库,查看配置项是否生效 ```sql show variables like '%server%'; show variables like '%log_bin%'; ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/200750aiejouy4e64sv0y8.png) - 新建主库的复制账号并授权 ```sql CREATE USER 'backup'@'%' IDENTIFIED BY 'backupmima'; ## 8.0数据库请使用 CREATE USER 'backup'@'%' IDENTIFIED WITH mysql_native_password BY 'backupmima'; GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%'; SHOW GRANTS FOR 'backup'@'%'; ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/201919ufpqbjr775flckt9.png) - 主数据库 master status ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/2035376k9rmw3nbhq8kmnt.png) - 登录MySQL slave数据库,查看配置项是否生效 ```sql show variables like '%server%'; show variables like '%log_bin%'; ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/090248wqtzsilezjguoa4y.png) - MySQL slave增加MySQL master连接配置信息。 ```sql CHANGE master to master_host='mysql-master.default.svc.cluster.local', master_user='backup', master_password='backupmima', master_port=3306, master_log_file='master-binlog.0000003', master_log_pos=1186, master_connect_retry=30; ``` **说明** master_host='mysql-master.default.svc.cluster.local' 为MySQL master服务集群内网IP ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/102643lwxxpzejdcc6ugxh.png) master_user='backup',master_password='backupmima' 为复制数据库的账号和密码 master_log_file='master-binlog.0000003', 为MySQL master的binlog文件 master_log_pos=1186, 为MySQL master的Posistion值 master_connect_retry=30 主节点宕机,从服务器的尝试连接时间 - MySQL slave开启设置复制 ```sql start slave; show slave status \G; ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/103436jzzbg5ppgzics0gn.png) - 测试数据复制 登录MySQL master执行以下命令: ```sql CREATE databases test; USE test; CREATE table test(name char(10),age int(3)); ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/104901ayenkaf4wtykwrdp.png) 登录MySQL slave执行以下命令: ```sql SHOW databases; USE test; SHOW tables; ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/105145rwro4ess0zvrstws.png) ## 5. 部署proxySQL ### 5.1 通过配置项configmap创建proxysql的配置文件 - proxysql proxysql.cnf文件 - CCE控制台,进入配置中心下的配置项ConfigMap,点击创建配置项,如下图所示 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/26/162238wylb99u9y6gkmhrz.png) - proxysql.cnf 配置内容如下: ```shell datadir="/var/lib/proxysql" admin_variables = { admin_credentials="admin:admin" mysql_ifaces="0.0.0.0:6032" refresh_interval=2000 cluster_username="admin" cluster_password="admin" cluster_check_interval_ms=200 cluster_check_status_frequency=100 cluster_mysql_query_rules_save_to_disk=true cluster_mysql_servers_save_to_disk=true cluster_mysql_users_save_to_disk=true cluster_proxysql_servers_save_to_disk=true cluster_mysql_query_rules_diffs_before_sync=1 cluster_mysql_servers_diffs_before_sync=1 cluster_mysql_users_diffs_before_sync=1 cluster_proxysql_servers_diffs_before_sync=1 } mysql_variables= { monitor_password="monitor" monitor_galera_healthcheck_interval=1000 threads=2 max_connections=2048 default_query_delay=0 default_query_timeout=10000 poll_timeout=2000 interfaces="0.0.0.0:3306;0.0.0.0:33062" default_schema="information_schema" stacksize=1048576 connect_timeout_server=10000 monitor_history=60000 monitor_connect_interval=20000 monitor_ping_interval=10000 ping_timeout_server=200 commands_stats=true sessions_sort=true have_ssl=false ssl_p2s_ca="" ssl_p2s_cert="" ssl_p2s_key="" ssl_p2s_cipher="ECDHE-RSA-AES128-GCM-SHA256" } ``` ### 5.2 创建proxySQL 工作负载 - 进入华为云CCE控制台,工作负载下的有状态工作负载界面,点击创建有状态工作负载 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/23/1915430noeucaifvpvqqb1.png) - 创建proxysql负载-工作负载基本信息 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/11080086amfqno5mercjpu.png) - 创建proxysql负载-容器设置-step1-我的镜像:proxysql:V2.0 **说明** 镜像来源 https://registry.hub.docker.com/r/percona/proxysql 推送到华为云镜像仓库 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/1129168qee04mcz6rhn5na.png) - 创建proxysql负载-容器设置-step2-数据存储:挂载Configmap 配置文件 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/17/150217dfjxdclbkeqgw6lx.png) - 创建proxysql负载-容器设置-step2-数据存储:挂载SFS存储proxysql数据 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/111917qosglhsbfjqdne9t.png) - 创建proxysql负载-工作负载访问设置-实例间发现服务:访问端口3306 - 创建proxysql负载-工作负载访问设置-服务:负载均衡,节点级别,容器端口3306、访问端口3306 **说明**:负载均衡配置完成后,服务器安全组需要开放 100.125.0.0/16 网段的安全组入方向规则 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/25/0925089keqqfz7gylxqsah.png) - 创建proxysql负载-高级设置保持默认即可,点击创建 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/113148zcohbogbgbxriiwe.png) ### 5.3 proxySQL配置数据库读写分离 - 5.3.1 MySQL master创建用于proxysql连接的用户(用户数据会同步到从库) ```sql CREATE USER 'proxysql'@'%' IDENTIFIED with mysql_native_password BY 'proxysqlmima'; GRANT ALL ON *.* TO 'proxysql'@'%'; flush privilrges; ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/143605jaemctvoc5opepwt.png) - 5.3.2 MySQL master创建用于proxysql健康监测的用户(用户数据会同步到从库) ```sql CREATE USER 'monitor'@'%' IDENTIFIED with mysql_native_password BY 'monitormima'; GRANT SELECT ON *.* TO 'monitor'@'%'; flush privilrges; ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/1446328z3xdhx1r70jhwzw.png) ------------ - 5.3.3 登录proxysql 配置mysql_server 信息 **说明**:分别插入mysql的节点信息,10表示master(写),20表示slave(读) ```sql mysql -h 127.0.0.1 -P 6032 -u admin -p insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(10,'mysql-master.default.svc.cluster.local',3306,1,'master'); insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(20,'mysql-slave.default.svc.cluster.local',3306,1,'slave'); ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/154516tvzmtgyx7fcwrhqp.png) **字段说明**: hostgroup_id:一个组ID,组内可包含多个MySQL地址 hostname:MySQL访问地址 port:访问端口 weight:访问权重 comment:文本,用于备注节点信息 **生效配置并把配置保存到磁盘** ```sql load mysql servers to runtime; save mysql servers to disk; ``` ------------ - 5.3.4 登录proxysql 配置mysql_users 信息 **说明**:proxysql 通过6032链接管理接口,默认账号密码为 admin/admin ```sql mysql -h 127.0.0.1 -P 6032 -u admin -p insert into mysql_users(username,password,default_hostgroup,transaction_persistent)values('proxysql','proxysqlmima',10,1); ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/160043cikqzw5ajpzhcosl.png) **字段说明** sername、password:proxysql连接MySQL的用户和密码 default_hostgroup:没有匹配到规则的SQL直接访问这个ID内的数据库 transaction_persistent:一个事务内的多条 SQL,只会路由到一个主机组中 **生效配置并把配置保存到磁盘** ```sql load mysql users to runtime; save mysql users to disk; ``` ------------ - 5.3.5 登录proxysql 配置MySQL路由规则 ```sql insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply) values(1,1,'^SELECT.*FOR UPDATE$',10,1); insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply) values(2,1,'^SELECT',20,1); insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply) values(3,1,'^SHOW',20,1); ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/164403ynkzyf7ovzeavsdo.png)![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/164432qj4je5xxqw7lkd7z.png) **字段说明** rule_id:规则ID active:设置为1时,为启用规则 match_digest:SQL匹配的规则 destination_hostgroup:将匹配的规则路由到这个主机组 apply:设置为1时,在匹配和处理此规则后,将不再评估进一步的查询 ```sql load mysql query rules to runtime; save mysql query rules to disk; ``` -------- - 5.3.6 配置数据库健康监测账号 ```sql set mysql-monitor_username='monitor'; set mysql-monitor_password='monitormima'; ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/1721094xqmf6aiwh6imub8.png) **生效配置并把配置保存到磁盘**. ```sql load mysql variables to runtime; save mysql variables to disk; ``` ### 5.4 proxySQL另一实例配置 **按照同样的方法进行另一实例proxysql的配置** **说明**:也可通过proxySQL集群的方式进行部署。实现各个proxysql之间的数据同步 ## 6. 验证 ### 6.1 验证MySQL读写分离 - proxysql连接数据并执行以下命令 ```sql mysql -h 127.0.0.1 -P 3306 -u proxysql -p ##使用proxysql 连接数据库 show databases; use test; show tables; DESC test; insert into test(name,age) values('caichunfu',10); ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/173602du1lbphz5iuucl8e.png) - proxysql 连接管理接口,查看路由记录; stats_mysql_query_digest:通过ProxySQL路由出去的各类查询相关统计数据 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/174711em4itjujdgssvo9e.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/24/175845kyrwxg0udnh8rblq.png) ### 6.2 验证proxysql 负载均衡 - 查看Proxysql的访问方式 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/25/1714581oly4iuhjevemgmq.png) 访问方式为 124.71.75.74:3306 - 使用navicat 连接查看数据库 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/25/171723nfwggjsbe11z53wo.png) - 验证负载均衡能力-step1 连接进入数据 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/25/172028ljypx3incnc3ijcz.png) - 验证负载均衡能力-step2 轮流删除实例,验证Proxysql负载均衡能力 **删除一个实例** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/25/175251wavx7qbia0ephehi.png) **验证** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/25/1756085fjlbo2ytbrmppus.png) **删除另一个实例** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/25/175717qdfwdhlh9aaggqfe.png) **验证** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/25/1756085fjlbo2ytbrmppus.png) ## 7 FAQ ### 7.1 通过负载均衡数据库后,SQL语句执行报错。 [Error] 9006 - ProxySQL Error: connection is locked to ...... 解决办法:登录proxysql管理端,执行以下命令 ```sql set mysql-set_query_lock_on_hostgroup=0; load mysql variables to runtime; save mysql variables to disk; ``` ### 7.2 数据库连接报 1251 错误 [Error] 1251 Client does not.... 解决办法:MySQL8.0的密码加密规则修改为mysql_native_password ```sql ALTER USER 'proxysql'@'%' IDENTIFIED WITH mysql_native_password BY 'proxysqlmima'; #修改加密规则 ALTER USER 'proxysql'@'%' IDENTIFIED BY 'proxysqlmima' PASSWORD EXPIRE NEVER; #更新一下用户的密码 FLUSH PRIVILEGES; ``` ### 7.3 ELB 负载均衡后连接失败 解决办法:安全组入方向放通 100.125.0.0/16 网段的安全组
总条数:485 到第
上滑加载中