时间:26-04-25
在微服务与云原生架构成为主流的当下,系统可观测性已从辅助工具演变为保障业务连续性的核心基础设施。作为Prometheus的高性能替代方案,VictoriaMetrics凭借其卓越的写入吞吐量、极低的内存与存储开销以及出色的水平扩展能力,正成为企业级指标监控系统的首选。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
核心挑战在于:如何确保这套监控系统自身具备强大的容错与恢复能力?解决方案是构建一个具备容错、弹性扩展与数据持久化特性的高可用集群。本文将聚焦于最稳定、可控的二进制部署方式,逐步指导你搭建一套坚实的监控基础设施。
深入理解架构原理是成功部署的前提。在开始配置前,我们快速厘清VictoriaMetrics集群的三个核心组件及其职责,这如同掌握建筑蓝图,是后续一切操作的基础。
架构图清晰地揭示了数据流与组件间的协作关系,理解它将使配置过程事半功倍。
监控系统的价值在于快速定位故障,但如果其自身部署复杂、依赖繁多,反而可能成为新的故障点。为最大化降低外部依赖风险,我们选择轻量、稳定且自主可控的二进制部署方案,这相当于为监控系统构建了一个独立、可靠的基础运行环境。
首先,获取并准备必要的软件包:
$ wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.128.0/victoria-metrics-linux-amd64-v1.128.0-cluster.tar.gz
$ tar xvf victoria-metrics-linux-amd64-v1.128.0-cluster.tar.gz -C /tmp/
解压后,在/tmp/目录中你将找到三个核心可执行文件:vminsert-prod、vmselect-prod和vmstorage-prod。
vmstorage是集群的数据存储引擎,负责指标的长期持久化,其部署的可靠性直接决定数据安全。
# 创建vmstorage部署目录
sudo mkdir -p /app/vmstorage/{data,bin}
sudo chown -R ops. /app/vmstorage
# vmstorage启动参数
cat <<'EOF' | tee /app/vmstorage/vmstorage.conf > /dev/null
httpListenAddr=:8482
vminsertAddr=:8400
vmselectAddr=:8401
storageDataPath=/app/vmstorage/data
retentionPeriod=7d
dedup_minScrapeInterval=10s
loggerTimezone=Asia/Shanghai
loggerLevel=INFO
loggerFormat=default
EOF
# systemd配置文件
cat <<'EOF' | sudo tee /usr/lib/systemd/system/vmstorage.service > /dev/null
[Unit]
Description=VictoriaMetrics vmstorage service
After=network.target
[Service]
Type=simple
User=ops
Restart=always
EnvironmentFile=/app/vmstorage/vmstorage.conf
ExecStart=/app/vmstorage/bin/vmstorage-prod -envflag.enable
WorkingDirectory=/app/vmstorage
PrivateTmp=yes
ProtectHome=yes
NoNewPrivileges=yes
ProtectSystem=full
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
sudo systemctl daemon-reload
sudo systemctl start vmstorage --now
关键部署原则:所有vmstorage节点采用完全相同的配置。为实现数据高可用与容错,生产环境至少部署三个节点,这是确保在单节点故障时数据读写服务不受影响的行业最佳实践。
vminsert作为数据写入入口,负责接收所有监控指标并将其分发到后端的vmstorage节点。
# 创建vminsert部署目录
sudo mkdir -p /app/vminsert/bin
sudo chown -R ops. /app/vminsert
cp /tmp/vminsert-prod /app/vminsert/bin/vminsert-prod
# vminsert启动参数
cat <<'EOF' | tee /app/vminsert/vminsert.conf > /dev/null
httpListenAddr=:8480
storageNode=172.139.20.17:8400,172.139.20.81:8400,172.139.20.177:8400
replicationFactor=2
loggerTimezone=Asia/Shanghai
loggerLevel=INFO
loggerFormat=default
EOF
# systemd配置文件
cat <<'EOF' | sudo tee /usr/lib/systemd/system/vminsert.service > /dev/null
[Unit]
Description=VictoriaMetrics vminsert service
After=network.target
[Service]
Type=simple
User=ops
Restart=always
EnvironmentFile=/app/vminsert/vminsert.conf
ExecStart=/app/vminsert/bin/vminsert-prod -envflag.enable
PrivateTmp=yes
ProtectHome=yes
NoNewPrivileges=yes
ProtectSystem=full
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
sudo systemctl daemon-reload
sudo systemctl start vminsert --now
高可用配置:所有vminsert节点配置一致。为消除写入单点故障,建议部署两个或更多节点,并通过负载均衡对外提供服务。
vmselect组件处理来自Grafana等可视化工具的查询请求,从多个vmstorage节点聚合数据并返回结果。
# 创建vmselect部署目录
sudo mkdir -p /app/vmselect/{bin,cache}
sudo chown -R ops. /app/vmselect
cp /tmp/vmselect-prod /app/vmselect/bin/vmselect-prod
# vmselect启动参数
cat <<'EOF' | tee /app/vmselect/vmselect.conf > /dev/null
httpListenAddr=:8481
storageNode=172.139.20.17:8401,172.139.20.81:8401,172.139.20.177:8401
cacheDataPath=/app/vmselect/cache
vmui_defaultTimezone=Asia/Shanghai
loggerTimezone=Asia/Shanghai
loggerLevel=INFO
loggerFormat=default
EOF
# systemd配置文件
cat <<'EOF' | sudo tee /usr/lib/systemd/system/vmselect.service > /dev/null
[Unit]
Description=VictoriaMetrics vmselect service
After=network.target
[Service]
Type=simple
User=ops
Restart=always
EnvironmentFile=/app/vmselect/vmselect.conf
ExecStart=/app/vmselect/bin/vmselect-prod -envflag.enable
PrivateTmp=yes
ProtectHome=yes
NoNewPrivileges=yes
ProtectSystem=full
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
sudo systemctl daemon-reload
sudo systemctl start vmselect --now
部署建议:配置保持统一,且至少部署两个节点以保障查询服务的高可用性,避免单点故障影响监控数据可视化。
各组件部署完成后,需要通过负载均衡器为客户端提供统一的访问入口。以下是一个简洁的HAProxy配置示例:
listen vminsert
bind *:18480
mode tcp
balance roundrobin
server vminsert01 172.139.20.182:8480 check
server vminsert02 172.139.20.183:8480 check
listen vmselect
bind *:18481
mode tcp
balance roundrobin
server vmselect01 172.139.20.182:8481 check
server vmselect02 172.139.20.183:8481 check
配置生效后,客户端只需将写入请求指向HAProxy的18480端口,查询请求指向18481端口,流量便会自动、均匀地分发到后端多个对等节点。
部署完成后,务必验证集群健康状态。通过访问任意节点的HTTP状态页面,可以直观查看各组件的运行状态及集群节点成员信息。
二进制部署方案或许不如容器化方案流行,但其在生产环境中所展现出的极致稳定性、极低资源开销以及高效的故障排查能力,具有不可替代的价值。遵循上述步骤,你可以在裸金属或虚拟机环境中,快速构建一套生产就绪、高可用且支持线性扩展的VictoriaMetrics监控集群,为你的业务系统奠定坚实、可靠的可观测性基石。