当前位置: 首页 > news >正文

云上自动部署丨使用 Terraform 在 AWS 上搭建 DolphinDB

HashiCorp Terraform 是一款基础架构即代码工具,旨在实现 "Write, Plan, and Create Infrastructure as Code"。它通过配置文件来描述云资源的拓扑结构,包括虚拟机、存储账户和网络接口。Terraform 几乎支持市面上所有的云服务,能够通过代码管理 IT 资源,并自动化部署资源,从而避免手动部署可能引发的错误。此外,Terraform 的命令行接口(CLI)简化了将配置文件部署到 AWS 或其他云平台的过程。

本教程将介绍如何通过 Terraform 快速地在 AWS 部署 DolphinDB 单节点和高可用集群。

1. Terraform 概述

Terraform 包含以下功能:

  • 基础设施即代码:Terraform 使用特定的配置语言 HCL(Hashicorp Configuration Language) 来描述基础设施资源。这使得 Terraform 能够以代码的形式描述解决方案或基础架构,并实现对它们的版本控制和管理。同时,通用的解决方案和基础架构可以以模板的形式便捷地进行共享和复用。
  • 执行计划:在执行 Terraform 代码之前,可以通过 terraform plan 命令解析 Terraform 模板,并生成一个可执行的计划。这个计划包含了当前模板需要创建或变更的资源及其属性。用户预览执行计划以确认模板的内容是否正确。在确认无误后,通过 terraform apply 命令来执行计划,以完成所定义资源的创建或变更。这个过程允许在实际操作之前对变更内容进行审核和验证。
  • 资源拓扑:Terraform 根据模板中的定义来构建资源拓扑图。Terraform 并行创建无依赖关系的资源,以提高执行效率。而对于存在依赖关系的资源,Terraform 则优先执行被依赖的资源,以确保创建或修改资源的顺序正确。
  • 自动化变更:Terraform 拥有强大的自动化变更功能。通过 terraform apply 命令,可以实现复杂资源的无缝变更。Terraform 不仅简化了创建、修改和删除等变更操作,还保持了计划的一致性。此外,Terraform 还提供了回滚和恢复机制,能够有效地减少人为错误,提高系统的可靠性和稳定性。

2. 使用前提

2.1 准备环境

在进行 Terraform 相关操作之前,请确保完成以下准备工作:

  • 安装 Terraform CLI (版本1.2.0及以上)
  • 安装 AWS CLI
  • 拥有 AWS account 和 associated credentials

完成上述步骤后,执行以下命令,验证环境配置的正确性:

$ terraform -help
Usage:terraform [-version] [-help] <command> [args]The available commands for execution are listed below.
The most common, useful commands are shown first, followed by
less common or more advanced commands. If you're just getting
started with Terraform, stick with the common commands. For the
other commands, please read the help and docs before usage.
#...$ aws --version
aws-cli/2.10.0 Python/3.11.2 Linux/4.14.133-113.105.amzn2.x86_64 botocore/2.4.5

2.2 设置 AWS 凭据

在使用 Terraform 前,AWS 会对 Terraform 进行身份验证,需要设置AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY两个环境变量。其中 AWS_ACCESS_KEY_ID 用来设置 Access Key;AWS_SECRET_ACCESS_KEY 用来设置 Secret Key。在 Linux 或 macOS 环境下,通过 export 命令进行设置:

export AWS_ACCESS_KEY_ID=YourAccessKeyId
export AWS_SECRET_ACCESS_KEY=YourSecretAccessKey

在 Windows 环境下,通过 set 命令进行设置:

set AWS_ACCESS_KEY_ID=YourAccessKeyId
set AWS_SECRET_ACCESS_KEY=YourSecretAccessKey

3 部署 DolphinDB 单节点

3.1 创建 Terraform 项目

创建一个 Terraform 项目文件夹,以下是项目文件夹的结构:

project_directory
|-- main.tf
|-- variables.tf
|-- files.tfvars

