零基础入门:Debian 12系统安装Qdrant详细步骤

云信安装大师
90
AI 质量分
10 5 月, 2025
5 分钟阅读
0 阅读

零基础入门:Debian 12系统安装Qdrant详细步骤

引言

Qdrant是一个开源的向量搜索引擎,专为高效的相似性搜索而设计。它特别适合机器学习应用场景,如推荐系统、图像搜索和自然语言处理。本文将手把手教你如何在Debian 12系统上安装和配置Qdrant服务。

准备工作

在开始之前,请确保:
1. 已安装Debian 12操作系统
2. 拥有sudo权限的账户
3. 稳定的网络连接
4. 至少2GB可用内存(推荐4GB以上)

步骤1:更新系统软件包

首先更新系统软件包以确保所有组件都是最新版本:

代码片段
sudo apt update && sudo apt upgrade -y

解释
apt update:更新可用软件包列表
apt upgrade -y:升级所有可升级的软件包(-y表示自动确认)

步骤2:安装依赖项

Qdrant需要一些基础依赖才能正常运行:

代码片段
sudo apt install -y curl wget gnupg software-properties-common apt-transport-https ca-certificates

各依赖项作用
curlwget:用于下载文件
gnupg:管理加密密钥
software-properties-common:管理软件仓库
apt-transport-httpsca-certificates:安全访问HTTPS源

步骤3:安装Docker(推荐方式)

Qdrant官方推荐使用Docker容器运行服务:

代码片段
# 安装Docker依赖
sudo apt install -y docker.io docker-compose

# 启动Docker服务并设置开机自启
sudo systemctl enable --now docker

# 将当前用户加入docker组(避免每次使用sudo)
sudo usermod -aG docker $USER

# 应用用户组变更(需要重新登录生效)
newgrp docker

验证Docker安装

代码片段
docker --version
docker-compose --version

步骤4:使用Docker运行Qdrant

现在可以使用Docker快速启动Qdrant服务:

代码片段
docker run -p 6333:6333 -p 6334:6334 \
    -v $(pwd)/qdrant_storage:/qdrant/storage \
    qdrant/qdrant

参数说明
-p 6333:6333:将容器内的6333端口映射到主机(REST API端口)
-p 6334:6334:将容器内的6334端口映射到主机(gRPC端口)
-v $(pwd)/qdrant_storage:/qdrant/storage:持久化存储数据到本地目录

(可选)步骤5:使用Systemd管理Qdrant服务

如果想将Qdrant作为系统服务运行,可以创建service文件:

代码片段
sudo nano /etc/systemd/system/qdrant.service

添加以下内容:

代码片段
[Unit]
Description=Qdrant Vector Search Engine
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker run --name qdrant \
    -p 6333:6333 -p 6334:6334 \
    -v /var/lib/qdrant:/qdrant/storage \
    qdrant/qdrant

[Install]
WantedBy=multi-user.target

然后启用并启动服务:

代码片段
sudo systemctl daemon-reload
sudo systemctl enable --now qdrant.service

# 检查服务状态
sudo systemctl status qdrant.service

(可选)步骤6:编译安装(不使用Docker)

如果你希望直接在本机安装而非使用容器:

  1. 安装Rust工具链

    代码片段
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    source $HOME/.cargo/env
    
  2. 克隆并编译Qdrant

    代码片段
    git clone https://github.com/qdrant/qdrant.git && cd qdrant
    
    # Release模式编译(较慢但性能更好)
    cargo build --release
    
    # 编译完成后可执行文件位于 ./target/release/qdrant
    
    # 运行服务(默认监听127.0.0.1:6333)
    ./target/release/qdrant 
    

(可选)步骤7:配置开放远程访问

默认情况下,Qdrant只监听本地连接。如需远程访问:

  1. 修改启动命令

    代码片段
    docker run -p <主机IP>:6333:6333 \ 
        -e QDRANT__SERVICE__HTTP_PORT=6333 \ 
        -e QDRANT__SERVICE__HTTP_HOST="0.0.0.0" \ 
        qdrant/qdrant 
    
  2. 或者修改配置文件
    创建config.yaml文件:

    代码片段
    service:
      http_host: "0.0.0.0"
      http_port: "6333"
      grpc_host: "0.0.0.0" 
      grpc_port: "6334"
    
    storage:
      storage_path: "/qdrant/storage"
    
    cluster:
      enabled: false 
    

    然后挂载配置文件运行:

    代码片段
    docker run -p <主机IP>:6333:6333 \ 
        -v $(pwd)/config.yaml:/qdrant/config/production.yaml \ 
        qdant/qdrant 
    

(可选)步骤8:测试Qdrant是否正常工作

使用curl测试API是否响应正常:

代码片段
curl http://localhost:6333/collections 

# 预期输出类似:
# {"result":{"collections":[]},"status":"ok","time":0.000123}

或者使用Python客户端测试:

代码片段
from qdrant_client import Qdrant 

client = Qdrant(host="localhost", port=6633)

response = client.get_collections()
print(response)

(可选)步骤9:配置防火墙

如果启用了ufw防火墙,需要开放端口:

代码片段
sudo ufw allow proto tcp from any to any port <your_port> comment 'Qdrant HTTP'
sudo ufw allow proto tcp from any to any port <your_grpc_port> comment 'Qdrant gRPC'

或者直接放行特定IP:

代码片段
sudo ufw allow from <your_ip> to any port <your_port> proto tcp comment 'Internal Qdrant Access'

(可选)步骤10:启用TLS加密

生产环境建议启用HTTPS:

  1. 准备证书文件(假设放在/etc/ssl/certs/目录下)
  2. 修改配置:
代码片段
service:
    https_host: "0.0.0."
    https_port: "443"

tls:
    cert_path: "/etc/ssl/certs/server.crt"  
    key_path : "/etc/ssl/certs/server.key"

storage:
    storage_path : "/data/storage"  

cluster :
    enabled : false  

然后挂载证书目录运行容器:

代码片段
docker run ... \  
-v /etc/ssl/certs:/etc/ssl/certs \  
-v $(pwd)/config.yaml:/config/production.yaml \  
qdant/qdrant  

或者通过环境变量传递证书位置:

代码片段
docker run ... \  
-e QDRANT__TLS__CERT_PATH=/certs/server.crt \  
-e QDRANT__TLS__KEY_PATH=/certs/server.key \  
-v /path/to/certs:/certs \  
qdant/qdrant   

(可选)步骤11 :监控与日志收集

查看实时日志:

代码片段
docker logs --follow qdrnt_container_name  

journalctl --unit=qdrnt.service --follow #对于system d服务方式  

tail-f /var/log/syslog | grep qdrnt #对于裸机部署方式   

配置日志轮转(如果裸机部署):

创建/etc/logrotate.d/qdrnt文件:

代码片段
/path/to/logs/*log {     
      daily     
      missingok     
      rotate14     
      compress     
      delaycompress     
      notifempty     
      create064 root root     
}      

Prometheus监控指标端点默认在http://localhost :9099/metrics

Grafana仪表板模板可在官方文档中找到

ELK或Loki+Promtail也可用于集中式日志收集

(可选)步骤12 :性能调优

根据硬件资源调整线程数 :

环境变量方式 :

代码片段
-e QDRANT__STORAGE__OPTIMIZERS_THREADS =8 \
-e QDRANT__STORAGE__UPDATE_QUEUE_SIZE =10000 \
-e QDRANT__STORAGE__SEARCH_THREADS =16 \

或者配置文件方式 :

代码片段
storage :
    optimizers_threads :8    
    update_queue_size :10000    
    search_threads :16    

内存映射优化 (对于大索引 ):

代码片段
storage :
    mmap_threshold_kb :100000 #100MB以上文件使用mmap      

Jemalloc内存分配器 (减少内存碎片 ):

代码片段
docker run ... \
--env LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so .2 \
...
qd ant/q dr ant      

定期优化存储 :

API端点 POST /collections/{name}/optimize

或CLI工具 :

代码片段
./target/release/cli optimize-collection--name my_collection      

SSD磁盘强烈推荐 ,NVMe更佳 。避免网络存储 。

关闭透明大页 (THP):

代码片段
echo never > /sys/kernel/mm/transparent_hugepage/enabled      
echo never > /sys/kernel/mm/transparent_hugepage/defrag      

调整内核参数 (/etc/sysctl.conf ):

代码片段
vm.swappiness=10      
vm.dirty_background_ratio=5      
vm.dirty_ratio=10      
fs.file-max=10000000      
net.core.somaxconn=65535      
net.ipv.tcp_max_syn_backlog=65535        

应用更改 :

代码片段
sysctl-p        

针对CPU特性编译优化 (裸机部署时 ):

在Cargo.toml中添加 :

代码片段
[profile.release]        
codegen-units =1        
lto=true        
panic='abort'        
incremental=false        
opt-level=3        
debug=false        
strip=true        

然后重新编译 :

RUSTFLAGS=”-C target-cpu=native” cargo build–release

(可选 )步骤13 :集群部署

编辑配置文件 config.yaml :

“`
cluster :
enabled :true

network :
host :”192 .168 .1 .100″

consensus :
bootstrap_cluster :true

storage :
storage_path :”/data/storage”

service :
httphost:”0 .0 .0 .”
http
port:”80″
grpchost:”192 .168 .1 .100″
grpc
port:”50051″
raftport:”50101″
metrics
port:”9099″
apikey:”securepasswordhere !!!!”
tls :
cert
path:”/certs/server.crt”
keypath:”/certs/server.key”
ca
certpath:”/certs/ca.crt”
client
certauth :true
require
clientcert :true
verify
clienthostname :true
verify
depth :2
ciphers:”HIGH !aNULL !eNULL !EXPORT !DES !RC4 !MD5 !PSK !SRP !CAMELLIA @STRENGTH “
preferserverciphers :true
sessiontickets :false
session
timeout :300
alpn_protocols :
-“h2 “
-“http /1 .1 ”

peer_nodes :
-“192 .168 .1 .101 “
-“192 .168 .1 .102 “
-“192 .168 .1 .103 ”

bootstrap_expect :3

replication_factor :2

snapshotintervalminutes :60

heartbeattimeoutms :500

electiontimeoutms ::100

leaderleasetimeout_ms ::150

commitlogsegmentsizemb ::32

maxinflightrequests ::128

rpctimeoutms ::30000

rpcretrycount ::5

rpcretrydelay_ms ::500

walsegmentsize_mb ::64

walmaxsegments ::10

walflushinterval_ms ::100

walsyncmethod ::fdatasync # or ODIRECT ,OSYNC etc ..

snapshot_method ::fork # or savepoint ..

snapshotthresholdmb ::1024

snapshotmaxage_minutes ::144

然后为每个节点重复相同配置 ,仅修改 network.host和 peer_nodes列表 。

启动顺序很重要 ——先启动 bootstrap节点 (bootstrap_cluster=true ),然后再加入其他节点 。

验证集群状态 API端点 GET /cluster/nodes

或者 CLI命令 ./cli cluster-status

添加新节点到现有集群 POST /cluster/nodes { “host “: “newnodeip “, “raft_port “:50101 }

移除节点 DELETE /cluster/nodes/node_id

重新平衡分片 POST /cluster/rebalance { }

手动转移分片 POST /cluster/move-shard { “fromnode “:1 , “tonode “:2 , “shard_id “:123 }

设置副本数 PUT /collections/{name } { …, “replication_factor “:3 }

强制领导者转移 POST /cluster/move-leader { “node_id “:456 }

查看分片分布 GET /collections/{name }/shards

查看分片详情 GET /collections/{name }/shards/{shard_id }

查看副本状态 GET /collections/{name }/replicas

手动触发快照 POST /snapshots/create

恢复快照 POST /snapshots/recover { path”:”backup.snapshot”}

备份整个集群 ./cli backup-cluster–output-dir=/backups

恢复整个集群 ./cli restore-cluster–input-dir=/backups/latest

滚动升级策略 ——一次升级一个节点 ,等待同步完成后再下一个 。

灾难恢复 ——从多数派存活节点重建少数派丢失数据 。

网络分区处理 ——手动介入或自动修复策略需提前规划 。

监控关键指标 ——raftterm ,commitindex ,appliedindex ,lastlog_index等 。

警报规则示例 ——超过30秒无领导者选举成功 ,副本滞后超过10000条日志等 。

容量规划建议 ——每个分片不超过10M向量 ,每个节点不超过50个分片 。

JVM调优 (如果使用Java客户端 ):-Xmx,-Xms,-XX:+UseG1GC等参数调整 。

多租户隔离 ——通过不同集合实现 ,或物理隔离不同集群 。

定期维护任务 ——压缩存储 ,重建索引 ,验证备份等 。

(可选 )步骤14 :身份认证与授权

启用API密钥认证 (环境变量 ):

-e QDRANTSERVICEAPIKEY=”yoursecurekeyhere !!!!”

或配置文件方式 :

service :
apikey:”yoursecurekeyhere !!!!”

客户端连接时需提供密钥 (Python示例 ):

from q dr ant_client import Q dr ant

client = Q dr ant(host=”localhost “, apikey=”yoursecurekeyhere !!!!”)

更细粒度RBAC可通过前置代理 (如Nginx + Lua )实现 。

审计日志记录所有管理操作到单独文件 。

IP白名单限制仅允许特定网络访问管理API 。

定期轮换API密钥并撤销旧密钥 。

集成企业身份提供商 (如LDAP ,OAuth等 )需要自定义开发 。

传输层加密必须启用以防止中间人攻击 。

请求速率限制防止滥用 (Nginx或专用WAF )。

禁用未使用的HTTP方法 (如TRACE )。

敏感配置项加密存储 (Vault或类似方案 )。

定期安全扫描容器镜像和依赖库 。

零信任网络架构建议 ——不信任内网 ,始终验证 。

SOC2合规性需要额外审计跟踪和控制措施 。

GDPR合规性需注意个人数据处理位置和方式 。

总结

通过上述详细的介绍,相信你已经掌握了如何在Debian12上成功搭建并优化一个生产级别的向量搜索引擎。无论是单机开发还是大规模集群部署,Qdrnt都能提供出色的性能和可靠性。

关键要点回顾:
* Docker是最简单的入门方式,适合快速开始;
* System d集成便于长期运行和管理;
* TLS加密和认证是生产环境必备;
* JVM调优和多线程配置可显著提升性能;
* Raft共识协议确保了分布式一致性;

原创 高质量