Установка VictoriaMetrics Cluster из бинарников в изолированной среде

2. Скачивание бинарников из локального репозитория на целевые хосты

  1. На целевых нодах будущего кластера VictoriaMetrics выполните загрузку бинарников из локального NXRM:

    VER='v1.111.0'
    PLATFORM='linux-amd64'
    
    INTERNAL_REPO="https://nexus.example.org/repository/raw"
    REPO_FOLDER="monitoring/victoriametrics"
    
    TMPDIR=$(mktemp -d) && cd $TMPDIR
    curl -LO ${INTERNAL_REPO}/${REPO_FOLDER}/victoria-metrics-${PLATFORM}-${VER}-cluster.tar.gz
    curl -LO ${INTERNAL_REPO}/${REPO_FOLDER}/victoria-metrics-${PLATFORM}-${VER}-cluster_checksums.txt
    curl -LO ${INTERNAL_REPO}/${REPO_FOLDER}/vmutils-${PLATFORM}-${VER}.tar.gz
    curl -LO ${INTERNAL_REPO}/${REPO_FOLDER}/vmutils-${PLATFORM}-${VER}_checksums.txt
  2. Распакуйте скачанные файлы-архивы:

    tar xvf victoria-metrics-${PLATFORM}-${VER}-cluster.tar.gz
    tar xvf vmutils-${PLATFORM}-${VER}.tar.gz
  3. Проверьте целостность всех полученных файлов:

    sha256sum -c \
      victoria-metrics-${PLATFORM}-${VER}-cluster_checksums.txt \
      vmutils-${PLATFORM}-${VER}_checksums.txt

    Ожидаемый вывод:

    victoria-metrics-linux-amd64-v1.111.0-cluster.tar.gz: OK
    vminsert-prod: OK
    vmselect-prod: OK
    vmstorage-prod: OK
    vmutils-linux-amd64-v1.111.0.tar.gz: OK
    vmagent-prod: OK
    vmalert-prod: OK
    vmalert-tool-prod: OK
    vmauth-prod: OK
    vmbackup-prod: OK
    vmrestore-prod: OK
    vmctl-prod: OK
  4. Разместите бинарники в каталоге /usr/local/bin:

    rm -f *${VER}*
    install vm* /usr/local/bin/
  5. Удалите временный каталог со скачанными файлами VictoriaMetrics:

    rm -rf "${TMPDIR}"

3. Приведение hosts к единому виду

  1. Отредактируйте файл /etc/hosts одинаковым образом на всех машинах будущего VictoriaMetrics-кластера:

    #
    # IP-Address  Full-Qualified-Hostname  Short-Hostname
    #
    
    127.0.0.1       localhost
    
    # special IPv6 addresses
    ::1             localhost ipv6-localhost ipv6-loopback
    
    fe00::0         ipv6-localnet
    
    ff00::0         ipv6-mcastprefix
    ff02::1         ipv6-allnodes
    ff02::2         ipv6-allrouters
    ff02::3         ipv6-allhosts
    
    10.0.0.15    mon-vmauth01p.example.org    mon-vmauth01p
    10.0.0.13    mon-vmauth02p.example.org    mon-vmauth02p
    10.0.0.7     mon-vminsert01p.example.org  mon-vminsert01p
    10.0.0.4     mon-vminsert02p.example.org  mon-vminsert02p
    10.0.0.12    mon-vmselect01p.example.org  mon-vmselect01p
    10.0.0.9     mon-vmselect02p.example.org  mon-vmselect02p
    10.0.0.3     mon-vmstorage01p.example.org mon-vmstorage01p vmstorage01
    10.0.0.6     mon-vmstorage02p.example.org mon-vmstorage02p vmstorage02
    10.0.0.1     mon-vmstorage03p.example.org mon-vmstorage03p vmstorage03
    10.0.0.16    mon-vmstorage04p.example.org mon-vmstorage04p vmstorage04
    10.0.0.2     mon-vmstorage05p.example.org mon-vmstorage05p vmstorage05
    10.0.0.18    mon-ctl0617p.example.org     mon-ctl0617p

