VictoriaMetrics | 云原生监控新宠: 以二进制方式部署VM高可用集群实践

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ]

📢 大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(DevSecOps),自动化运维工具开发与实践,企业网络安全防护,欢迎各位道友一起学习交流、一起进步 🚀,若此文对你有帮助,一定记得倒点个关注⭐与小红星❤️,收藏学习不迷路 😋 。

使用二进制方式部署 victoriaMetrics 集群

使用二进制方式部署 victoriaMetrics 集群也非常简单,实际上就是将单机实例中的三个组件(
vmstorage 
,
vminsert
,
vmselect
)分别部署到集群机器节点中,此外还需与 vmauth、vmagent 组件配合使用,以实现高可用、访问认证以及指标数据的采集、转发和查询等功能。

本小节将手把手教你如何部署一套生产级别、高可用(HA)的 VictoriaMetrics 集群,确保监控系统自身具备容错、可扩展与持久化,乃至安全认证能力。

参考文档:https://docs.victoriametrics.com/quick-start/#starting-vm-cluster-from-binaries

环境说明:

VictoriaMetrics 集群至少需要三个节点,每个节点上都要运行这三个组件,这里同样使用安全加固后  
OpenEuler 24.03 LTS-SP1 Linux
 系统进行演示。



# 节点
node1 10.20.172.212
node2 10.20.172.213
node3 10.20.172.214
 
# 组件端口
vmstorage 8482
vmselect 8481 / 集群内部通信 8401
vminsert 8480 / 集群内部通信 8400
 
# 负载均衡器 
10.20.172.212:8427 
 
# 认证配置
metrics:weiyigeek.top

操作步骤:

步骤 01.从 Github 中下载集群版本的 VictoriaMetrics 压缩包。



# 代理下载
DOWN_PROXY="https://gh.wygk.eu.org"
# 固定版本(2025年11月6日 11:03:32 最新版本)
VERSION=v1.129.1
# 最新版本
LAST_VERSION=$(curl -s "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/tags" | grep '"name":' | grep -v 'beta|alpha|rc' | head -n 1 | awk -F '"' '{print $4}')
# 若未获取到最新版本,则使用固定版本
VM_VERSION=${LAST_VERSION:-$VERSION}
 
# 下载
wget -L "${DOWN_PROXY}/https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/${VM_VERSION}/victoria-metrics-linux-amd64-${VM_VERSION}-cluster.tar.gz"

步骤 02.将下载的压缩包复制到三台节点主机上,并解压集群版本的压缩包,你会得到三个二进制文件:
vminsert-prod

vmselect-prod
, 和 
vmstorage-prod



$ tar -zxvf victoria-metrics-linux-amd64-v1.129.1-cluster.tar.gz -C /usr/local/bin
vminsert-prod
vmselect-prod
vmstorage-prod

步骤 03.在每个节点上创建数据存储目录 和 VictoriaMetrics 用户,并为目录设置正确的权限。



# 创建用户
sudo useradd -M -U -s /usr/sbin/nologin victoriametrics 
 
# 创建配置、数据、缓存目录
sudo mkdir -p /etc/victoriametrics
sudo mkdir -p /app/vmstorage/data
sudo mkdir -p /app/vmselect/cache
 
# 权限赋予
sudo chown -R victoriametrics:victoriametrics /app
 
# 目录结构
$ tree /app/
/app/
├── vmselect
│   └── cache
└── vmstorage
    └── data

步骤 04.在每个节点上创建 vmstorage 组件配置文件和服务文件。



# vmstorage 配置文件:
tee /etc/victoriametrics/vmstorage.conf <<'EOF'
httpListenAddr=:8482
vminsertAddr=:8400
vmselectAddr=:8401
storageDataPath=/app/vmstorage/data
retentionPeriod=7d
dedup_minScrapeInterval=15s 
loggerTimezone=Asia/Shanghai
loggerLevel=INFO
loggerFormat=default
EOF
 
