Skip to main content

moregeek program

基于阿里云 k8s 的 dolphindb 套件部署教程_dolphindb的博客-多极客编程

1. 简介

阿里云容器服务 Kubernetes 版(Alibaba Cloud Container Service for Kubernetes,简称 ACK)是全球首批通过 Kubernetes 一致性认证的服务平台,提供高性能的容器应用管理服务,支持企业级 Kubernetes 容器化应用的生命周期管理,让您轻松高效地在云端运行 Kubernetes 容器化应用。DolphinDB 推出 DolphinDB MGR 服务,以帮助用户轻松在 ACK 上部署 DolphinDB 集群。


2. 环境准备

部署前,先准备一台能够连接到阿里云控制台的主机,预置环境如下:

  • 服务器可以连接​​http://www.google.com​
  • 安装 Helm3 (3.7.0以上):用于安装 DolphinDB MGR
  • 安装版本号不小于v1.12的 Kubernetes 命令行工具​​kubectl​
  • 版本号不小于v3.0.15的​​aliyun-cli​​​,并且​​配置 aliyun-cli​
  • ​Terraform​​,本文使用的版本号为v1.2.3。

因为阿里云的​​云命令行​​中已经预装并配置好了所有工具,所以推荐使用云命令行服务。

要验证 ​​aliyun-cli的配置​​是否正确,输入如下命令进行验证:

aliyun configure list

基于阿里云 K8S 的 DolphinDB 套件部署教程_阿里云

期望输出:

Profile   | Credential         | Valid   | Region           | Language
--------- | ------------------ | ------- | ---------------- | --------
default * | AK:***fnY | Valid | cn-hangzhou | zh

基于阿里云 K8S 的 DolphinDB 套件部署教程_容器_02

3. 资源以及权限

默认配置下,会创建以下资源:

  • 一个新的 VPC
  • 一个托管版的 ACK 集群和一系列 worker 节点:
  • 属于一个伸缩组的2台 ECS 实例(4核8GB)。托管版 Kubernetes 的默认伸缩组中必须至少包含两台实例,用于承载整个系统服务

需要具备以下权限,才能成功部署一个完整的集群:

  • AliyunECSFullAccess
  • AliyunESSFullAccess
  • AliyunVPCFullAccess
  • AliyunSLBFullAccess
  • AliyunCSFullAccess
  • AliyunEIPFullAccess
  • AliyunECIFullAccess
  • AliyunVPNGatewayFullAccess
  • AliyunNATGatewayFullAccess


4. 部署 ACK, DolphinDB MGR 和 DolphinDB 集群

使用如下步骤部署 ACK, DolphinDB MGR 和 DolphinDB 集群。


4.1 设置目标 region 和阿里云密钥(也可以写入 main.tf 文件中)

export reginotallow=hangzhou && \
export ACCESS_KEY="LTAI*******" && \
export secret_key="y1xK*******"

基于阿里云 K8S 的 DolphinDB 套件部署教程_DolphinDB_03

4.2 使用 Terraform 安装 DolphinDB

部署的 ​​main.tf​​ 如下:

terraform {
required_providers {
alicloud={
source="aliyun/alicloud"
versinotallow="1.161.0"
}
}
}
provider "alicloud" {
# 填入您的账号 Access Key
access_key = "xxxxxxxxxxx"
# 填入您的账号 Secret Key
secret_key = "xxxxxxxxxxx"
# 填入想创建的 Region
region = "cn-hangzhou"
}
variable "k8s_name_prefix" {
description = "The name prefix used to create managed kubernetes cluster."
default = "tf-ack"
}
resource "random_uuid" "this" {}
# 默认资源名称
locals {
k8s_name = substr(join("-", [var.k8s_name_prefix, random_uuid.this.result]), 0, 63)
new_vpc_name = "vpc-for-${local.k8s_name}"
new_vsw_name = "vsw-for-${local.k8s_name}"
log_project_name = "log-for-${local.k8s_name}"
}
# 节点 ECS 实例配置
data "alicloud_instance_types" "default" {
cpu_core_count = 4
memory_size = 8
kubernetes_node_role = "Worker"
}
// 满足实例规格的 AZ
data "alicloud_zones" "default" {
available_instance_type = data.alicloud_instance_types.default.instance_types[0].id
}
# 专有网络
resource "alicloud_vpc" "default" {
vpc_name = local.new_vpc_name
cidr_block = "10.1.0.0/21"
}
# 交换机
resource "alicloud_vswitch" "vswitches" {
vswitch_name = local.new_vsw_name
vpc_id = alicloud_vpc.default.id
cidr_block = "10.1.1.0/24"
zone_id = data.alicloud_zones.default.zones[0].id
}
# Kubernetes 托管版
resource "alicloud_cs_managed_kubernetes" "default" {
# Kubernetes集群名称
name = local.k8s_name
# 新的 Kubernetes 集群将位于的 vswitch。指定一个或多个 vswitch 的 ID。它必须在 availability_zone 指定的区域中。
worker_vswitch_ids = split(",", join(",", alicloud_vswitch.vswitches.*.id))
# 是否在创建 Kubernetes 集群时创建新的 NAT 网关。默认为 true。
new_nat_gateway = true
# 节点的 ECS 实例类型。
worker_instance_types = [data.alicloud_instance_types.default.instance_types[0].id]
# Kubernetes 群集的总工作节点数。默认值为 3。最大限制为 50。
worker_number = 2
# ssh 登录群集节点的密码。
password = "Yourpassword1234"
# pod 网络的 CIDR 块。当cluster_network_type设置为 flannel,你必须设定该参数。它不能与 VPC CIDR 相同,并且不能与 VPC 中的 Kubernetes 群集使用的 CIDR 相同,也不能在创建后进行修改。群集中允许的最大主机数量:256。
pod_cidr = "172.20.0.0/16"
# 服务网络的 CIDR 块。它不能与 VPC CIDR 相同,不能与 VPC 中的 Kubernetes 群集使用的 CIDR 相同,也不能在创建后进行修改。
service_cidr = "172.21.0.0/20"
# 是否为 Kubernetes 的节点安装云监控。
install_cloud_monitor = true
# 是否为 API Server 创建 Internet 负载均衡。默认为 false。
slb_internet_enabled = true
# 节点的系统磁盘类别。其有效值为 cloud_ssd 和 cloud_efficiency。默认为 cloud_efficiency。
worker_disk_category = "cloud_efficiency"
# 节点的数据磁盘类别。其有效值为 cloud_ssd 和 cloud_efficiency,如果未设置,将不会创建数据磁盘。
worker_data_disk_category = "cloud_ssd"
# 节点的数据磁盘大小。有效值范围 [20, 32768],以 GB 为单位。w当设置了 worker_data_disk_category 时,默认为 40。
worker_data_disk_size = 200
}

基于阿里云 K8S 的 DolphinDB 套件部署教程_容器_04

复制上述文件到服务器中,命名为 ​​main.tf​​​,并修改 ​​access_key​​​ 以及 ​​secret_key​​ 为个人阿里云账号。

provider "alicloud" {
# 填入您的账号 Access Key
access_key = "xxxxxxxxxxx"
# 填入您的账号 Secret Key
secret_key = "xxxxxxxxxxx"
# 填入想创建的 Region
region = "cn-hangzhou"
}

基于阿里云 K8S 的 DolphinDB 套件部署教程_阿里云_05

也可修改配置 ​​alicloud_instance_types​​​ 的 ​​cpu_core_count​​​ 和 ​​memory_size​​(默认值分别是4和8)。

配置完成后,使用 ​​terraform​​ 命令初始化并部署集群:

terraform init

基于阿里云 K8S 的 DolphinDB 套件部署教程_阿里云_06

注意:初始化时需要连接外网下载 Terraform 的 aliyun-provider 组件

​apply​​​ 过程中需要输入 ​​yes​​ 来确认执行:

terraform apply

基于阿里云 K8S 的 DolphinDB 套件部署教程_时序数据库_07

假如在运行 ​​terraform apply​​​ 时出现报错,可根据报错信息(例如缺少权限)进行修复,之后再次运行 ​​terraform apply​​。