4. Установка vmstorage

  1. На хостах, выделенных для размещения vmstorage, создайте аккаунт, каталог для хранения данных, и разместите systemd-юнит в каталоге /etc/systemd/system:

    VMSTORAGE_DIR='/srv/vmstorage'
    
    groupadd -g 800 victoriametrics
    useradd -r -M -s /sbin/nologin -g victoriametrics vmstorage
    
    mkdir -p ${VMSTORAGE_DIR} && \
    chown -R vmstorage:victoriametrics ${VMSTORAGE_DIR}
    chmod 750 ${VMSELECT_DIR}
    Возможно нам пригодится одинаковый GID группы на всех vmstorage-нодах для целей бекапирования?
  2. Добавьте в systemd юнит vmstorage.service:

    cat << EOF >/etc/systemd/system/vmstorage.service
    [Unit]
    Description=vmstorage - stores the raw data and returns the queried data on the given time range for the given label filters
    # https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html
    After=network.target
    
    [Service]
    Type=simple
    User=vmstorage
    Group=victoriametrics
    UMask=027
    StartLimitBurst=5
    StartLimitInterval=0
    Restart=on-failure
    RestartSec=1
    EnvironmentFile=/etc/sysconfig/vmstorage
    ExecStart=/usr/local/bin/vmstorage-prod -envflag.enable
    ExecStop=/bin/kill -s SIGTERM \$MAINPID
    ExecReload=/bin/kill -s HUP \$MAINPID
    # See docs https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#tuning
    LimitNOFILE=1048576
    LimitNPROC=1048576
    LimitCORE=infinity
    ReadWritePaths=${VMSTORAGE_DIR}
    PrivateTmp=yes
    ProtectHome=yes
    NoNewPrivileges=yes
    ProtectSystem=strict
    ProtectControlGroups=true
    ProtectKernelModules=true
    ProtectKernelTunables=yes
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    systemctl daemon-reload
    
    cat << EOF > /etc/sysconfig/vmstorage
    retentionPeriod=90d
    storageDataPath=${VMSTORAGE_DIR}
    EOF
    set +u
    
    systemctl enable --now vmstorage
  3. Проверьте работоспособность сервиса. Например:

    curl http://vminsert01:8482/-/healthy

    Ожидаемый вывод:

    VictoriaMetrics is Healthy.

5. Установка vminsert

  1. На хостах, выделенных под vminsert-сервис, добавьте в systemd юнит vminsert.service:

    groupadd -r victoriametrics
    useradd -r -M -s /sbin/nologin -g victoriametrics vminsert
    
    set -u; cat << EOF >/etc/systemd/system/vminsert.service
    [Unit]
    Description=vminsert - accepts the ingested data and spreads it among vmstorage nodes according to consistent hashing over metric name and all its labels
    # https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html
    After=network.target
    
    [Service]
    Type=simple
    User=vminsert
    Group=victoriametrics
    StartLimitBurst=5
    StartLimitInterval=0
    Restart=on-failure
    RestartSec=1
    EnvironmentFile=/etc/sysconfig/vminsert
    ExecStart=/usr/local/bin/vminsert-prod -envflag.enable
    ExecStop=/bin/kill -s SIGTERM \$MAINPID
    ExecReload=/bin/kill -s HUP \$MAINPID
    # See docs https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#tuning
    LimitNOFILE=1048576
    LimitNPROC=1048576
    LimitCORE=infinity
    PrivateTmp=yes
    ProtectHome=yes
    NoNewPrivileges=yes
    ProtectSystem=strict
    ProtectControlGroups=true
    ProtectKernelModules=true
    ProtectKernelTunables=yes
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    systemctl daemon-reload
    
    cat << 'EOF' > vminsert
    #vminsertAddr=:8480
    storageNode='\
    vmstorage01,\
    vmstorage02,\
    vmstorage03,\
    vmstorage04,\
    vmstorage05'
    EOF
    set +u
    
    systemctl enable --now vminsert
  2. Проверьте работоспособность сервиса:

    curl http://mon-vminsert01p:8480/-/healthy

    Ожидаемый вывод:

    VictoriaMetrics is Healthy.

6. Установка vmselect

  1. На хостах, выделенных для размещения vmselect, создайте непривилегированный аккаунт, под которым будет работать демон vmselect, каталог для буфера запросов, и добавьте в /etc/systemd/system systemd-юнит:

    VMSELECT_DIR='/srv/vmselect'
    
    groupadd -r victoriametrics
    useradd -r -M -s /sbin/nologin -g victoriametrics -d ${VMSELECT_DIR} vmselect
    
    mkdir -p ${VMSELECT_DIR}
    chown vmselect:victoriametrics ${VMSELECT_DIR}
    chmod 750 ${VMSELECT_DIR}
    
    set -u; cat << EOF >/etc/systemd/system/vmselect.service
    [Unit]
    Description=vmselect - performs incoming queries by fetching the needed data from all the configured vmstorage nodes
    # https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html
    After=network.target
    
    [Service]
    Type=simple
    User=vmselect
    Group=victoriametrics
    UMask=027
    StartLimitBurst=5
    StartLimitInterval=0
    Restart=on-failure
    RestartSec=1
    EnvironmentFile=/etc/sysconfig/vmselect
    ExecStart=/usr/local/bin/vmselect-prod -envflag.enable
    ExecStop=/bin/kill -s SIGTERM \$MAINPID
    ExecReload=/bin/kill -s HUP \$MAINPID
    # See docs https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#tuning
    LimitNOFILE=1048576
    LimitNPROC=1048576
    LimitCORE=infinity
    ReadWritePaths=${VMSELECT_DIR}
    PrivateTmp=yes
    ProtectHome=yes
    NoNewPrivileges=yes
    ProtectSystem=strict
    ProtectControlGroups=true
    ProtectKernelModules=true
    ProtectKernelTunables=yes
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    systemctl daemon-reload
    
    cat << 'EOF' > /etc/sysconfig/vmselect
    storageNode='\
    vmstorage01,\
    vmstorage02,\
    vmstorage03,\
    vmstorage04,\
    vmstorage05'
    EOF
    set +u
    
    systemctl enable --now vmselect
  2. Проверьте работоспособность сервиса:

    curl http://mon-vmselect01p:8481/-/healthy

    Ожидаемый вывод:

    VictoriaMetrics is Healthy.