# vmstorage 服务文件:
tee /usr/lib/systemd/system/vmstorage.service <<'EOF'
[Unit]
Description=VictoriaMetrics vmstorage service
After=network.target
 
[Service]
Type=simple
User=victoriametrics
Group=victoriametrics
Restart=always
EnvironmentFile=/etc/victoriametrics/vmstorage.conf
ExecStart=/usr/local/bin/vmstorage-prod -envflag.enable
WorkingDirectory=/app/vmstorage
PrivateTmp=yes
ProtectHome=yes
NoNewPrivileges=yes
ProtectSystem=full
 
[Install]
WantedBy=multi-user.target
EOF

步骤 05.在每个节点上创建 vminsert 组件配置文件和服务文件。



# vminsert 配置文件:
tee /etc/victoriametrics/vminsert.conf <<'EOF'
httpListenAddr=:8480
storageNode=10.20.172.212:8400,10.20.172.213:8400,10.20.172.214:8400
replicationFactor=2
loggerTimezone=Asia/Shanghai
loggerLevel=INFO
loggerFormat=default
EOF
 
# vminsert 服务文件:
tee /usr/lib/systemd/system/vminsert.service <<'EOF'
[Unit]
Description=VictoriaMetrics vminsert service
After=network.target
 
[Service]
Type=simple
User=victoriametrics
Group=victoriametrics
Restart=always
EnvironmentFile=/etc/victoriametrics/vminsert.conf
ExecStart=/usr/local/bin/vminsert-prod -envflag.enable
PrivateTmp=yes
ProtectHome=yes
NoNewPrivileges=yes
ProtectSystem=full
 
[Install]
WantedBy=multi-user.target
EOF

步骤 06.在每个节点上创建 vmselect 组件配置文件和服务文件。



# vmselect 配置文件:
tee /etc/victoriametrics/vmselect.conf <<'EOF'
httpListenAddr=:8481
storageNode=10.20.172.212:8401,10.20.172.213:8401,10.20.172.214:8401
cacheDataPath=/app/vmselect/cache
vmui_defaultTimezone=Asia/Shanghai
loggerTimezone=Asia/Shanghai
loggerLevel=INFO
loggerFormat=default
EOF
 
# vmselect 服务文件:
tee /usr/lib/systemd/system/vmselect.service <<'EOF'
[Unit]
Description=VictoriaMetrics vmselect service
After=network.target
 
[Service]
Type=simple
User=victoriametrics
Group=victoriametrics
Restart=always
EnvironmentFile=/etc/victoriametrics/vmselect.conf
ExecStart=/usr/local/bin/vmselect-prod -envflag.enable
PrivateTmp=yes
ProtectHome=yes
NoNewPrivileges=yes
ProtectSystem=full
 
[Install]
WantedBy=multi-user.target
EOF

步骤 07.在每个节点上启动并自启用服务,并检查服务是否已成功启动。



# 重启守护进程,以重新加载新的服务文件
sudo systemctl daemon-reload
 
# 自启动 vmstorage 服务
sudo systemctl enable vmstorage --now
sudo systemctl status vmstorage
11月 06 16:32:29 weiyigeek-top vmstorage-prod[1801056]: 2025-11-06T16:32:29.205+0800     info   VictoriaMetrics/lib/vminsertapi/server.go:82  accepting vminsert conns at 0.0.0.0:8400
11月 06 16:32:29 weiyigeek-top vmstorage-prod[1801056]: 2025-11-06T16:32:29.206+0800     info   VictoriaMetrics/lib/vmselectapi/server.go:155  accepting vmselect conns at 0.0.0.0:8401
11月 06 16:32:29 weiyigeek-top vmstorage-prod[1801056]: 2025-11-06T16:32:29.206+0800     info   VictoriaMetrics/lib/httpserver/httpserver.go:145  started server at http://0.0.0.0:8482/
 
# 自启动 vminsert 服务
sudo systemctl enable vminsert --now
sudo systemctl status vminsert
 
