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托管
部署复杂度 中等
运维负担 中等
扩展性 有限
成本控制 灵活 灵活 固定
适合场景 中小规模 大规模生产 快速部署
相关推荐
路由侠内网穿透3 小时前
本地部署开源数据分析平台 Elastic Stack 并实现外部访问( Windows 版本)
运维·服务器·网络·windows·开源·jenkins
回忆是昨天里的海3 小时前
k8s安装-kubeadm join,将工作节点加入k8s集群
java·服务器·kubernetes
FreeBuf_4 小时前
AWS服务大规模中断,基础设施故障影响全球企业
网络·数据库·aws
TG_yunshuguoji4 小时前
亚马逊云代理:AWS的EC2, S3, RDS,Lambda具体简介
服务器·云计算·aws
HoneyMoose4 小时前
AWS US-East-1 区宕机
云计算·aws
王道长服务器 | 亚马逊云4 小时前
AWS CloudFormation —— 自动化部署的“云中脚本大师”
运维·服务器·网络·自动化·云计算·aws
郝学胜-神的一滴4 小时前
Linux 进程控制块(PCB)解析:深入理解进程管理机制
linux·服务器·开发语言
CSCN新手听安4 小时前
【linux】多线程(六)生产者消费者模型,queue模拟阻塞队列的生产消费模型
linux·运维·服务器·c++
Wang's Blog4 小时前
Linux小课堂: 软件安装与源码编译实战之从 RPM 到源码构建的完整流程
linux·运维·服务器