其中,每个文件的作用为:

  • main.tf: Terraform 项目的入口文件,其中定义了基础设施资源的配置和参数。用户通过编写 main.tf 文件来定义要创建的云资源、网络设置以及它们之间的关系等。
  • variables.tf:用于定义和声明 Terraform 配置中使用的变量。变量是可以在 Terraform 代码中引用的参数,有助于提高代码的复用性和灵活性。变量可以有不同的类型,如字符串、数字、布尔值、列表和字典等。用户可以通过 variables.tf 来定义项目中需要的各种参数,如区域、实例类型、密钥等。
  • files.tfvars:用于存储 Terraform 配置中所使用的变量的值,例如指定区域、实例类型、密钥等。这些变量可以在 Terraform 模块中定义,并且在部署时可以通过 files.tfvars 文件来指定它们的具体取值。这种做法使得在不同环境中使用相同的 Terraform 配置变得更加灵活,因为可以通过不同的 .tfvars 文件来为不同环境提供不同的变量值,而无需修改实际的 Terraform 配置文件。

3.2 配置 main.tf 文件

以下展示了 main.tf 文件的部分内容,完整代码请参考本教程结尾附件部分:

# 声明 Terraform 提供者及其版本
terraform {......
}# 配置 AWS 提供者
provider "aws" {......
}# 创建 AWS 实例资源(dolphindb_server)
resource "aws_instance" "dolphindb_server" {......
}# 创建 AWS EBS 卷资源(data)
resource "aws_ebs_volume" "data" {......
}# 创建 AWS EBS 卷附加资源(data_attachment)
resource "aws_volume_attachment" "data_attachment" {......
}# 创建 null_resource(mount_data_volume),用于在实例上挂载数据卷
resource "null_resource" "mount_data_volume" {......
}

以上代码实现的具体内容为:

  1. 在已有的 VPC 和子网中生成 1 个 EC2 和 1 个 EBS 卷
  2. 将 EBS 挂载到 EC2 上
  3. 下载 DolphinDB
  4. 修改 DolphinDB 的配置文件和证书,并启动单节点

3.3 配置 variables.tf 文件

以下展示了 variables.tf 文件的部分内容,完整代码请参考本教程结尾附件部分:

variable "region" {type        = string
}variable "instance_name" {description = "name of EC2"type        = stringdefault     = "TestDolphinDBServerInstance"
}# EC2 实例的其他参数内容已省略...variable "ddbversion" {description = "version of DolphinDB to install"type        = string
}variable "dolphindb_cfg_content" {# 替换为您的dolphindb.cfg内容type=string
}variable "replace_dolphindb_lic" {description = "whether to replace dolphindb.lic"type        = booldefault     = true
}variable "dolphindb_lic_content" {type=string 
}

该文件记录配置 DolphinDB 单节点所需要的参数定义说明如下:

  1. region:必填项,string 类型,要创建的 EC2 所在的 region,比如 us-west-2
  2. instance_name:选填项,string 类型,创建的 EC2 的名字,默认为 TestDolphinDBServerInstance。
  3. ami_id:选填项,string 类型,EC2 使用的 AMI 的 ID。默认为 ami-0fd48c6031f8700df (AWS 上的 centOS 7 镜像),该镜像包含了启动实例所需的操作系统和应用程序。可以在 AWS 公共 AMI 页面查找需要的 AMI ID。
  4. instance_type:选填项,string 类型,EC2 的机器类型,默认为 t2.micro。可以根据需求,在 EC2 实例类型 页面选择其他实例类型。
  5. subnet_id:必选项,string 类型,EC2 将处于的子网 ID。
  6. key_name:必选项,string 类型,用来登录 EC2 的密钥对。
  7. volume_size:选填项,number 类型,root volume 的大小,默认为10(单位为GB)。
  8. volume_type:选填项,string 类型,root volume 的类型,默认为 gp3,其他可选项包括 gp2, io1, st1, sc1 等。
  9. az:必填项,string 类型,新建 EBS 所处的可用区。
  10. datavolume_type:选填项,string 类型,新建 EBS 的类型,默认为 gp3,其他可选项包括 gp2, io1, st1, sc1 等。
  11. datavolume_size:选填项,number 类型,新建 EBS 的大小,默认为100 (单位为GB)。
  12. destination:选填项,string 类型,新建 EBS 在 EC2 上的挂载点的绝对路径,默认为 /data。
  13. attachment_device_name:选填项,string 类型,新建 EBS 挂载在 EC2 上的设备名称,默认为 /dev/xvdb。
  14. key_location:必填项,string 类型,密钥对文件的绝对路径。为了将 EBS 挂载到指定挂载点,需要通过 SSH 连接到 EC2,所以需要提供登录 EC2 的密钥对文件的绝对路径。
  15. ddb_username:选填项,string 类型,EC2 的用户名称。默认为 centos。
  16. package_manager_name:选填项,string 类型,包管理器的名称。例如,RHEL 系列的包管理器名为 yum, DEBIAN 系列的包管理器名为 apt-get。默认为 yum。
  17. security_group_ids:必填项,list(string) 类型,安全组 id。值在 files.tfvar 中定义。注意,DolphinDB 单节点默认使用 8848 作为端口,所以 EC2 所使用的安全组的 inbound rules 里必须允许外界访问 8848 端口。
  18. ddbversion:必填项,string 类型,DolphinDB 的版本。可在 DolphinDB 官网查看最新版本。
  19. dolphindb_cfg_content:选填项,string 类型,DolphinDB 配置文件。值在 files.tfvar 中定义。
  20. replace_dolphindb_lic:选填项,bool 类型,是否替换证书。默认为 true,表示替换证书。若设置为 false,则不替换,使用社区版证书。
  21. dolphindb_lic_content:必填项,bool 类型,证书内容。值在 files.tfvar 中定义。

