AWS云上Quickwit部署指南与成本分析

1. Quickwit简介与部署方案概述

Quickwit是一个云原生的分布式搜索引擎,专为日志分析和搜索场景设计。在AWS云环境中,主要有三种部署方式:

  • EC2实例部署:传统虚拟机部署方式,适合中小规模场景
  • EKS集群部署:基于Kubernetes的容器化部署,适合大规模生产环境
  • 托管服务部署:使用Elest.io等托管服务,简化运维管理

在AWS云上安装配置Quickwit,可以设置S3存储桶作为对象存储,并将Quickwit部署在EC2实例,EKS集群或者使用托管服务上,比如Elest.io

将Quickwit安装在EC2上,需要设置S3存储桶、配置IAM权限和在EC2上安装配置Quickwit,最后启动Quickwit服务。

将Quickwit带Helm安装在EKS上,需要设置S3存储桶、配置IAM权限、安装Kubernetes和Helm和使用Quickwit Helm chart来安装这个服务。

2. EC2实例部署方案

2.1 设置S3存储桶

bash 复制代码
# 创建S3存储桶
aws s3 mb s3://quickwit-data-bucket --region us-west-2

# 配置存储桶策略
cat > bucket-policy.json << EOF
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::ACCOUNT-ID:role/QuickwitEC2Role"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::quickwit-data-bucket",
                "arn:aws:s3:::quickwit-data-bucket/*"
            ]
        }
    ]
}
EOF

aws s3api put-bucket-policy --bucket quickwit-data-bucket --policy file://bucket-policy.json

2.2 配置IAM权限

创建IAM角色和策略:

json 复制代码
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::quickwit-data-bucket",
                "arn:aws:s3:::quickwit-data-bucket/*"
            ]
        }
    ]
}

2.3 安装配置Quickwit

启动EC2实例(推荐使用Amazon Linux 2023):

bash 复制代码
# 安装Quickwit
curl -L https://install.quickwit.io | sh
sudo mv quickwit-*/quickwit /usr/local/bin/

# 创建配置文件
mkdir -p /etc/quickwit
cat > /etc/quickwit/quickwit.yaml << EOF
cluster_id: quickwit-cluster
node_id: quickwit-node-1

metastore_uri: s3://quickwit-data-bucket/indexes

rest_listen_port: 7280
grpc_listen_port: 7281

s3:
  region: us-west-2
  endpoint: null

indexer:
  max_concurrent_split_uploads: 10

searcher:
  max_num_concurrent_searches: 20
EOF

2.4 启动Quickwit服务

创建systemd服务:

bash 复制代码
cat > /etc/systemd/system/quickwit.service << EOF
[Unit]
Description=Quickwit Search Engine
After=network.target

[Service]
Type=simple
User=quickwit
Group=quickwit
ExecStart=/usr/local/bin/quickwit run
WorkingDirectory=/var/lib/quickwit
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable quickwit
systemctl start quickwit

3. EKS集群部署方案

3.1 设置S3存储桶

bash 复制代码
# 创建S3存储桶
aws s3 mb s3://quickwit-eks-data --region us-west-2

3.2 配置IAM权限

创建IAM OIDC提供商和ServiceAccount:

bash 复制代码
# 创建IAM策略
aws iam create-policy \
    --policy-name QuickwitS3Access \
    --policy-document file://quickwit-s3-policy.json

# 创建ServiceAccount
eksctl create iamserviceaccount \
    --name quickwit-serviceaccount \
    --namespace quickwit \
    --cluster my-cluster \
    --attach-policy-arn arn:aws:iam::ACCOUNT-ID:policy/QuickwitS3Access \
    --approve \
    --override-existing-serviceaccounts

3.3 安装Kubernetes和Helm

bash 复制代码
# 安装eksctl
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin

# 创建EKS集群
eksctl create cluster \
    --name quickwit-cluster \
    --version 1.28 \
    --region us-west-2 \
    --nodegroup-name workers \
    --node-type m5.large \
    --nodes 3 \
    --nodes-min 1 \
    --nodes-max 5

# 安装Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

3.4 使用Helm Chart安装Quickwit

bash 复制代码
# 添加Quickwit Helm仓库
helm repo add quickwit https://helm.quickwit.io
helm repo update

# 创建values.yaml配置文件
cat > values.yaml << EOF
global:
  image:
    repository: quickwit/quickwit
    tag: latest

searcher:
  replicas: 2
  resources:
    requests:
      memory: "2Gi"
      cpu: "500m"
    limits:
      memory: "4Gi"
      cpu: "1000m"

indexer:
  replicas: 2
  resources:
    requests:
      memory: "2Gi"
      cpu: "500m"
    limits:
      memory: "4Gi"
      cpu: "1000m"

metastore:
  uri: "s3://quickwit-eks-data/indexes"

