只需3步,就可以在KubeBlocks上集成和使用NebulaGraph集群啦!

NebulaGraph 是一款开源分布式图数据库,凭借高可用、可扩展、易运维、高性能等特性,NebulaGraph 已被美团、京东、快手和腾讯等多家企业选用,应用于数据治理、实时推荐、反欺诈、风险控制等多种场景。

数据库的部署和运维是常见的用户痛点。对于开源数据库,上手难度则更高,因为用户往往需要自己不断摸索如何完成这些事情,这也对开源数据库的流行度带来不利的影响。因此,开源数据库社区中往往都会有开发者贡献各种各样的部署和运维方式,而对于 NebulaGraph 这样有专门的图查询语言和更加复杂的分布式架构,意味着新用户要面对更陡峭的学习曲线。为了解决这个问题, NebulaGraph 社区提供了多种使用 Operator 部署数据库的方式。KubeBlocks 就作为其中之一,在 K8s 的环境中对部署和使用 NebulaGraph 就提供了非常有益的补充。

一、理解 Nebula 架构的基础上,3步实现集成

KubeBlocks 作为 K8s 生态的框架基础设施,熟悉 K8s 的开发者无需了解新概念即可快速上手,3 步即可集成一个新的数据库。

1. 理解 NeublaGraph 架构

这一步,我们需要理解集群的组成,了解每个模块的配置启动方式。如图 1 所示,一个 NebulaGraph 集群由内核(core)和客户端(client)两大部分组成。其中内核有三个组件,分别是:

  • Meta 服务:由 nebula-metad 进程提供,负责数据管理,例如 Schema 操作、集群管理和用户权限管理等;
  • Graph 服务:由 nebula-graphd 进程提供,负责处理计算请求;
  • Storage 服务:由 nebula-storaged 进程提供,负责存储数据。

图 1. NebulaGraph 架构图

