保姆级教程!手把手教你使用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集群:
YugabyteDB(使用Helm Chart)-版本2.1.2
https://docs.yugabyte.com/latest/quick-start/install/macos/Rancher(使用Docker Run)-版本2.4
Longhorn(使用Rancher UI)-版本0.8.0
一个Google Cloud Platform账号
在谷歌云平台上设置一个K8S集群和Rancher
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:///login
注意:如果你在尝试访问Rancher UI时遇到任何问题,请尝试使用Chrome Incognito模式加载页面或禁用浏览器缓存。
按照提示创建一个新帐户。
创建帐户后,请转到https:///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了!
保姆级教程!手把手教你使用Longhorn管理云原生分布式SQL数据库!的更多相关文章
- Longhorn 企业级云原生分布式容器存储-券(Volume)和节点(Node)
内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生分布式块存储解决方案设计架构和概念 Longhorn 企业级云原生容器存储解决方 ...
- 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)
写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...
- 自建本地服务器,自建Web服务器——保姆级教程!
搭建本地服务器,Web服务器--保姆级教程! 本文首发于https://blog.chens.life/How-to-build-your-own-server.html. 先上图!大致思路就是如此. ...
- Eclipse for C/C++ 开发环境部署保姆级教程
Eclipse for C/C++ 开发环境部署保姆级教程 工欲善其事,必先利其器. 对开发人员来说,顺手的开发工具必定事半功倍.自学编程的小白不知道该选择那个开发工具,Eclipse作为一个功能强大 ...
- 强大博客搭建全过程(1)-hexo博客搭建保姆级教程
1. 前言 本人本来使用国内的开源项目solo搭建了博客,但感觉1核CPU2G内存的服务器,还是稍微有点重,包括服务器内还搭建了数据库.如果自己开发然后搭建,耗费时间又比较多,于是乎开始寻找轻量型的博 ...
- RocketMQ保姆级教程
大家好,我是三友~~ 上周花了一点时间从头到尾.从无到有地搭建了一套RocketMQ的环境,觉得还挺easy的,所以就写篇文章分享给大家. 整篇文章可以大致分为三个部分,第一部分属于一些核心概念和工作 ...
- 手把手教你使用Git管理你的软件代码
什么是分布式版本控制系统?Git有哪些常用命令?什么是仓库?Git的操作区域包括哪些?Git有哪些常用对象(object)?git rebase和git merge的区别是什么?git reset,g ...
- Longhorn 企业级云原生容器存储解决方案-部署篇
内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生分布式块存储解决方案设计架构和概念 安装 Longhorn 可以通过多种方式安装 ...
- 保姆级SpringBoot+Vue图片上传到阿里云OSS教程
小二是新来的实习生,作为技术 leader,我给他安排了一个非常简单的练手任务,把前端 markdown 编辑器里上传的图片保存到服务器端,结果他真的就把图片直接保存到了服务器上,这下可把我气坏了,就 ...
随机推荐
- 使用JDBC CallableStatements执行存储过程
Using JDBC CallableStatements to Execute Stored Procedures Connector / J完全实现了 java.sql.CallableState ...
- JAVA 截图+tess4j识别
我们先来看看要识别的图片和效果图 效果图: 图片识别需要用到tess4j这个包,下面是下载地址: https://share.weiyun.com/5Hjv13T 我们拿到包以后解压出来,随便你放到哪 ...
- configure: error: C compiler cannot create executables报错处理
在测试环境安装php的imagick扩展在执行./configure生成编译文件时出现报错如下: 通过查看config.log发现有报错,在网上经验教程里发现前面的报错不管,直奔最后的报错即可,发现是 ...
- 对话|首席研究员童欣:从长远看,AR的应用范围远比VR广泛
童欣博士现任微软亚洲研究院网络图形组首席研究员.1993年毕业于浙江大学计算机系,获工学学士学位:1996年获浙江大学计算机系硕士学位:1999年获清华大学计算机系博士学位,同年加入微软亚洲研究院. ...
- 无线城域网 WMAN
无线城域网 WMAN (Wireless Metropolitan Area Network) 1.1.概述 2002 年 4 月通过了 802.16 无线城域网的标准.欧洲的 ETSI 也制订类似的 ...
- 【Network telemetry】谈谈网络遥感技术,从主动探测与被动探测再到Netflow与INT
[前言] [本篇为原创]网络遥感,Network telemetry,为什么叫“telemetry”呢?我个人的理解是将网络中的数据进行一种“采集”,也就是实际上是一种网络数据的采集手段.由于工作需要 ...
- windows 10 右键菜单注册表位置
1. 查找 1.1. 打开注册表 # 1. 使用快捷键打开 “运行” win + r # 2. 在 “运行” 中输入 regedit # 3. 回车 1.2. 点击 查找 # 1. 方法 1 : 点击 ...
- python递归用法
需求:4的阶乘 4*3*2*1计算.通过递归算法,c=4*getnums(4-1),然后调用自己本身的函数,形成递归,就等于3*getnums(3-1),2*getnums(2-1),依次递归调用,最 ...
- Go语言基础篇(1) —— 编写第一个Go程序
创建文件hello_world.go package main //包,表名代码所在的包 import "fmt" //引入依赖 //main方法 func main(){ fmt ...
- beego的安装以及bee的安装和使用
beego的安装以及bee的安装和使用 一.beego的安装 1.beego是什么 beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API.Web 及后端服务等各种应用, ...