3.4 配置 files.tfvars 文件

以下展示了 files.tfvars文件的部分内容,完整代码请参考本教程结尾附件部分:

dolphindb_cfg_content= <<EOF
localSite=localhost:8848:local8848
mode=single
maxMemSize=16
maxConnections=512
workerNum=4
localExecutors=3
maxBatchJobWorker=4
dataSync=1
OLAPCacheEngineSize=2
TSDBCacheEngineSize=1
newValuePartitionPolicy=add
maxPubConnections=64
subExecutors=4
perfMonitoring=true
lanCluster=0
EOFdolphindb_lic_content= <<EOF
......
EOFsecurity_group_ids=[<your security group ids>]

files.tfvars 文件是记录 Terraform 变量的文件,其中包含了一些关键配置项。以下是对每个变量的简要说明:

  1. dolphindb_cfg_content:DolphinDB 配置文件内容,包含了 DolphinDB 服务器的配置参数。如果需要详细的配置参数信息,可以参考 DolphinDB 官方配置说明:参数配置。
  2. dolphindb_lic_content:DolphinDB 的证书内容,用于许可验证。可在这里配置社区或企业版 license。
  3. security_group_ids:安全组 ID,用于定义 EC2 实例的入站和出站流量规则。

3.5 执行 Terraform 命令

通过终端进入 Terraform 项目文件夹:

cd /path/to/Dolphindb-Terraform

初始化目录:

terraform init

部署实例,可以根据实际的资源和需求来填写 variables.tf 文件中定义的变量:

terraform apply -var "region=<your_region>" -var "subnet_id=<your_subnet_id>" 
-var "key_name=<your_key_pair_name>" -var "ddbversion=2.00.10.8" -var "az=<your_az>"  
-var "key_location=<absolute_path_of_your_key_pair>" -var-file="files.tfvars"

按照提示输入 yes 确认创建资源。等待 Terraform 完成部署。

3.6 登录 Web 管理界面验证节点正确运行

在浏览器中输入部署服务器 IP 地址和部署端口号(默认是 8848)。若可以打开 Web 管理界面,则表示 DolphinDB 单节点运行正常。打开后的 Web 管理界面如下,以管理员身份(默认账号:admin,默认密码:123456)进行登录。

4. DolphinDB 高可用集群部署

本教程示例集群的部署架构图如下:

请注意该 IP 仅用于示例,实际 IP 由设置的 subnet 以及部署 EC2 实例时自动生成。

部署高可用集群前的要求和准备:

  • 申请企业版 license:因为集群超过了社区版试用授权许可节点数的限制,所以必须申请企业版 license。
  • 部署了数据节点或者计算节点的服务器必须同时部署一个代理节点,以便用于启动和关闭该服务器上的数据节点或计算节点。
  • 在 AWS 中创建1个 VPC,其中至少包含 3 个子网。接下来将在1个 VPC 的不同子网下分别部署 DolphinDB 集群,以构建 DolphinDB 高可用集群。

4.1 创建 Terraform 项目

创建一个 Terraform 项目文件夹,以下是项目文件夹的结构:

project_directory
|-- main.tf
|-- variables.tf
|-- files.tfvars
|-- output.tf

