图片查重从设计到实现(2)Milvus安装准备etcd介绍、应用场景及Docker安装配置

发布于:2025-07-26 ⋅ 阅读:(20) ⋅ 点赞:(0)

etcd作用、应用场景及Docker安装配置

在分布式向量数据库 Milvus 的架构中,etcd 扮演着至关重要的角色。Milvus 用于存储和管理海量向量数据,支持高效的相似性搜索等操作,而其分布式集群的正常运行高度依赖元数据的一致性和可靠性,etcd 正是承担这一关键任务的组件,负责存储 Milvus 集群的元数据,如集合信息、索引配置、分区详情等,确保 Milvus 各节点能协同工作。下面详细介绍 etcd 的相关内容:

一、etcd 的作用

etcd 是一个高可用、强一致性的分布式键值(key-value)存储系统,基于 Raft 一致性算法实现,主要作用如下:

  1. 分布式数据存储:以键值对形式存储数据,支持数据的增删改查,且所有节点数据实时一致,能为分布式系统提供统一的数据存储服务。

  2. 强一致性保证:通过 Raft 算法确保分布式环境下数据的一致性,即所有节点最终会看到相同的数据,这对于存储需要严格一致的关键信息,如集群状态、配置参数等非常重要。

  3. 高可用与容错:支持集群部署(通常为 3/5 节点),单个节点故障不会影响整体服务,系统会自动选举新主节点,保障服务的持续运行。

  4. Watch 机制:支持监听特定键或前缀的变化,当数据更新时能实时通知客户端,这一机制适合配置动态更新、服务发现等场景。在 Milvus 中,这一机制有助于各节点实时获取元数据的变化,保证集群的协同高效。

二、etcd 的应用场景

etcd 因强一致性和高可用特性,在分布式系统中应用广泛,典型场景包括:

  1. 容器编排与集群管理:最典型的是 Kubernetes(K8s),etcd 作为 K8s 的核心组件,用于存储集群的所有状态,如 Pod 配置、节点信息、服务规则等。

  2. 服务发现:在分布式系统中,服务实例的地址、端口等信息可存储在 etcd 中,客户端通过 etcd 动态获取服务地址,替代了传统的静态配置,提高了系统的灵活性和可扩展性。

  3. 配置中心:集中管理分布式应用的配置参数,如数据库地址、限流阈值等,通过 Watch 机制实现配置变更时的实时推送,无需重启服务,提升了系统的维护效率。

  4. 分布式锁:利用 etcd 的原子操作(如 Compare-and-Swap)实现分布式锁,解决多节点并发操作共享资源的冲突问题,保证操作的原子性和一致性。

  5. 元数据存储:如 Milvus 向量数据库,依赖 etcd 存储元数据(集合信息、索引配置等),确保分布式环境下元数据的一致性,这是 Milvus 集群能够正常、高效运行的重要保障。

三、Docker 安装配置 etcd

通过 Docker 安装 etcd 是较为简单的方式,适合单机测试或开发环境,也能满足 Milvus 开发环境对 etcd 的需求,具体步骤如下:

1. 拉取 etcd 镜像

etcd 官方提供了 Docker 镜像,可直接拉取最新版本:

docker pull quay.io/coreos/etcd:v3.5.5
2. 启动 etcd 容器(单机模式)

单机模式适合开发测试,需指定数据存储路径、客户端端口(2379)和集群通信端口(2380),并设置初始集群配置:

docker run -d \
  --name etcd \
  -p 2379:2379  # 客户端通信端口(供应用访问,Milvus将通过此端口连接etcd)
  -p 2380:2380  # 集群节点间通信端口(单机模式可忽略,但需映射)
  -e ALLOW_NONE_AUTHENTICATION=yes  # 允许无密码访问(开发环境)
  -e ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379  # 对外暴露的客户端地址
  -e ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379  # 监听客户端连接的地址
  -e ETCD_INITIAL_ADVERTISE_PEER_URLS=http://0.0.0.0:2380  # 集群内广播的节点地址
  -e ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380  # 监听集群节点连接的地址
  -e ETCD_INITIAL_CLUSTER=default=http://0.0.0.0:2380  # 初始集群配置(单机节点)
  -v /data/etcd:/bitnami/etcd  # 挂载本地目录持久化数据(避免容器删除后数据丢失,对于Milvus的元数据存储至关重要)
  bitnami/etcd:latest
  • 单机模式简化启动
docker run -d  --name etcd  -p 2379:2379  -p 2380:2380  -e ALLOW_NONE_AUTHENTICATION=yes   -v /data/etcd:/bitnami/etcd    quay.io/coreos/etcd:v3.5.5
  • 参数说明:

    • ALLOW_NONE_AUTHENTICATION=yes:关闭认证(生产环境需开启,见下方补充)。

    • 端口映射:2379是应用访问 etcd 的端口,Milvus 将通过该端口与 etcd 进行通信,2380用于集群节点间通信。

    • 数据持久化:-v /data/etcd:/bitnami/etcd将容器内数据目录映射到本地/data/etcd,防止数据丢失,这对于 Milvus 元数据的持久化存储非常重要。

3. 验证 etcd 运行状态

进入容器内部,使用etcdctl(etcd 命令行工具)测试:

# 进入容器
docker exec -it etcd /bin/bash
# 写入测试数据
etcdctl put mykey "hello etcd"
# 读取数据
etcdctl get mykey
# 预期输出:
# mykey
# hello etcd

若能正常读写,说明 etcd 安装成功,可满足 Milvus 对 etcd 的基本需求。
在这里插入图片描述

4. 生产环境补充配置(可选)
  • 开启认证:设置用户名密码,避免无权限访问,保障 Milvus 元数据的安全:
# 启动时添加认证参数(替换单机模式命令中的环境变量)

-e ALLOW_NONE_AUTHENTICATION=no 

-e ETCD_ROOT_PASSWORD=your_strong_password  # 根用户密码

访问时需指定认证:etcdctl --user root:your_strong_password get mykey,Milvus 连接 etcd 时也需配置相应的认证信息。

  • 集群模式:生产环境需部署 3/5 节点集群,通过ETCD_INITIAL_CLUSTER配置多个节点地址(如node1=http://ip1:2380,node2=http://ip2:2380),以提高 etcd 的可用性和容错性,进而保障 Milvus 集群的稳定运行。

网站公告

今日签到

点亮在社区的每一天
去签到