图片查重从设计到实现(2)Milvus安装准备etcd介绍、应用场景及Docker安装配置
etcd作用、应用场景及Docker安装配置
在分布式向量数据库 Milvus 的架构中,etcd 扮演着至关重要的角色。Milvus 用于存储和管理海量向量数据,支持高效的相似性搜索等操作,而其分布式集群的正常运行高度依赖元数据的一致性和可靠性,etcd 正是承担这一关键任务的组件,负责存储 Milvus 集群的元数据,如集合信息、索引配置、分区详情等,确保 Milvus 各节点能协同工作。下面详细介绍 etcd 的相关内容:
一、etcd 的作用
etcd 是一个高可用、强一致性的分布式键值(key-value)存储系统,基于 Raft 一致性算法实现,主要作用如下:
-
分布式数据存储:以键值对形式存储数据,支持数据的增删改查,且所有节点数据实时一致,能为分布式系统提供统一的数据存储服务。
-
强一致性保证:通过 Raft 算法确保分布式环境下数据的一致性,即所有节点最终会看到相同的数据,这对于存储需要严格一致的关键信息,如集群状态、配置参数等非常重要。
-
高可用与容错:支持集群部署(通常为 3/5 节点),单个节点故障不会影响整体服务,系统会自动选举新主节点,保障服务的持续运行。
-
Watch 机制:支持监听特定键或前缀的变化,当数据更新时能实时通知客户端,这一机制适合配置动态更新、服务发现等场景。在 Milvus 中,这一机制有助于各节点实时获取元数据的变化,保证集群的协同高效。
二、etcd 的应用场景
etcd 因强一致性和高可用特性,在分布式系统中应用广泛,典型场景包括:
-
容器编排与集群管理:最典型的是 Kubernetes(K8s),etcd 作为 K8s 的核心组件,用于存储集群的所有状态,如 Pod 配置、节点信息、服务规则等。
-
服务发现:在分布式系统中,服务实例的地址、端口等信息可存储在 etcd 中,客户端通过 etcd 动态获取服务地址,替代了传统的静态配置,提高了系统的灵活性和可扩展性。
-
配置中心:集中管理分布式应用的配置参数,如数据库地址、限流阈值等,通过 Watch 机制实现配置变更时的实时推送,无需重启服务,提升了系统的维护效率。
-
分布式锁:利用 etcd 的原子操作(如 Compare-and-Swap)实现分布式锁,解决多节点并发操作共享资源的冲突问题,保证操作的原子性和一致性。
-
元数据存储:如 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 集群的稳定运行。