# 自启动 vmselect 服务
sudo systemctl enable vmselect --now
sudo systemctl status vmselect

步骤 08.在每个节点上配置防火墙规则,限制允许访问 VictoriaMetrics 组件的端口的主机,生产环境中建议做限制。



# vmstorage 端口 8482 以及 集群内部通信端口 8400 、8401  只允许节点内部主机访问,外部无法访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.20.172.212/32" port protocol="tcp" port="8482" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.20.172.213/32" port protocol="tcp" port="8482" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.20.172.214/32" port protocol="tcp" port="8482" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.20.172.212/32" port protocol="tcp" port="8400" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.20.172.213/32" port protocol="tcp" port="8400" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.20.172.214/32" port protocol="tcp" port="8400" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.20.172.212/32" port protocol="tcp" port="8401" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.20.172.213/32" port protocol="tcp" port="8401" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.20.172.214/32" port protocol="tcp" port="8401" accept'
 
# vminsert 端口: 8480
# vmselect 端口: 8481
firewall-cmd --permanent --add-port=8480/tcp --add-port=8481/tcp
 
# 重载配置
firewall-cmd --reload

步骤 09.在任意一台节点上访问 VictoriaMetrics 的内置 UI,默认情况下,VictoriaMetrics 监听端口 
8481
上的HTTP请求,请求地址 
http//<ip_or_hostname>:8481/select/vmui/vmui
, 若为多租户环境,则需要替换为对应的租户路径,例如 
/select/accountID:projectID/vmui

weiyigeek.top-内置VMUI图

温馨提示:此时还没有配置抓取指标,所以暂时看不到任何数据,在后续章节中作者会实践讲解,这里不用着急。

步骤 10.VictoriaMetrics 提供了原生的 vmauth 组件(缺省端口:8427),用于处理 VictoriaMetrics 集群的路由负载、认证和授权。在生产环境中,强烈建议启用此功能以增强安全性,此处我在 node1 节点上演示如何安装配置 vmauth。

安装解压



# 代理下载
DOWN_PROXY="https://gh.wygk.eu.org"
# 固定版本(2025年11月6日 11:03:32 最新版本)
VERSION=v1.129.1
# 最新版本
LAST_VERSION=$(curl -s "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/tags" | grep '"name":' | grep -v 'beta|alpha|rc' | head -n 1 | awk -F '"''{print $4}')
# 最终版本
VM_VERSION=${LAST_VERSION:-$VERSION}
TMP_DIR=$(mktemp -d)
 
# 下载工具包
echo"正在下载 vmutils 版本: $VM_VERSION 到 ${TMP_DIR} 目录下"
wget -L -c ${DOWN_PROXY}/https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/${VM_VERSION}/vmutils-linux-amd64-${VM_VERSION}.tar.gz -O ${TMP_DIR}/vmutils.tar.gz
 
# 仅解压工具包中 vmauth 组件到 /usr/local/bin 目录下
tar -xzf ${TMP_DIR}/vmutils.tar.gz -C /usr/local/bin vmauth-prod 
 
# 查看版本
/usr/local/bin/vmauth-prod --version
vmauth-20251104-104931-tags-v1.129.1-0-g5e98e0cff5

创建 vmauth 配置文件以及 systemd 服务文件



# vmauth 用户认证及高可用配置文件
tee /etc/victoriametrics/vmauth.yml <<'EOF'
# 启用认证
users:
- username: "metrics"
  password: "weiyigeek.top"
  url_map:
  - src_paths:
    - "/insert/.*"
    url_prefix:
    - "http://10.20.172.212:8480/"
    - "http://10.20.172.213:8480/"
    - "http://10.20.172.214:8480/"
  - src_paths:
    - "/select/.*"
    - "/admin/.*"
    url_prefix:
    - "http://10.20.172.212:8481/"
    - "http://10.20.172.213:8481/"
    - "http://10.20.172.214:8481/"
EOF
 
