保姆级教程!手把手教你使用Longhorn管理云原生分布式SQL数据库!

作者简介

Jimmy Guerrero,在开发者关系团队和开源社区拥有20多年的经验。他目前领导YugabyteDB的社区和市场团队。
 
本文来自Rancher Labs
 
Longhorn是Kubernetes的云原生分布式块存储,易于部署和升级,100%开源且持久,由业界采用最为广泛的Kubernetes管理平台创建者Rancher Labs推出,并于去年10月捐献给CNCF。Longhorn的内置增量快照和备份功能可确保volume数据的安全,而其直观的UI可以方便地管理持久卷的计划备份。使用Longhorn,你可以获得最细的管理粒度和最大的控制程度,并且可以轻松地在另一个Kubernetes中创建一个灾备恢复的volume,并在发生紧急情况时进行故障转移。
 

 
YugabyteDB是一个云原生分布式SQL数据库,它可以运行在Kubernetes环境中,所以它可以与Longhorn和许多其他CNCF项目互操作。YugabyteDB是一个开源的高性能分布式SQL数据库,该数据库基于Google Spanner的可扩展性和容错设计而构建。Yugabyte的SQL API(YSQL)与PostgreSQL兼容。

如果你正在寻找一种方法来轻松地在100%的云原生基础架构之上开始应用程序开发,那么这篇文章正是为你准备的。我们将一步一步告诉你如何部署一个完整的云原生基础架构堆栈,该堆栈由Google Kubernetes Engine、Rancher企业级Kubernetes管理平台、Longhorn分布式块存储以及YugabyteDB分布式SQL数据库组成。

为什么要使用Longhorn和YugabyteDB?

YugabyteDB作为StatefulSet部署在Kubernetes上,并且需要持久存储。Longhorn可用于备份YugabyteDB本地磁盘,从而允许配置大规模持久卷。将Longhorn和YugabyteDB结合使用,有以下好处:

  • 不必管理本地磁盘——它们由Longhorn进行管理
  • Longhorn和YugabyteDB可以配置大规模的持久卷
  • Longhorn和YugabyteDB都支持多云部署,可以帮助企业避免云厂商锁定

此外,Longhorn可以在一个地理区域内进行同步复制。如果YugabyteDB跨区域进行部署并且其中任意一个区域中的节点发生故障,那么YugabyteDB只能使用来自另一区域的数据重建该节点,这会产生跨区域流量。而这会导致成本更改,并且会降低所恢复的性能。而将Longhorn与YugabyteDB结合使用,你可以无缝地重建该节点,因为Longhorn会在该区域内进行本地复制。这意味着YugabyteDB最终不必从另一个区域复制数据,进而降低了成本并提升了性能。在此部署设置中,如果整个区域发生故障,YugabyteDB仅需执行一个跨区域节点重建。

前期准备

我们将在已经使用了Longhorn的Google Kubernetes集群上运行YugabyteDB集群:

Rancher是一个开源的企业级Kubernetes管理平台。它使得Run Kubernetes Everywhere更为轻松和简单,满足IT人员的需求并增强DevOps团队的能力。

Rancher需要64位的Ubuntu16.04或18.04和至少4GB内存的Linux主机。在此示例中,我们将使用安装在GCP VM实例上的Rancher UI设置Google Kubernetes Engine(GKE)集群。

使用Rancher在GCP上设置Kubernetes集群所需的步骤包括:

  • 在GCP中创建一个具有所需IAM角色的Service Account
  • 创建一个运行Ubuntu 18.04的VM实例
  • 在VM实例上安装Rancher
  • 生成一个Service Account密钥
  • 通过Rancher UI设置GKE集群
     

    创建一个Service Account和VM实例

首先,我们需要创建一个附加到GCP项目的Service Account。要完成此操作,访问路径是:【IAM & admin > Service accounts】
 

 
选择【Create New Service Account】,给其命名并点击【Create】。

接下来,我们需要添加所需的角色到Service Account以便能够使用Rancher设置Kubernetes集群。添加下面显示的角色并创建Service Account。

角色添加完成之后,点击【Continue and Done】。