其中,每个文件的作用为:

  • main.tf:Terraform 项目的入口文件,其中定义了基础设施资源的配置和参数。用户通过编写 main.tf 文件来定义要创建的云资源、网络设置等,以及它们之间的关系。
  • variables.tf:用于定义和声明 Terraform 配置中使用的变量。变量是可以在 Terraform 代码中引用的参数,有助于提高代码的复用性和灵活性。变量可以有不同的类型,如字符串、数字、布尔值、列表和字典等。用户可以通过 variables.tf 来定义项目中需要的各种参数,如区域、实例类型、密钥等。
  • files.tfvars:用于存储 Terraform 配置中所使用的变量的值,例如指定区域、实例类型、密钥等。这些变量可以在 Terraform 模块中定义,并且在部署时可以通过 files.tfvars 文件来指定它们的具体取值。这种做法使得在不同环境中使用相同的 Terraform 配置变得更加灵活,因为可以通过不同的 .tfvars 文件来为不同环境提供不同的变量值,而无需修改实际的 Terraform 配置文件。
  • output.tf:用于定义 Terraform 部署完成后需要输出的信息。在这个文件中,你可以指定需要输出的资源属性,比如 IP 地址、域名等,这样在部署完成后,你就可以方便地获取这些信息以便后续的操作或者其他系统使用。

4.2 配置 main.tf 文件

以下展示了 main.tf 文件的部分内容,完整代码请参考本教程结尾附件部分:

# 声明 Terraform 提供者及其版本
terraform {......
}# 配置 AWS 提供者
provider "aws" {......
}# 创建 AWS 实例资源(ddb_p1)
resource "aws_instance" "ddb_p1" {......
}# 创建其他两个 AWS 实例资源(ddb_p2、ddb_p3),与 ddb_p1 的配置类似
# ......# 创建 AWS EBS 卷资源(data_p1)
resource "aws_ebs_volume" "data_p1" {......
}# 创建其他两个 AWS EBS 卷资源(data_p2、data_p3),与 data_p1 的配置类似
# ......# 创建 AWS EBS 卷附加资源(data_attachment_p1)
resource "aws_volume_attachment" "data_attachment_p1" {......
}# 创建其他两个 AWS EBS 卷附加资源,与 data_attachment_p1 配置类似
# ......# 创建 null_resource(mount_data_volume_p1),用于在实例上挂载数据卷
resource "null_resource" "mount_data_volume_p1" {......
}# 创建其他两个 null_resource,用于在 ddb_p2 和 ddb_p3 上挂载数据卷,配置 DolphinDB 等,与 mount_data_volume_p1 的配置类似
# ......

以上代码实现的具体内容为:

  1. 在已有的 VPC 和子网中生成 3 个 EC2 和 3 个 EBS 卷
  2. 分别将 EBS 挂载到 EC2 上
  3. 分别下载 DolphinDB
  4. 修改 DolphinDB 的配置文件和证书,并启动高可用集群

4.3 配置 variables.tf 文件

以下展示了 variables.tf 文件的部分内容,完整代码请参考本教程结尾附件部分:

# EC2 实例的其他参数内容已省略...variable "ddbversion" {description = "version of DolphinDB to install"type        = string
}variable "replace_dolphindb_lic" {description = "whether to replace dolphindb.lic"type        = booldefault     = true
}variable "dolphindb_lic_content" {type = string
}variable "cluster_nodes" {type = string
}variable "cluster_cfg" {type = string
}variable "controller_cfg_p1" {type = string
}variable "agent_cfg_p1" {type = string
}# P2 P3 相关内容已省略...