整个安装过程大约需要5至10分钟。安装完成后会输出集群的关键信息。若需要重新查看这些信息,可以运行 ​​terraform output​​:

random_uuid.this: Creating...
random_uuid.this: Creation complete after 0s [id=f07dcc00-e8f3-ac96-180e-174f40a5bdc3]
alicloud_vpc.default: Creating...
alicloud_vpc.default: Still creating... [10s elapsed]
alicloud_vpc.default: Creation complete after 11s [id=vpc-bp11lvxzkbyh9em3fntg2]
alicloud_vswitch.vswitches: Creating...
alicloud_vswitch.vswitches: Creation complete after 6s [id=vsw-bp1g40bjmyfz6ck22sbo4]
alicloud_cs_managed_kubernetes.default: Creating...
alicloud_cs_managed_kubernetes.default: Still creating... [10s elapsed]
···
alicloud_cs_managed_kubernetes.default: Creation complete after 8m32s [id=c2a678d17c9b64c0b8d962c55495fce4b]
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.

基于阿里云 K8S 的 DolphinDB 套件部署教程_时序数据库_08

需要等待以下过程均完成(总耗时约5~20分钟),才会显示结果。

集群创建完成后,在阿里云中的容器服务中,查看创建的所有资源。

基于阿里云 K8S 的 DolphinDB 套件部署教程_阿里云_09


4.3 配置 StorageClass

本小节介绍如何为不同的存储类型配置 StorageClass,包括创建 ACK 集群后默认存在的 alicloud -disk-ssd/alicloud-disk-essd 存储类型。

  • alicloud -disk-ssd/alicloud-disk-essd
    通过上述方法创建 ACK 集群后,会自带一个 alicloud -disk-ssd/alicloud-disk-essd 存储类型的 StorageClass。
  • 本地存储
    部署 local volume provisioner,详细请见参阅​​​k8s_deployment​​。

4.4 安装部署 DolphinDB MGR 和 DolphinDB 集群

首先介绍如何通过 kubectl 客户端或 CloudShell 快速连接到 ACK 集群,详细见​​通过kubectl快速使用ACK (aliyun.com)​​中步骤三。

配置完成后,使用 DolphinDB MGR 部署 DolphinDB 集群的步骤参见 ​​k8s_deployment​​。

注意:需要部署公网 IP 以及阿里云安全组去访问 DolphinDB-mgr 组件,以此来部署 DolphinDB 集群。

4.5 配置公网以及阿里云安全组

打开专有网络 VPC 页面 -> 弹性公网,创建弹性公网 IP,并且绑到到对应的 ECS 服务器上。详细步骤见 ​​绑定ECS实例 (aliyun.com)​​。如图所示 ECS 服务器已经绑定到公网121.40.216.37上。

基于阿里云 K8S 的 DolphinDB 套件部署教程_Kubernetes_10


打开 ECS 管理控制台,配置安全组。详细见​​创建安全组 (aliyun.com)​​。本节配置结果如下:

基于阿里云 K8S 的 DolphinDB 套件部署教程_阿里云_11

至此,完成了在阿里云 ACK 上部署 DolphinDB 部署的所有操作。

注意:

配置弹性公网后,外部访问 DolphinDB MGR 需要用公网 IP 以及 PORT 访问,本例即 121.40.216.37:$PORT


5. 销毁集群

销毁 Dolphindb 集群详见 ​​k8s_deployment​​。

通过如下命令销毁 ACK 集群:

terraform destroy

基于阿里云 K8S 的 DolphinDB 套件部署教程_容器_12

假如 Kubernetes 集群没有创建成功,那么在 destroy 时会出现报错,无法进行正常清理。此时需要手动将 Kubernetes 资源从本地状态中移除:

terraform state list
terraform state rm module.ack.alicloud_cs_managed_kubernetes.default

基于阿里云 K8S 的 DolphinDB 套件部署教程_容器_13

销毁集群操作需要执行较长时间。

注意:

组件挂载的云盘需要在阿里云管理控制台中手动删除。


6. 常见问题

6.1 pv 无法正常动态生成

具体错误信息如下:

0/2 nodes are available: 2 pod has unbound immediate PersistentVolumeClaims. 0/2 nodes are available: 2 pod has unbound immediate PersistentVolumeClaims. 0/2 nodes are available: 2 pod has unbound immediate PersistentVolumeClaims. 0/2 nodes are available: 2 pod has unbound immediate PersistentVolumeClaims. 0/2 nodes are available: 2 pod has unbound immediate PersistentVolumeClaims. 0/2 nodes are available: 2 pod has unbound immediate PersistentVolumeClaims. 0/2 nodes are available: 2 pod has unbound immediate PersistentVolumeClaims. 0/2 nodes are available: 2 pod has unbound immediate PersistentVolumeClaims.

基于阿里云 K8S 的 DolphinDB 套件部署教程_阿里云_14

原因和解决方案

  • 阿里云盘有最小磁盘空间限制,最小为20GB。这种情况,设置 PV 的磁盘空间大于20GB,才能动态创建 PV。


6.2 配置任务时,系统提示资源不足

具体错误信息如下:

xxxx resource is insufficient

基于阿里云 K8S 的 DolphinDB 套件部署教程_阿里云_15

原因和解决方案

  • 所在的区域确实无资源了。这种情况,请联系售后查看资源情况和备选方案。
  • 新建阿里云服务器的任务跨国际站点,导致没有对应的资源。这种情况,请修改任务配置的站点,如修改为 cn-hangzhou。


©著作权归作者所有:来自51CTO博客作者DolphinDB的原创作品,请联系作者获取转载授权,否则将追究法律责任

开源分析数据库clickhouse和开源esproc spl的性能对比_小虚竹的博客-多极客编程

ClickHouse vs Oracle开源分析数据库ClickHouse以快著称,真的如此吗?我们通过对比测试来验证一下。先用ClickHouse(简称CH)、Oracle数据库(简称ORA)一起在相同的软硬件环境下做对比测试。测试基准使用国际广泛认可的TPC-H,针对8张表,完成22条SQL语句定义的计算需求(Q1到Q22)。测试采用单机12线程,数据总规模100G。TPC-H对应的SQL都比

mysql巡检查看参数_mysql dba攻坚之路的博客-多极客编程

锁等待Innodb_row_lock_current_waits 当前等待的待锁定的行数Innodb_row_lock_waits 一行锁定必须等待的总时长Table_locks_waited 表锁等待次数 mysql 锁监控表级锁 Table_locks_waited Table_locks_immediate行级锁 Innodb_row_lock_current_waits 当前等

postgresql逻辑复制解密_京东云官方的博客-多极客编程

在数字化时代的今天,我们都认同数据会创造价值。为了最大化数据的价值,我们不停的建立着数据迁移的管道,从同构到异构,从关系型到非关系型,从云下到云上,从数仓到数据湖,试图在各种场景挖掘数据的价值。而在这纵横交错的数据网络中,逻辑复制扮演着及其重要的角色。让我们将视角从复杂的网络拉回其中的一个端点,从PostgreSQL出发,对其逻辑复制的原理进行解密。1 概念与原理逻辑复制,是基于复制标识复制数据及

mysqldump备份期间做ddl会发生什么_mysql dba攻坚之路的博客-多极客编程

MDL锁当对一个表做增删改查操作的时候,加 MDL 读锁;当要对表做结构变更操作的时候,加 MDL 写锁。MDL 会直到事务提交才释放,在做表结构变更的时候,你一定要小心不要导致锁住线上查询和更新。读写互斥读锁之间不互斥,因此你可以有多个线程同时对一张表增删改查。读写锁之间、写锁之间是互斥的,用来保证变更表结构操作的安全性。因此,如果有两个线程要同时给一个表加字段,其中一个要等另一个执行完才能开始

lua脚本在redis事务中的应用实践_京东云官方的博客-多极客编程

使用过Redis事务的应该清楚,Redis事务实现是通过打包多条命令,单独的隔离操作,事务中的所有命令都会按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务中的命令要么全部被执行,要么全部都不执行(原子操作)。但其中有命令因业务原因执行失败并不会阻断后续命令的执行,且也无法回滚已经执行过的命令。如果想要实现和MySQL一样的事务处理可以使用Lua脚本来实现,Lua脚本中

百度交易中台之资产系统架构浅析_百度geek说的博客-多极客编程

作者 | 小黑哥导读:百度交易中台资产系统是基于百度收银台和交易系统下,对公司内C端个人现金、虚拟类资产(虚拟币等)业务进行收拢、管理,提供安全可靠且符合国家清算规范的用户资产管理能力。交易中台资产系统基于现有交易中台部分能力,一站式解决业务方对用户资产管理、平台分账、对账、财报等问题,快速支持资产类业务发展。全文5085字,预计阅读时间13分钟。一、系统介绍百度交易中台支持百度集团内部的代收代付

微信原生组件|基于小程序实现音视频通话_mb62c3fbf0624ad的博客-多极客编程

1 微信小程序原生推拉流组件功能简介本文将介绍如何使用微信小程序原生推拉流组件 \ 进行推拉流,快速实现一个简单的实时音视频通话。由于微信小程序原生推拉流组件使用起来比较复杂,推荐开发者使用即构封装的音视频SDK \ 组件实现视频通话,可参考 ​​实现视频通话​​。2 实现微信小程序音视频通话的前提条件在实现基本的实时音视频功能之前,请确保:已在项目中集成 ZEGO Express SDK 即构音

开源分析数据库clickhouse和开源esproc spl的性能对比_小虚竹的博客-多极客编程

ClickHouse vs Oracle开源分析数据库ClickHouse以快著称,真的如此吗?我们通过对比测试来验证一下。先用ClickHouse(简称CH)、Oracle数据库(简称ORA)一起在相同的软硬件环境下做对比测试。测试基准使用国际广泛认可的TPC-H,针对8张表,完成22条SQL语句定义的计算需求(Q1到Q22)。测试采用单机12线程,数据总规模100G。TPC-H对应的SQL都比

postgresql逻辑复制解密_京东云官方的博客-多极客编程

在数字化时代的今天,我们都认同数据会创造价值。为了最大化数据的价值,我们不停的建立着数据迁移的管道,从同构到异构,从关系型到非关系型,从云下到云上,从数仓到数据湖,试图在各种场景挖掘数据的价值。而在这纵横交错的数据网络中,逻辑复制扮演着及其重要的角色。让我们将视角从复杂的网络拉回其中的一个端点,从PostgreSQL出发,对其逻辑复制的原理进行解密。1 概念与原理逻辑复制,是基于复制标识复制数据及

#yyds干货盘点#dns域名解析过程_文本、的博客-多极客编程

DNS域名解析过程我们都知道在浏览器通过域名发起一个网络请求的时候,会有DNS服务器将域名解析成ip地址,以便向正确的ip地址发送请求,那么这一个过程具体是怎么处理的呢?今天整理了一下DNS域名解析的过程。大致分为10步:第一步浏览器会检查缓存中有没有域名对应的ip地址,这个缓存是有过期时长的,一般是几分钟到几小时不等。第二步如果浏览器缓存没有,那么就检查操作系统的hosts文件,比如window

“wpf老矣,尚能饭否”—且说说wpf今生未来(上):担心_葡萄城技术团队的博客-多极客编程

近日微软公布了最新的WPF路线图,一片热议;对于老牌控件提供商葡萄城来说,这是WPF系列控件一个重要的机遇,因此,Spread Studio for WPF产品做了一次重要更新,并随着Spread Studio 8.0发布。鉴于此,选择翻译并整理了一篇自codeproject的文章:《Is WPF dead: the present and future of W

asp.net 5系列教程 (三):view components介绍_葡萄城技术团队的博客-多极客编程

在ASP.NET MVC 6中,view components (VCs) 功能类似于虚拟视图,但是功能更加强大。 VCs兼顾了视图和控制器的优点,你可以把VCs 看作一个Mini 控制器。 在ASP.NET MVC 6中,view components (VCs) 功能类似于虚拟视图,但是功能更加强大。 VCs兼顾了视图和控制器的优点,你可以把VCs 看