现在我们需要创建一个Ubuntu VM实例,它将会被托管在GCP上。执行路径为:【Compute Engine > VM Instances > Create New Instance】
 

 

 
出于本次demo的目的,我选择了n1-standard-2机器类型。选择Ubuntu镜像,需要点击【Boot Disk > Change】并且在操作系统的选项中选择Ubuntu,版本选择Ubuntu 18.04
 

 
需要检查一下是否允许HTTPS流量,检查路径为【Firewall > Allow HTTPS traffic】
 

 
使用以上设置创建VM实例仅需几分钟。创建完成后,使用SSH连接到VM。在将terminal连接到VM的情况下,下一步是通过执行以下命令来安装Rancher:

$ sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher

注意:如果没有找到Docker,请按照以下说明在Ubuntu VM上安装它:
 
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04

创建GKE集群

要访问Rancher server UI并创建登录名,请打开浏览器并转到安装它的IP地址。
 
例如:https://<external-ip>/login
 

 
注意:如果你在尝试访问Rancher UI时遇到任何问题,请尝试使用Chrome Incognito模式加载页面或禁用浏览器缓存。

按照提示创建一个新帐户。
 

 
创建帐户后,请转到https://<external-ip>/g/clusters。然后单击【Add Cluster】以创建GKE集群。
 

 
选择GKE并给集群命名。

现在我们需要从之前创建的GCP Service Account中添加私钥。可以在【IAM & admin > Service Accounts > Create Key】下找到。
 

 
这将生成一个包含私钥详细信息的JSON文件。
 

 
复制JSON文件的内容到Rancher UI中的Service Account部分并单击【Next】。
 

 
考虑到本教程的目的,我选择了n1-standard-4机器类型,打开了【Node Pool Autoscaling】,并将最大节点数设置为24。单击【Create】。
 

 
通过确保将集群的状态设置为Active来验证是否已创建集群。请耐心等待,这将需要几分钟的时间。
 

 
还可以通过转到【Kubernetes Engine>Clusters】从GCP项目访问该集群。
 

在GKE上安装Longhorn

Rancher安装完成后,我们可以使用其UI来在GKE集群上安装和设置Longhorn。
 
单击该集群,在本例中为longhorn-demo,然后选择【System】。
 

 
接下来点击【Apps>Launch】,搜索Longhorn,并点击该卡片。
 

 
给deployment命名,也可以使用默认名称,然后点击【Launch】。安装完成后,你可以通过点击/index.html链接来访问Longhorn UI。
 

 
验证是否已安装Longhorn,并且GKE集群节点是否可见。
 

使用Helm在GKE集群上安装YugabyteDB

下一步是在GKE集群上安装YugabyteDB。可以通过执行以下链接中的步骤来完成:

https://docs.yugabyte.com/latest/deploy/kubernetes/helm-chart/

以下将概述这些步骤:

验证并升级Helm

首先,通过使用Helm版本命令来检查Helm是否已经安装:

$ helm version

Client: &version.Version{SemVer:"v2.14.1", GitCommit:"5270352a09c7e8b6e8c9593002a73535276507c0", GitTreeState:"clean"}

Error: could not find tiller

如果你遇到与Tiller相关的问题,例如上述错误,则可以使用升级选项初始化Helm:

$ helm init --upgrade --wait

$HELM_HOME has been configured at /home/jimmy/.helm.

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure ‘allow unauthenticated users‘ policy.

To prevent this, run `helm init` with the --tiller-tls-verify flag.

For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation

根据以下文档,你应该能够使用Helm chart来安装YugabyteDB:

https://docs.yugabyte.com/latest/deploy/kubernetes/single-zone/oss/helm-chart/

创建一个Service account

在创建集群之前,你需要有一个service account,它应该被授予集群管理员的角色。使用以下命令创建一个yugabyte-helm service account,并授予cluster-admin的集群角色。

$ kubectl create -f
https://raw.githubusercontent.com/yugabyte/charts/master/stable/yugabyte/yugabyte-rbac.yaml

serviceaccount/yugabyte-helm created

clusterrolebinding.rbac.authorization.k8s.io/yugabyte-helm created

初始化Helm

$ helm init --service-account yugabyte-helm --upgrade --wait

$HELM_HOME has been configured at /home/jimmy/.helm.

Tiller (the Helm server-side component) has been upgraded to the current version.

创建一个命名空间

$ kubectl create namespace yb-demo

namespace/yb-demo created

添加chart镜像仓库

$ helm repo add yugabytedb https://charts.yugabyte.com

"yugabytedb" has been added to your repositories

从镜像仓库中获取更新

$ helm repo update

Hang tight while we grab the latest from your chart repositories...

...Skip local chart repository

...Successfully got an update from the "yugabytedb" chart repository

...Successfully got an update from the "stable" chart repository

Update Complete.

安装YugabyteDB

我们将使用Helm chart来安装YugabyteDB并且将使用Load Balancer公开UI端点和YSQL、Yugabyte SQL API。此外,我们将在资源不足的环境中使用Helm资源选项,并指定Longhorn存储类。这将需要一段时间,需要耐心等待。你可以在文档中找到关于Helm的详细说明:

https://docs.yugabyte.com/latest/deploy/kubernetes/gke/helm-chart/

$ helm install yugabytedb/yugabyte --set resource.master.requests.cpu=0.1,resource.master.requests.memory=0.2Gi,resource.tserver.requests.cpu=0.1,resource.tserver.requests.memory=0.2Gi,storage.master.storageClass=longhorn,storage.tserver.storageClass=longhorn  --namespace yb-demo --name yb-demo --timeout 1200 --wait

执行以下命令以检查YugabyteDB集群的状态:

$ helm status yb-demo

你还可以通过访问GKE的“Services & Ingress and Workloads”页面来验证是否已安装所有组件并进行通信。

你也可以通过访问端口7000上yb-master-ui服务的端点来查看管理UI中的YugabyteDB安装。
 

 
你还可以通过执行以下命令登录到PostgreSQL兼容的shell:

kubectl exec -n yb-demo -it yb-tserver-0 /home/yugabyte/bin/ysqlsh -- -h yb-tserver-0.yb-tservers.yb-demo

ysqlsh (11.2-YB-2.0.12.0-b0)

Type "help" for help.

yugabyte=#

现在,你可以开始创建数据库对象和处理数据了。

使用Longhorn管理YugabyteDB volume

接下来,重新加载Longhorn dashboard,以验证YugabyteDB volume已正确设置。Volume的数量现在应该处于可见状态:
 

 
单击【volume】以管理volume。各个volume应该可见。


 
现在可以通过选择它们以及所需的操作来管理volume。
 

 
就是它!现在,你已经可以在有Longhorn作为分布式块存储的GKE上运行YugabyteDB了!

原文地址:https://blog.51cto.com/12462495/2481640

时间: 2024-08-25 20:39:13

保姆级教程!手把手教你使用Longhorn管理云原生分布式SQL数据库!的相关文章

[ionic开源项目教程] - 手把手教你使用移动跨平台开发框架Ionic开发一个新闻阅读APP

前言 这是一个系列文章,从环境搭建开始讲解,包括网络数据请求,将持续更新到项目完结.实战开发中遇到的各种问题的解决方案,也都将毫无保留的分享给大家. 项目介绍 本项目基于移动跨平台开发框架 Ionic 开发,主要包含健康.医疗.生活.农业.和用户五大模块,以下是功能架构图. 目录 第1讲 前言,技术储备,环境搭建,常用命令 第2讲 新建项目,架构页面,配置app.js和controllers.js 第3讲 使用Tabs和SlideBox实现左右滑动菜单 第4讲 第4讲 通过Service层获取新

Asp.NET MVC 导入Excel数据教程 手把手教你系列!!!

先上效果图 1.引言 小弟最近接了个大学生的毕业设计,收了100块钱让做一个ASP.NET MVC导入Excel到数据库的功能,由于以前没做过就到处搜索资料,但是发现网上的资料不是直接贴一大堆乱起八遭的源码,就是需要借用NPOI第三方类库太麻烦了,况且预算才100RMB简直不值得,所以小弟尝试自己动手丰衣足食,所以就有了这篇博客. 先上一张小弟的思路图: (说明:没有安装做流程图的软件!凑合着看吧) 2 进入正题 首先跟着小弟先创建一个默认的MVC项目(相信大家都会创建,这里就不演示了) 第一步