该文件用于存放 DolphinDB 高可用集群配置所需要的参数定义,其中一部分参数与部署 DolphinDB 单节点时的参数含义相同,这里不再赘述,仅说明不同配置参数:

  1. subnet_id_p1:必选项,string 类型,P1 所在的 EC2 将处于的子网 ID。
  2. subnet_id_p2:必选项,string 类型,P2 所在的 EC2 将处于的子网 ID。
  3. subnet_id_p3:必选项,string 类型,P3 所在的 EC2 将处于的子网 ID。
  4. az_p1:必填项,string 类型,P1 新建 EBS 所处的可用区。
  5. az_p2:必填项,string 类型,P2 新建 EBS 所处的可用区。
  6. az_p3:必填项,string 类型,P3 新建 EBS 所处的可用区。
  7. ddbversion:必填项,string 类型,DolphinDB 的版本。可在 DolphinDB 官网查看最新版本。
  8. replace_dolphindb_lic:选填项,bool 类型,是否替换证书。默认为 true,表示替换证书。若设置为 false,则不替换,使用社区版证书。
  9. dolphindb_lic_content:必填项,bool 类型,证书内容。值在 files.tfvar 中定义。
  10. security_group_ids:必填项,list(string) 类型,安全组 id。值在 files.tfvar 中定义。注意,DolphinDB 使用 8800,8801, 8802端口,所以 EC2 所使用的安全组的 inbound rules 里必须允许外界访问这些端口。
  11. cluster_nodes:选填项,string 类型,集群成员配置参数。值在 files.tfvar 中定义。
  12. cluster_cfg:选填项,string 类型,数据节点和计算节点配置变量。值在 files.tfvar 中定义。
  13. controller_cfg_p1:选填项,string 类型,P1 控制节点配置变量。值在 files.tfvar 中定义。
  14. agent_cfg_p1:选填项,string 类型,P1 代理节点配置变量。值在 files.tfvar 中定义。
  15. controller_cfg_p2:选填项,string 类型,P2 控制节点配置变量。值在 files.tfvar 中定义。
  16. agent_cfg_p2:选填项,string 类型,P2 代理节点配置变量。值在 files.tfvar 中定义。
  17. controller_cfg_p3:选填项,string 类型,P3 控制节点配置变量。值在 files.tfvar 中定义。
  18. agent_cfg_p3:选填项,string 类型,P3 代理节点配置变量数。值在 files.tfvar 中定义。

4.4 配置 files.tfvars 文件

在 files.tfvars 文件中添加以下内容:

# 企业版 license
dolphindb_lic_content = <<EOF
EOFsecurity_group_ids = []cluster_nodes = <<EOF
localSite,mode
P1_PRI_IP:8800:controller1,controller
P2_PRI_IP:8800:controller2,controller
P3_PRI_IP:8800:controller3,controller
P1_PRI_IP:8801:agent1,agent
P1_PRI_IP:8802:datanode1,datanode
P1_PRI_IP:8803:computenode1,computenode
P2_PRI_IP:8801:agent2,agent
P2_PRI_IP:8802:datanode2,datanode
P2_PRI_IP:8803:computenode2,computenode
P3_PRI_IP:8801:agent3,agent
P3_PRI_IP:8802:datanode3,datanode
P3_PRI_IP:8803:computenode3,computenode
EOFcluster_cfg = <<EOF
maxMemSize=32
maxConnections=512
workerNum=4
maxBatchJobWorker=4
OLAPCacheEngineSize=2
TSDBCacheEngineSize=2
newValuePartitionPolicy=add
maxPubConnections=64
subExecutors=4
lanCluster=0
enableChunkGranularityConfig=true
datanode1.publicName=P1_PUB_IP
computenode1.publicName=P1_PUB_IP
datanode2.publicName=P2_PUB_IP
computenode2.publicName=P2_PUB_IP
datanode3.publicName=P3_PUB_IP
computenode3.publicName=P3_PUB_IP
EOFcontroller_cfg_p1 = <<EOF
mode=controller
localSite=P1_PRI_IP:8800:controller1
dfsReplicationFactor=2
dfsReplicaReliabilityLevel=1
dataSync=1
workerNum=4
maxConnections=512
maxMemSize=8
dfsHAMode=Raft
lanCluster=0
publicName=P1_PUB_IP
EOFagent_cfg_p1 = <<EOF
mode=agent
localSite=P1_PRI_IP:8801:agent1
controllerSite=P1_PRI_IP:8800:controller1
sites=P1_PRI_IP:8801:agent1:agent,P1_PRI_IP:8800:controller1:controller,P2_PRI_IP:8800:controller2:controller,P3_PRI_IP:8800:controller3:controller
workerNum=4
maxMemSize=4
lanCluster=0
EOF# P2 P3 相关内容已省略...

files.tfvars 文件记录了 Terraform 的变量,其中包含了一些关键配置项。以下是对每个配置项的简要说明:

  1. dolphindb_lic_content:证书内容。这是 DolphinDB 的证书内容,用于许可验证。可在这里配置企业版license。
  2. security_group_ids:安全组 ID,用于定义 EC2 实例的入站和出站流量规则。
  3. cluster_nodes:集群成员配置参数。
  4. cluster_cfg:数据节点和计算节点配置参数。
  5. controller_cfg_p1:P1 控制节点配置参数。
  6. agent_cfg_p1:P1 代理节点配置参数。
  7. controller_cfg_p2:P2 控制节点配置参数。
  8. agent_cfg_p2:P2 代理节点配置参数。
  9. controller_cfg_p3:P3 控制节点配置参数。
  10. agent_cfg_p3:P3 代理节点配置参数。

4.5 配置 output.tf 文件

在 output.tf 文件中添加以下内容:

output "public_ip_p1" {value = aws_instance.ddb_p1.public_ip
}output "private_ip_p1" {value = aws_instance.ddb_p1.private_ip
}output "public_ip_p2" {value = aws_instance.ddb_p2.public_ip
}output "private_ip_p2" {value = aws_instance.ddb_p2.private_ip
}output "public_ip_p3" {value = aws_instance.ddb_p3.public_ip
}output "private_ip_p3" {value = aws_instance.ddb_p3.private_ip
}

这些参数会在集群部署完成后输出,下面是参数解释:

  1. public_ip_p1:p1 的公网 IP
  2. private_ip_p1:p1 的私网 IP
  3. public_ip_p2:p2 的公网 IP
  4. private_ip_p2:p2 的私网 IP
  5. public_ip_p3:p3 的公网 IP
  6. private_ip_p3:p3 的私网 IP

4.6 执行 Terraform 命令

通过终端进入 Terraform 项目文件夹:

cd /path/to/Dolphindb-Terraform

初始化目录:

terraform init

部署实例,可以根据实际的资源和需求来填写 variables.tf 文件中定义的变量:

terraform apply -var "region=<your_region>" -var "subnet_id_p1=<your_subnet_id_p1>" -var "subnet_id_p2=<your_subnet_id_p2>" -var "subnet_id_p3=<your_subnet_id_p3>"  -var "key_name=<your_key_pair_name>" -var "ddbversion=2.00.10.8" -var "az_p1=<your_az_p1>" -var "az_p2=<your_az_p2>" -var "az_p3=<your_az_p3>"  -var "key_location=<absolute_path_of_your_key_pair>" -var-file="files.tfvars"

按照提示输入 yes 确认创建资源。等待 Terraform 完成部署。

4.7 通过 Web 管理界面检查 DolphinDB 节点运行

可以通过 Web 管理界面启动或关闭数据节点和计算节点,以及修改集群的配置。在浏览器中输入任一控制节点的 IP 地址和端口号即可进入 Web 管理界面,例如,P2 上控制节点的 IP 为 10.0.0.81,端口号为 8800,所以访问地址为 10.0.0.81:8800。访问后若出现如下提示,表明当前控制节点不是 Leader 节点,点击确定即可自动跳转至 Leader 节点:

打开后的 Web 管理界面如下。以管理员身份(默认账号:admin,默认密码:123456)登录后,勾选数据节点和计算节点,再点击启动(关闭)按键即可启动(关闭)相应的数据节点和计算节点:

刷新页面后可看到对应的数据节点和计算节点已启动,如下图所示:

5 常见问题解答(FAQ)

5.1 如何为创建的实例配置 SSH 登录?

在 AWS EC2 中,key_name 参数用于指定启动实例时要使用的密钥对的名称。密钥对用于对实例进行身份验证,从而允许用户通过 SSH 登录到实例。以下是详细的步骤:

  1. 创建密钥对:
  • 在 AWS 控制台中导航到 EC2。
  • 在左侧导航栏中,选择 "Key Pairs"(密钥对)。
  • 单击 "Create Key Pair"(创建密钥对)。
  • 输入密钥对的名称,然后选择 "Create"(创建)。
  • 保存生成的私钥文件(通常以 .pem 结尾)。

2. 将私钥文件添加到 SSH 代理:
在本地计算机上,使用以下命令将私钥添加到 SSH 代理。请将 /path/to/your-key.pem 替换为第一步中保存的私钥文件的实际路径。

ssh-add /path/to/your-key.pem

3. 设置密钥对名称和文件位置

terraform apply // 其他变量...-var "key_name=<your_key_pair_name>"-var "key_location=<absolute_path_of_your_key_pair>"

4. SSH 登录到实例:

使用以下命令通过 SSH 登录到 EC2 实例。请将your-instance-ip替换为实际的 IP 地址。

ssh -i /path/to/your-key.pem ec2-user@your-instance-ip

注意:ec2-user 是 Amazon Linux AMI 的默认用户名。请根据实际使用的 AMI 修改用户名,例如,若 AMI 是Ubuntu,则用户名填 ubuntu

5.2 如何更新软件授权许可

在 files.tfvars 文件中,将 dolphindb_lic_content 变量的内容替换为企业版授权许可内容。同时,确保 variables.tf 文件中 replace_dolphindb_lic 的值设为 true(默认为true)。

dolphindb_lic_content= <<EOF
// 替换后的dolphindb.lic文件内容
EOF

6. 附录

  • 部署 DolphinDB 单节点完整项目代码代码:
    • files.tfvars
    • main.tf
    • variables.tf

  • 部署 DolphinDB 高可用集群完整代码:
    • files.tfvars
    • main.tf
    • variables.tf
    • output.tf

相关文章:

云上自动部署丨使用 Terraform 在 AWS 上搭建 DolphinDB

HashiCorp Terraform 是一款基础架构即代码工具&#xff0c;旨在实现 "Write, Plan, and Create Infrastructure as Code"。它通过配置文件来描述云资源的拓扑结构&#xff0c;包括虚拟机、存储账户和网络接口。Terraform 几乎支持市面上所有的云服务&#xff0c;能够…...

vscode的ssh忽然连不上服务器:远程主机可能不符合glibc和libstdc++ VS Code服务器的先决条件

vscode自动更新了一下就发现连不上服务器了&#xff0c;我寻思估计一大堆人都寄了&#xff0c;一搜&#xff0c;果然哈哈哈哈 然后我直接搜一天内新发布的博客&#xff0c;还真给我搜到了这个问题&#xff0c;按照这个问题里面的回答&#xff08;vscode1.86无法远程连接waitin…...

C++(17)——list的模拟实现

前面的文章中&#xff0c;介绍了&#xff0c;的模拟实现&#xff0c;本篇文章将介绍对于的模拟实现。 目录 1. list的基本结构&#xff1a; 2. list功能实现&#xff1a;尾部插入元素&#xff1a; 3. list迭代器的实现&#xff1a; 4. list功能实现&#xff1a;在任意位置前…...

花瓣网美女图片爬取

爬虫基础案例01 花瓣网美女图片 网站url&#xff1a;https://huaban.com 图片爬取 import requests import json import os res requests.get(url "https://api.huaban.com/search/file?text%E7%BE%8E%E5%A5%B3&sortall&limit40&page1&positionsear…...

Android native层c++调用java层API

在Android开发中&#xff0c;从本地&#xff08;native&#xff09;代码调用Java层的接口是一个常见的需求&#xff0c;尤其是在使用JNI&#xff08;Java Native Interface&#xff09;进行混合编程时。以下是一个基本的步骤指南&#xff0c;展示如何从C代码调用Java方法&#…...

Docker 集群配置

1、配置 MySQL MySQL 简单安装 docker安装完MySQL并run出容器后&#xff0c;建议请先修改完字符集编码后再新建mysql库-表-插数据 docker run -d -p 2222:3306 --privilegedtrue -e MYSQL_ROOT_PASSWORD123456 \ -v /opt/mysql/log:/var/log/mysql \ -v /opt/mysql/data:/va…...

VUE3+elementPlus 之 Form表单校验器 之 字符长度校验

需求&#xff1a;校验字符长度&#xff0c;超过后仍可输入&#xff0c;error提示录入字符数与限制字符数 校验字符长度&#xff1a; /*** 检验文字输入区的长度* param {*} rule 输入框的rule 对象&#xff0c;field&#xff1a;字段名称* param {*} value …...

【Mysql】数据库架构学习合集

目录 1. Mysql整体架构1-1. 连接层1-2. 服务层1-3. 存储引擎层1-4. 文件系统层 2. 一条sql语句的执行过程2-1. 数据库连接池的作用2-2. 查询sql的执行过程2-1. 写sql的执行过程 1. Mysql整体架构 客户端&#xff1a; 由各种语言编写的程序&#xff0c;负责与Mysql服务端进行网…...

轻型民用无人机驾驶航空器安全操控——理论考试多旋翼部分笔记

今天已经可以在线考取轻型民用无人机驾驶航空器执照了&#xff0c;所以我也在在线观看完视频之后整理了如下的知识点&#xff0c;所有知识点全部来自UOM平台。 目录 航空器知识 &#xff08;1&#xff09;多旋翼民用无人驾驶航空器螺旋桨的作用 &#xff08;2&#x…...

