Инструменты пользователя

Инструменты сайта


ac:replic

Репликация

общее описание

репликация нужна в двух случаях

  1. когда есть несколько удаленных друг от друга филиала
  2. локально для обеспечения бесперебойности работы

подготовка

для начала нам нужно сделать копию БД. в это время система должна не работать т.е. закрыты все кассы и никто не ходит по территории. иначе данные в этот момент будут потерянны

заводим нужные филиалы у каждого филиала в МУ надо включить репликацию (для локальной репликации филиал не нужен)

делаем копию БД: блокируем файл

sudo /opt/firebird/bin/nbackup -L ac -U SYSDBA -P masterke

копируем файл БД

sudo cp ac.fdb  . . . 

разблокируем БД

sudo /opt/firebird/bin/nbackup -N ac -U SYSDBA -P masterke

копируем файл на другой компьютер

scp . . . 

добавляем альяс на другом компьюторе :!: не в коем случае не делать созвучным с названием на сервере, например пусть будет ac2

sudo nano /opt/firebird/aliases.conf

активируем скопированный файл

sudo /opt/firebird/bin/nbackup -F ac2 -U SYSDBA -P masterke

создаем на обоих компьютерах пользователя ACREPLIC

vosstanavlivaem_polzovatelja

удаленная репликация

на обоих филиалах создаем папки

/opt/ac/replic/in
/opt/ac/replic/out

в новом филиале подключаемся к БД

устанавливаем 

после этого по расписанию запускаем acreplic с ключами

acreplic -out

выгружает все данные в папку out которые надо скопировать в другой\другие филиалы в папку in

acreplic -in

загружает данные из папки in в БД

acreplic -re

пробует повторную загрузку данных если первый заход был не удачным

все это можно делать разными способами почта\флешка и т.д. у нас был проверен и работает следующий скрипт

#!/bin/bash
#server to mount
sshserver=l@r.homeip.net
# where files to send
outpath=/opt/ac/replic/out/
# where we send file
remoteoutpath=/home/lenin/in/
# where we put files
inpath=/opt/ac/replic/in/
# where from we get file
remoteinpath=/home/lenin/f3/
# where we have backup
backuppath=/opt/ac/replic/backup/
# dir to mount remote
remotepath=/opt/ac/replic/remote/
# flag to say "we are copy"
fn=lockf3
# flag to read "we are not ready"
fns=lockf3s


# install fs
# sudo apt-get install sshfs

# check fuse for all time it will be
# sudo nano /etc/modules
# and add fuse
# for 1 time run
# modprobe fuse

# try to mount remote dir
# sshfs user1@remote_server:/tmp /opt/ac/replic/remote
# if all good unmount dir by
# fusermount -u /opt/ac/replic/remote
#sshfs attid@192.168.100.215:/tmp /opt/ac/replic/remote

# todo not run if filecount = 0

echo `date`
#запоминаем время чтоб выполнялось не дольше 5 минут
tm1=`date +%s`

if [ -f "$remotepath/flag" ]
then
  echo "Flag found. try to copy out"

  sshfs $sshserver:$remoteoutpath $remotepath -o nonempty
  # в случае если конект повиснет выходим
  tm2=`date +%s`
  let "tm3 = tm2-tm1"
  if (($tm3>300)); then
    #60*5=300
    echo exit
    exit;
  fi

  if [ ! -f "$remotepath/flag" ]
  then
    echo "out connected"
    /opt/ac/acreplic -out
    bzip2 $outpath*.rep
    while [ -f "$remotepath$fns" ]
    do
      sleep 3
    done

    touch $remotepath$fn
    cp $outpath*.bz2 $backuppath
    mv $outpath*.bz2 $remotepath
    rm $remotepath$fn
    fusermount -u $remotepath
  fi

fi

fusermount -u $remotepath
if [ -f "$remotepath/flag" ]
then
  echo "Flag found. try to copy in"

  sshfs $sshserver:$remoteinpath $remotepath -o nonempty
  # в случае если конект повиснет выходим
  tm2=`date +%s`
  let "tm3 = tm2-tm1"
  if (($tm3>300)); then
    #60*5=300
    echo exit
    exit;
  fi

  if [ ! -f "$remotepath/flag" ]
  then
    echo "in connected"
    while [ -f "$remotepath$fns" ]
    do
      sleep 3
    done

    touch $remotepath$fn
    mv $remotepath*.bz2 $inpath
    rm $remotepath$fn

    fusermount -u $remotepath
#    bzip2 -d $inpath*.bz2
    for bz2files in `ls $inpath*.bz2`
    do
      bzip2 -d $bz2files
    done
    /opt/ac/acreplic -in -v
    /opt/ac/acreplic -re -v
    # resend files
    for rf in `cat $inpath/resand| grep "#" -v`;
    do
      cp -f $backuppath$rf $outpath
    done;
    rm $inpath/resand
  fi

fi

fusermount -u $remotepath

локальная репликация

по расписанию запускаем acreplic с ключом

acreplic -local

выгружает все данные во вторую БД и там же их загружает

acreplic -re -l 

пробует повторную загрузку данных если первый заход был не удачным

совмещенная репликация

сначало надо запустить удаленную репликацию, потом заменить ключи запуска на

acreplic -out -l

выгружает все данные в папку out которые надо скопировать в другой\другие филиалы в папку in и одновременно копирует в локальную БД

acreplic -in -l 

загружает данные из папки in в БД и одновремено в локальную БД

acreplic -re -l

пробует повторную загрузку данных если первый заход был не удачным в обоих БД

восстановление при сбое

т.е. предполагаем что сервер умер и его больше нет. отключаем его от сети. переделываем альяс на резервном на правильный (ac) подключаемся к БД и востанавливаем значения генераторов меняем ИП на резерве на ИП бывшего сервера. все должно продолжить работать как будто ничего не произошло. единственно что могут потерятся данные за период репликации, который рекомендуется делать раз в 5 минут

ac/replic.txt · Последнее изменение: attid

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki