Синхронизация данных

  1. На сервере с master-node ViQube установить программы inotify и sshpass, выполнив команду:

    sudo apt-get update && sudo apt-get install -y inotify-tools sshpass
  2. На сервере с master-node ViQube для каждой slave-node создать скрипты с телом ниже, где заменить <node_ip>, <user>, <password> на нужные:

    • Для синхронизации снапшота, например, скрипт viqube_sync_snapshot_slave_1.sh

      #!/bin/bash
      
      LOGIN=<user>
      PASSWORD=<password>
      IP=<node_ip>
      
      while true; do
        inotifywait -r --event close_write --event create --event move --exclude '(.+)[\.](snapshot)[\.](.+)' /docker-volume/viqube/snapshots
        sshpass -p "${PASSWORD}" rsync -azvPr /docker-volume/viqube/snapshots/auto.snapshot ${LOGIN}@${IP}:/tmp/viqube/
        sshpass -p "${PASSWORD}" ssh ${LOGIN}@${IP} "echo ${PASSWORD} | sudo -S cp /tmp/viqube/auto.snapshot /docker-volume/viqube/snapshots/auto.snapshot"
        # Restart ViQube
        echo ${PASSWORD} | sshpass -p "${PASSWORD}" ssh -tt ${LOGIN}@${IP} PASSWORD=${PASSWORD} 'sudo docker rm -f $(sudo -S docker ps --filter "name=viqube" -q)'
      done
    • Для синхронизации конфига, например, скрипт viqube_sync_config_slave_1.sh

      #!/bin/bash
      
      LOGIN=<user>
      PASSWORD=<password>
      IP=<node_ip>
      
      while true; do
        inotifywait -r --event close_write --event create --event move /docker-volume/viqube/config
        sshpass -p "${PASSWORD}" rsync -azvPr /docker-volume/viqube/config/config.ini ${LOGIN}@${IP}:/tmp/viqube/
        sshpass -p "${PASSWORD}" ssh ${LOGIN}@${IP} "echo ${PASSWORD} | sudo -S cp /tmp/viqube/config.ini /docker-volume/viqube/config/config.ini"
        # Restart ViQube
        echo ${PASSWORD} | sshpass -p "${PASSWORD}" ssh -tt ${LOGIN}@${IP} PASSWORD=${PASSWORD} 'sudo docker rm -f $(sudo -S docker ps --filter "name=viqube" -q)'
      done
  3. Дать права на выполнение:

    chmod +x viqube_sync_snapshot_slave_1.sh
    chmod +x viqube_sync_config_slave_1.sh
  4. Добавить сертификаты для ssh от всех slave машин на master. Например, это можно сделать так:

    sudo ssh <user>@<ip> echo 1
  5. Добавить скрипты из шага 3 в крон на перезагрузку машины.

    • sudo crontab -e
    • Добавить строчки, где заменить путь до скрипта <path>:

      SHELL=/bin/bash
      
      @reboot <path>/viqube_sync_snapshot_slave_1.sh
      @reboot <path>/viqube_sync_config_slave_1.sh
    • Для логирования можно использовать другую команду:

      @reboot <path>/viqube_sync_snapshot_slave_1.sh >> /var/log/viqube_sync.log 2>&1
      @reboot <path>/viqube_sync_config_slave_1.sh >> /var/log/viqube_sync.log 2>&1
    • Перезагрузить машину.

      sudo reboot