UE4学习笔记 FPS游戏制作3 添加武器

文章目录 章节目标为骨骼添加武器挂载点添加武器 章节目标 本章节为手部添加一个武器挂载点&#xff0c;并挂载一个武器 为骨骼添加武器挂载点 添加挂载点需要以一个动画片段为基础&#xff0c;为骨骼添加挂载点。 首先找到我们需要的动画片段&#xff0c;通常是idle 双击打…...

详解 Prim 算法的实现

一、算法思路 Prim 算法是用来求最小生成树的&#xff0c;它的思想也有点类似于贪心——逐个将离当前集合最近的点加入到集合中&#xff0c;直至发现图不连通或所有点都被加到集合中&#xff0c;算法即宣告终止。它的具体做法是&#xff1a; step 1&#xff1a;初始时&#xf…...

Android 使用高德地图

一、获取高德平台key 【1】基于application包名&sha1值在高德控制台获取key值&#xff0c;详情参考&#xff1a; 获取Key-创建工程-开发指南-Android 地图SDK | 高德地图API 【2】在manifest中声明权限 【3】将拿到的key值在manifest中进行声明 <!--允许程序打开网络…...

从redis setnx 来看看分布式锁

什么是分布式锁 分布式锁&#xff08;多服务共享锁&#xff09;在分布式的部署环境下&#xff0c;通过锁机制来让多客户端互斥的对共享资源进行访问/操作。 为什么需要分布式锁 在单体应用服务里&#xff0c;不同的客户端操作同一个资源&#xff0c;我们可以通过操作系统提供…...

校园网网络规划与设计——计算机网络实践报告

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 目录 一、设计目的 二、软硬件环境 三、理论基础 四、设计方案 五、网络配置步骤 六、设计过程中出现的问题及相应解决办法 八、参考资料 一、设计目的 深入理解网络工程的三层层次设计模型&#xff1b; 掌握网络…...

Qt QScrollArea 不显示滚动条 不滚动

使用QScrollArea时&#xff0c;发现添加的控件超出QScrollArea 并没有显示&#xff0c;且没有滚动条效果 原因是 scrollArea指的是scrollArea控件本身的大小&#xff0c;肉眼能看到的外形尺寸。 scrollAreaWidgetContents指的是scrollArea控件内部的显示区域&#xff0c;里面可…...

【SVN在Linux下的常用指令】

windows下的TortoiseSVN是资源管理器的一个插件&#xff0c;以覆盖图标表示文件状态&#xff0c;几乎所以命令都有图形界面支持&#xff0c;比较好用&#xff0c;这里就不多说。主要说说linux下svn的使用&#xff0c;因为linux下大部分的操作都是通过命令行来进行&#xff0c;所…...

2024 高级前端面试题之 Node 「精选篇」

该内容主要整理关于 Node 模块的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 Node模块精选篇 1. package.json版本号规则2. package.json 与 package-lock.json 的关3. npm 模块安装机制4. 模块化的差异 AMD CMD COMMONJS ESMODUL5. No…...

linux麒麟系统安装mongodb7.0

1.mogedb下载 下载的是他tar包 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-7.0.5.tgz wget -o https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-7.0.5.tgz 也可以下载rpm包 2.将包上传至服务器并解压 #进入目录 并解压 cd /opt/ tar…...

Spring声明式事务

1.概念 事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么完全地执行&#xff0c;要么完全地都不执行&#xff0c; 它是一个不可分割的工作执行单元 一个使用Mybatis-Spring的主要原因是它允许Mybatis参与到Spring的事务管理中&#xff0c;而不是给Mybatis创建一个新的…...

PyTorch深度学习实战(34)——Pix2Pix详解与实现

PyTorch深度学习实战&#xff08;34&#xff09;——Pix2Pix详解与实现 0. 前言1. 模型与数据集1.1 Pix2Pix 基本原理1.2 数据集分析1.3 模型构建策略 2. 实现 Pix2Pix 生成图像小结系列链接 0. 前言 Pix2Pix 是基于生成对抗网络 (Convolutional Generative Adversarial Netwo…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

高保真组件库:开关

一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...

Springboot 高校报修与互助平台小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;高校报修与互助平台小程序被用户普遍使用&#xff0c;为…...