s3:
  region: us-west-2

serviceAccount:
  create: true
  name: quickwit-serviceaccount
EOF

# 安装Quickwit
helm install quickwit quickwit/quickwit -f values.yaml --namespace quickwit --create-namespace

4. 托管服务部署(Elest.io

4.1 部署步骤

  1. 访问Elest.io控制台

    • 注册账户并登录管理面板
  2. 创建Quickwit集群

    • 选择Quickwit服务模板
    • 配置集群规格(CPU、内存、存储)
    • 选择AWS区域
  3. 配置存储

    • 设置S3存储桶连接
    • 配置访问密钥和权限
  4. 网络配置

    • 设置VPC和子网
    • 配置安全组规则
  5. 部署和验证

    • 启动部署过程
    • 验证服务状态和连通性

5. 成本计算方法

5.1 EC2部署成本计算

硬件成本:

  • EC2实例:根据实例类型计算(如m5.large = $0.096/小时)
  • EBS存储:根据存储类型和容量计算(如gp3 = $0.08/GB-月)

网络成本:

  • 数据传输:$0.09/GB(出站数据)
  • S3请求:$0.005/1000次请求

示例计算(月成本):

复制代码
EC2实例 (m5.large): $0.096 × 730 = $70.08
EBS存储 (100GB gp3): $0.08 × 100 = $8.00
数据传输 (100GB): $0.09 × 100 = $9.00
S3存储 (500GB): $0.023 × 500 = $11.50
S3请求 (1M次): $0.005 × 1000 = $5.00
总计: $103.58/月

5.2 EKS部署成本计算

集群管理成本:

  • EKS控制平面:0.10/小时 = 73.00/月
  • EC2工作节点:根据实例类型和数量计算
  • ELB负载均衡器:0.0225/小时 + 0.008/GB处理数据

存储成本:

  • EBS卷:$0.08-0.12/GB-月
  • S3存储:$0.023/GB-月

示例计算(3节点集群):

复制代码
EKS控制平面: $73.00
EC2节点 (3×m5.large): $70.08 × 3 = $210.24
EBS存储 (300GB): $0.08 × 300 = $24.00
S3存储 (1TB): $0.023 × 1024 = $23.55
ELB (1个): $16.20 + $5.00数据传输
总计: $351.99/月

5.3 Elest.io托管服务成本

定价模型:

  • 基于资源使用量(vCPU、内存、存储)
  • 通常包含技术支持和管理服务费

示例定价:

复制代码
基础套餐 (4vCPU, 16GB内存, 100GB存储): $200/月
额外存储 (每100GB): $15/月
数据传输: 按实际使用计费
技术支持: 包含或额外收费

5.4 成本优化建议

  1. 选择合适的实例类型

    • 计算密集型:C系列实例
    • 内存密集型:R系列实例
    • 通用型:M系列实例
  2. 利用预留实例

    • 1年预留节省30-40%
    • 3年预留节省50-60%
  3. 存储优化

    • 使用S3智能分层
    • 实施数据生命周期策略
    • 压缩索引数据
  4. 自动扩缩容

    • 基于负载自动调整节点数量
    • 使用Spot实例降低成本

6. 部署方案比较

特性 EC2部署 EKS部署 Elest.io托管
部署复杂度 中等
运维负担 中等
扩展性 有限
成本控制 灵活 灵活 固定
适合场景 中小规模 大规模生产 快速部署
相关推荐
SongYuLong的博客8 小时前
Linux开源代码汇总
linux·运维·服务器
万象.8 小时前
GNU汇编语法和Cortex-A7常用汇编指令
服务器·汇编·gnu
Moonbit9 小时前
MoonBit Pearls Vol.13: 使用 MoonBit 开发一个 HTTP 文件服务器
服务器·后端·http
云飞云共享云桌面9 小时前
三维设计办公资源如何共享集中和安全管控?
运维·服务器·数据库·安全·自动化·制造
yuanManGan11 小时前
走进Linux的世界:进程优先级
linux·运维·服务器
一叶知秋yyds11 小时前
linux 系统查看进程占用物理内存大小方法
linux·运维·服务器
AI绘画小3311 小时前
渗透测试数据库判断卡壳?分类 + 方法 + SQL/NoSQL 脚本速用
服务器·数据库·sql·mysql·web安全·nosql
尤利乌斯.X11 小时前
在Java中调用MATLAB函数的完整流程:从打包-jar-到服务器部署
java·服务器·python·matlab·ci/cd·jar·个人开发
Bowen_CV11 小时前
Linux 系统安装与环境配置实践
linux·运维·服务器
JZC_xiaozhong11 小时前
跨系统流程如何打通?选 BPM 平台认准这三点
大数据·运维·自动化·数据集成与应用集成·业务流程管理·流程设计可视化·流程监控