# 创建 vmauth 服务文件
cat > /etc/victoriametrics/vmauth.conf <<'EOF'
ARGS=-httpListenAddr :8427 --auth.config=/etc/victoriametrics/vmauth.yml -loggerTimezone=Asia/Shanghai --loggerLevel=INFO --loggerFormat=default
EOF
 
# vmauth 服务配置文件示例:
cat > /etc/systemd/system/vmauth.service <<EOF
[Unit]
Description=vmauth is an HTTP proxy,which can authorize route and load balance 
Documentation=https://docs.victoriametrics.com
After=network.target
 
[Service]
Type=simple
User=victoriametrics
Group=victoriametrics
StartLimitBurst=5
StartLimitInterval=0
Restart=on-failure
RestartSec=5
EnvironmentFile=-/etc/victoriametrics/vmauth.conf
ExecStart=/usr/local/bin/vmauth-prod $ARGS
ExecStop=/bin/kill -s SIGTERM $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
StandardOutput=journal
StandardError=journal
SyslogIdentifier=vmauth
PrivateTmp=yes
ProtectHome=yes
NoNewPrivileges=yes
ProtectSystem=strict
ProtectControlGroups=true
ProtectKernelModules=true
ProtectKernelTunables=yes
 
[Install]
WantedBy=multi-user.target
EOF

设置自启动并验证服务状态,使用浏览器访问 
http://主机IP:8427/select/vmui/vmui
 查看内置 UI 页面。



sudo systemctl daemon-reload
sudo systemctl enable vmauth --now
sudo systemctl status vmauth


weiyigeek.top-验证vmauth组件工作状态图

温馨提示:若启动服务报错请检查配置文件是否有语法错误,例如,缩进问题等,或者查看 
tail -f /var/log/messages
 日志。

温馨提示:vmauth 组件某些功能社区版本是不支持的,例如 
IP filters
 过滤赛选只有企业版支持,此处不做演示。

官方文档:https://docs.victoriametrics.com/victoriametrics/vmauth/#load-balancer-for-victoriametrics-cluster

END

加入:作者【全栈工程师修炼指南】知识星球

『 全栈工程师修炼指南』星球,主要涉及全栈工程师(Full Stack Development)实践文章,包括但不限于企业SecDevOps和网络安全等保合规、安全渗透测试、编程开发、云原生(Cloud Native)、物联网工业控制(IOT)、人工智能Ai,从业书籍笔记,人生职场认识等方面资料或文章。

Q: 加入作者【全栈工程师修炼指南】星球后有啥好处?

✅ 将获得作者最新工作学习实践文章以及网盘资源。

✅ 将获得作者珍藏多年的全栈学习笔记(需连续两年及以上老星球友,也可单次购买) 

✅ 将获得作者专门答疑学习交流群,解决在工作学习中的问题。 

✅ 将获得作者远程支持(在作者能力范围内且合规)。

获取:作者工作学习全栈笔记

作者整理了10年的工作学习笔记(涉及网络、安全、运维、开发),需要学习实践笔记的看友,可添加作者微信或者回复【工作学习实践笔记】,当前价格¥299,除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持,希望大家多多支持,收获定大于付出!

 知识推荐 往期文章

🔥【最新】VictoriaMetrics | 云原生监控新宠: 10倍性能碾压Prometheus?单机一键部署实战

🔥【最新】DBA | 告别数据泵!Oracle 推荐的物理备份神器 RMAN 快速入门指南

🔥【最新】DBA | Oracle RMAN 实战:物理备份与数据恢复全解析

💡【相关】告别杂乱Windows安全日志!VictoriaLogs+Grafana构建企业级审计日志分析平台实战

💡【相关】告别Nginx原始日志!VictoriaLogs+Grafana构建企业级应用日志分析平台实战

💡【相关】无缝迁徙:从 Prometheus 到 VictoriaMetrics 的零停机数据迁移指南

若文章对你有帮助,请将它转发给更多的看友,若有疑问的小伙伴,可在评论区留言你想法哟 💬!

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
老实人鑫哥的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容