JBPM6教程-手把手教你安装JBPM

1. 安装JBPM的先决条件: (1)JDK 1.6+以上,没有安装的话,猛击这里. (2)Ant 1.7+以上,没有安装的话,看看这里. 2. 下载JBPM安装包 下载地址点这里. 3. 安装JBPM Demo. 在cmd命令模式下,切换到jbpm的解压路径(尽量不要有空格吆),运行下述命令: ant install.demo 在命令行会输出如下图所示的内容,在此安装过程中,Ant会安装如下内容: 安装JBoss 安装 db.files 安装 jBPM-console 到 JBoss 安装de

手把手教你用ngrx管理Angular状态

本文将与你一起探讨如何用不可变数据储存的方式进行Angular应用的状态管理 :ngrx/store--Angular的响应式Redux.本文将会完成一个小型简单的Angular应用,最终代码可以在这里下载. Angular应用中的状态管理 近几年,大型复杂Angular/AngularJS项目的状态管理一直是个让人头疼的问题.在AngularJS(1.x版本)中,状态管理通常由服务,事件,$rootScope混合处理.在Angular中(2+版本),组件通信让状态管理变得清晰一些,但还是有点复

手把手教你----使用Nuget管理自己的项目库

什么是NuGet? 官网上的解释:NuGet is the package manager for the Microsoft development platform including .NET. The NuGet client tools provide the ability to produce and consume packages. The NuGet Gallery is the central package repository used by all package a

万字干货:手把手教你做需求管理

通过这篇文章,总结自己在工作实践中需求管理的方法论--普拉姆方法.总结这个方法论的特点是,用最轻量化的投入,与他人协作,并管理需求,推动需求上线.这套方法论组合了项目管理.敏捷开发的知识,希望能对大家有所帮助.本文适合0-2岁产品经理阅读,产品大牛.敏捷管理大师请绕过. 本文大纲如下: 1. 为什么要做需求管理? 1.1 我们的工作是否像救火 1.2 需求管理是什么? 1.3 宗旨是什么? 1.4 结尾 2. 需求管理中的干系人和角色 2.1 什么是干系人 2.2 需求管理中的角色 2.3 如何

手把手教你在新浪云上免费部署自己的网站--连接数据库

看这篇博客之前请一定要先看一下另一片博客,链接是http://www.cnblogs.com/-beyond/p/6686166.html 看完之后,默认你知道怎么将代码上传到新浪云SAE,并且能够成功运行,连接数据库之前,你必须先创建有一个应用. 现在我创建一个名称为sampleone的应用,如下图 点击左侧的代码管理,选在右侧创建一个版本 然后就会看到下面的页面 你可以选择编辑代码,也可以选择上传代码包,但是在此,为了简便,我只创建一个代码文件,直接在index.php里面 你已经注意到,数

手把手教你玩转阿里云双11拼团活动

各位新老用户们,如果您已经开了团,但是还不知道怎么玩?小编告诉来告诉你! 首先,进入活动主页面,点击[我要开团],选择您想要购买的云产品进行开团!如果您只想开团不想购买,也可以- 您开团后将享受以下福利: 福利1:拉新赢红包 团长开团后,可通过专属分享链接,邀请好友来参团.每成功邀请1个新用户参团购买您团里的云产品,您将获得1个拉新红包!红包从几十块到上千块不等! 最大的红包有1111元的现金红包,将即时发放到您的阿里云账户中!拉新人数越多,红包越多!如果您没有开团,参加了您好友开的团,您购买后

手把手教你申请腾讯云免费SSL证书

SSL证书和我们日常用的身份证类似,是一个支持HTTPS网站的身份证明,SSL证书里面包含了网站的域名,证书有效期,证书的颁发机构以及用于加密传输密码的公钥等信息,由于公钥加密的密码只能被在申请证书时生成的私钥解密,因此浏览器在生成密码之前需要先核对当前访问的域名与证书上绑定的域名是否一致,同时还要对证书的颁发机构进行验证,如果验证失败浏览器会给出证书错误的提示.SSL证书对于网站数据的安全传输起到至关重要的作用. 现在很多提供SSL证书的商家,各品牌SSL证书价格与几千到十几万不等,腾讯云作为