图 1. NebulaGraph 架构图 (来源:Nebula

2. 创建集群模板

这一步,我们需要定义集群拓扑,配置和版本等信息。KubeBlocks Addon 支持多种扩展方式,目前主流的是 Helm 方式。我们需要创建一个 NebulaGraph 的 Helm chart,并增加以下模板文件:

  • ClusterDefinition.yaml:用于定义集群拓扑,组件配置和组件启动脚本。根据第一步的分析,我们知道 NebulaGraph 集群是一个多组件的形态,需要 3 个内核组件,和 1 个客户端组件。
  • ClusterVersion.yaml:用于定义版本信息,例如每个组件的 docker images。目前支持的 NebulaGraph 版本是 Nebula 3.5.0。每个 ClusterDefinition 可关联多个 ClusterVersion。未来 NebulaGraph 发布新版本后,我们只需添加新的 ClusterVersion 文件即可。

这一步,我们可以快速地在本地环境调试 Helm chart,校验正确性。
在这里插入图片描述

图 2. Nebula Helm Chart PR

3. 添加 Addon 配置

我们只需再添加大约 30 行 yaml 代码,就可以将新添加的 NebulaGraph 配置为 KubeBlocks 的 Addon,非常方便。
在这里插入图片描述

图 3. Nebula Addon PR

欢迎大家参考具体的 PR:

如果开发者希望将其它的数据库接入 KubeBlocks,可以参考 KubeBlocks 开源 repository 中已有的其它数据库的代码。目前 KubeBlocks 已经支持了非常丰富的数据库架构和部署形态,如 MySQL、Redis、MongoDB 等,包括多种使用主备复制架构和基于 Paxos/Raft 的分布式架构。

🚀插播一则预告:

小猿姐已经约了 KubeBlocks 开发同学安排 Addon 系列教程,手把手教你快速集成到 KubeBlocks。

二、如何在 KubeBlocks 上体验 NebulaGraph 集群

你可以通过以下方式在 KubeBlocks 上体验 NebulaGraph 集群。

1. 安装 kbcli 和 KubeBlocks

请安装最新版的 kbcli 和 KubeBlocks。

参考文档:

Install kbcli

Install KubeBlocks

2. 激活 Addon

安装了最新版本的 KubeBlocks 后,可以看到 Nebula 已经出现在 KubeBlocks 的 Addon 列表中。

2.1 查看 Addon 列表

kbcli addon list

可以看到 Nebula 出现在列表中,但是默认并没有激活。
在这里插入图片描述

图 4. KubeBlocks Addon 列表

说明:

如果没有找到 nebula addon,请检查安装版本,确保已安装新版本的 kbcli 和 KubeBlocks。

2.2 激活 Nebula Addon

kbcli addon enable nebula

2.3 校验 Addon 是否激活

因为网络原因,激活 Addon 可能需要一点时间,可通过如下 addon describe 命令查看是否激活成功。若状态显示 Enabled 则激活成功。

kbcli addon describe nebula

3. 创建 NebulaGraph 集群

3.1 创建 NebulaGraph 集群

激活 Addon 后,我们可以像创建 MySQL、PostgreSQL 集群一样,快速创建一个 NebulaGraph 集群。

kbcli cluster create mynebula --cluster-definition nebula

其中

  • mynebula 是集群名称,可以替换为你想要的集群名。
  • --cluster-definition 指定了从哪个预定义的集群模版开始创建,我们选择 nebula。

3.2 查看集群的组成。

可以看到如下结果:

kbcli cluster list-components mynebula
>
NAME              NAMESPACE   CLUSTER    TYPE              IMAGE
nebula-console    default     mynebula   nebula-console    docker.io/vesoft/nebula-storaged:v3.5.0
nebula-graphd     default     mynebula   nebula-graphd     docker.io/vesoft/nebula-storaged:v3.5.0
nebula-metad      default     mynebula   nebula-metad      docker.io/vesoft/nebula-storaged:v3.5.0
nebula-storaged   default     mynebula   nebula-storaged   docker.io/vesoft/nebula-storaged:v3.5.0

一个 NebulaGraph 集群由 4 个组件组成,包括 console、graphd、metad 和 storaged,与前文介绍的 NebulaGraph 架构呼应。

3.3 查看集群的各个实例

可以看到每个组件各自有多少实例,每个实例是什么规格。

kbcli cluster list-instances mynebula
>
NAME                                       NAMESPACE   CLUSTER    COMPONENT         STATUS    ROLE     ACCESSMODE   AZ       CPU(REQUEST/LIMIT)   MEMORY(REQUEST/LIMIT)   STORAGE     NODE                            CREATED-TIME
mynebula-nebula-console-65844d578b-vf9kz   default     mynebula   nebula-console    Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
mynebula-nebula-graphd-0                   default     mynebula   nebula-graphd     Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
mynebula-nebula-metad-0                    default     mynebula   nebula-metad      Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
mynebula-nebula-storaged-0                 default     mynebula   nebula-storaged   Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800

3.4 查看集群状态

若 Status 为 Running 则表示集群已经创建成功。

kbcli cluster list mynebula
>
NAME       NAMESPACE   CLUSTER-DEFINITION   VERSION         TERMINATION-POLICY   STATUS    CREATED-TIME
mynebula   default     nebula               nebula-v3.5.0   Delete               Running   Jul 09,2023 17:03 UTC+0800

3.5 查看当前数据和分布状态

连接集群后,可通过 show hosts 命令查看当前数据和分布状态。

kbcli cluster connect mynebula
>
Connect to instance mynebula-nebula-console-65844d578b-vf9kz

Welcome!

(root@nebula) [(none)]> SHOW HOSTS;
+------------------------------------------------------------------------------------------+------+----------+--------------+----------------------+------------------------+---------+
| Host                                                                                     | Port | Status   | Leader count | Leader distribution  | Partition distribution | Version |
+------------------------------------------------------------------------------------------+------+----------+--------------+----------------------+------------------------+---------+
| "mynebula-nebula-storaged-0.mynebula-nebula-storaged-headless.default.svc.cluster.local" | 9779 | "ONLINE" | 0            | "No valid partition" | "No valid partition"   | "3.5.0" |
+------------------------------------------------------------------------------------------+------+----------+--------------+----------------------+------------------------+---------+
Got 1 rows (time spent 7.119ms/9.574125ms)

Sun, 09 Jul 2023 08:53:00 UTC

更多 NebulaGraph Statement 可参考 Nebula 官方文档

4. 运维 NebulaGraph 集群

当集群状态为 Running 后,可以登录集群查看信息,并进行常见的运维操作,例如 hscalevscalevolume-expandstartstop 等。

下面以水平扩缩容(hscale)为例,展示对 NebulaGraph 集群的运维过程。可通过kbcli的hscale 命令对集群的指定组件扩缩容。例如,将 nebula-storaged 组件扩展为 3 个节点。

kbcli cluster hscale mynebula --components nebula-storaged --replicas 3

通过kbcli cluster list mynebula命令再次查看集群状态,可以看到状态变更为 HorizontalScaling

NAME       NAMESPACE   CLUSTER-DEFINITION   VERSION         TERMINATION-POLICY   STATUS              CREATED-TIME
mynebula   default     nebula               nebula-v3.5.0   Delete               HorizontalScaling   Jul 09,2023 17:03 UTC+0800

等待几十秒后,扩容成功,再次查看实例信息,可以看到已经有 3 个 nebula-storaged 节点。

kbcli cluster list-instances mynebula
>
NAME                                       NAMESPACE   CLUSTER    COMPONENT         STATUS    ROLE     ACCESSMODE   AZ       CPU(REQUEST/LIMIT)   MEMORY(REQUEST/LIMIT)   STORAGE     NODE                            CREATED-TIME
mynebula-nebula-console-65844d578b-vf9kz   default     mynebula   nebula-console    Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
mynebula-nebula-graphd-0                   default     mynebula   nebula-graphd     Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
mynebula-nebula-metad-0                    default     mynebula   nebula-metad      Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
mynebula-nebula-storaged-0                 default     mynebula   nebula-storaged   Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
mynebula-nebula-storaged-1                 default     mynebula   nebula-storaged   Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:46 UTC+0800
mynebula-nebula-storaged-2                 default     mynebula   nebula-storaged   Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:47 UTC+0800

再次连接 NebulaGraph 集群,查看存储节点信息,可以看到新增的两个节点也已经可用,状态为online

kbcli cluster connect mynebula
>
Connect to instance mynebula-nebula-console-65844d578b-vf9kz

Welcome!

(root@nebula) [(none)]> SHOW HOSTS
+------------------------------------------------------------------------------------------+------+----------+--------------+----------------------+------------------------+---------+
| Host                                                                                     | Port | Status   | Leader count | Leader distribution  | Partition distribution | Version |
+------------------------------------------------------------------------------------------+------+----------+--------------+----------------------+------------------------+---------+
| "mynebula-nebula-storaged-0.mynebula-nebula-storaged-headless.default.svc.cluster.local" | 9779 | "ONLINE" | 0            | "No valid partition" | "No valid partition"   | "3.5.0" |
| "mynebula-nebula-storaged-1.mynebula-nebula-storaged-headless.default.svc.cluster.local" | 9779 | "ONLINE" | 0            | "No valid partition" | "No valid partition"   | "3.5.0" |
| "mynebula-nebula-storaged-2.mynebula-nebula-storaged-headless.default.svc.cluster.local" | 9779 | "ONLINE" | 0            | "No valid partition" | "No valid partition"   | "3.5.0" |
+------------------------------------------------------------------------------------------+------+----------+--------------+----------------------+------------------------+---------+
Got 3 rows (time spent 1.971ms/5.443458ms)

Sun, 09 Jul 2023 10:00:06 UTC

未来我们还会逐步集成 NebulaGraph 的备份/恢复、监控、参数变更等能力。想要了解更多 kbcli支持的运维命令,请参考 CLI 文档

三、用开源的方式解决开源的问题

KubeBlocks 对在 K8s 的环境中部署和使用 NebulaGraph 提供了非常有益的补充,属于“用开源的方式解决开源的问题”。我们可以方便地通过 KubeBlocks 的 Addon 预先定义好 NebulaGraph 所需的各类软硬件配置参数和资源项目,通过自动化的方式帮助用户处理部署和启动过程中的一些可能令人头大的细节。用户只需要几行命令,就可以在几分钟内拉起一个 NebulaGraph 集群,开始图数据库使用之旅。

小猿姐说

文字版集成过程看完觉得不够过瘾、不够刺激?小猿姐邀请了开发同学到本周六的 meetup 现场为你亲自讲解🤩
当然还有 KubeBlocks 核心开发者和 NebulaGraph PD 来分享 K8s Operator 如何设计以及 NebulaGraph 的使用秘籍。现场还备好了周边、茶歇~动动手指,提交报名,小猿姐和社区小伙伴们等你来哟~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是在Linux下只使用Tomcat部署集群的详细骤: 1. 准备Tomcat安装包和JDK安装包,并在Linux服务器上安装JDK。 (1)下载Tomcat和JDK安装包,可以从官方网站或镜像站点下载。 (2)安装JDK,可以使用yum或apt-get等包管理工具进行安装,也可以手动安装。 2. 将Tomcat安装包解压到不同的目录,每个目录对应一个Tomcat实例。 (1)创建目录:`mkdir -p /opt/tomcat/instance1` (2)解压Tomcat安装包:`tar -zxvf apache-tomcat-9.0.41.tar.gz -C /opt/tomcat/instance1 --strip-components=1` (3)创建目录:`mkdir -p /opt/tomcat/instance2` (4)解压Tomcat安装包:`tar -zxvf apache-tomcat-9.0.41.tar.gz -C /opt/tomcat/instance2 --strip-components=1` 3. 修改每个Tomcat实例的配置文件,包括server.xml、catalina.properties等,确保每个Tomcat实例的端口、虚拟主机等都不相同。 (1)修改server.xml文件,将端口号改为不同的值,例如: ``` <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> ``` (2)修改catalina.properties文件,设置每个Tomcat实例的名称,例如: ``` # 设置 Tomcat 实例名称 server.instance.name=instance1 ``` (3)根据实际情况修改其他配置文件,例如web.xml、context.xml等。 4. 在每个Tomcat实例的bin目录下,创建startup.sh和shutdown.sh脚本,用于启动和关闭Tomcat实例。 (1)创建startup.sh脚本: ``` #!/bin/sh # 启动 Tomcat 实例 /opt/tomcat/instance1/bin/startup.sh ``` (2)创建shutdown.sh脚本: ``` #!/bin/sh # 关闭 Tomcat 实例 /opt/tomcat/instance1/bin/shutdown.sh ``` (3)分别为每个Tomcat实例创建startup.sh和shutdown.sh脚本。 5. 启动Tomcat实例,检查是否能够正常响应请求。 (1)执行startup.sh脚本启动Tomcat实例:`sh /opt/tomcat/instance1/bin/startup.sh` (2)访问Tomcat实例的网站,例如:http://localhost:8081/,检查是否能够正常显示页面。 6. 配置Tomcat集群间的负载均衡,可使用mod_jk或mod_proxy_balancer等工具,将请求均衡地分发到不同的Tomcat实例中。 (1)安装mod_jk或mod_proxy_balancer模块,可以使用yum或apt-get等包管理工具进行安装,也可以手动安装。 (2)修改每个Tomcat实例的server.xml文件,添加以下内容: ``` <!-- 定义 AJP 连接器 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> ``` (3)修改每个Tomcat实例的worker.properties文件,添加以下内容: ``` # 定义 Tomcat 集群中的实例 worker.list=worker1,worker2 worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009 worker.worker2.type=ajp13 worker.worker2.host=localhost worker.worker2.port=8010 ``` (4)在其中一台Tomcat实例中创建mod_jk.conf文件,添加以下内容: ``` # 定义 Tomcat 集群 JkWorkersFile /opt/tomcat/conf/worker.properties JkLogFile /var/log/httpd/mod_jk.log JkLogLevel info JkMount /* worker1 ``` (5)在Apache或Nginx中配置mod_jk,将请求分发到Tomcat集群中的某个实例。 7. 测试Tomcat集群的可用性和稳定性,确保每个Tomcat实例都能够正常响应请求,并且在其中某个Tomcat实例宕机时,其他Tomcat实例能够顶替其工作。 以上是在Linux下只使用Tomcat部署集群的详细骤,如果有不清楚的地方可以再问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值