User Tools

Site Tools


interessen:computer:fileserver

This is an old revision of the document!


Fileserver

Als Fileserver nutze ich hier meinen Hauptserver mit folgenden Services

  • Glusterfs
  • NFS
  • rsync

GlusterFS

Den Glusterfs-Service habe ich gmäss Anleitung(en) aufgesetzt. Der Server geht unter Ubuntu (server) auch ganz leicht, aber ich habe trotzdem eine Weile gebraucht, um den Client richtig zu konfigurieren. Bei allen Anleitungen soll man sich nach der Installation des Server einfach per

<client>:/# mount -t glusterfs <server>:<share> /<zielordner> 

mit der Freigabe verbinden. Der Befehl wurde auch ohne Fehler ausgeführt - der Ordner war aber immer leer und auch neue Dateien tauchten nicht im Server auf. Nach einer Weile der Recherche im Netz hab ich dann was anderes probiert. Erst hab ich einen Ordner angelegt

<client>:/# mkdir /etc/glusterfs

danach in diesen Ordner die Volumedefinitionen aus dem Server aus

<server>:/# /etc/glusterd/vols/<volume>/<volume>-fuse.vol

in den Ordner

<client>:/# /etc/glusterfs/

auf dem Client kopiert. Danach war es relativ simpel in die Datei

<client>:/# /etc/fstab

die Zeile

/etc/glusterfs/<volume>-fuse.vol /<zielordner> glusterfs defaults,_netdev 0 0

einzufügen. Nach einem

<client>:/# mount -all

waren dann die Dateien zu sehen und auch veränderbar. Endlich funktionierte es! :-D

NFS

NFS ist einfach via Anleitung aufgesetzt worden. Dazu gibt es die diversen Anleitungen im Internet, so dass ich hier nicht näher darauf eingehe.

rsync

RSYNC hat bei mir die Aufgabe meinen Firmenlaptop zu sichern. Dazu habe ich auf diesem ein Script zu laufen, das in regelmässigen Abständen nachsieht, ob der Backup-Server bzw. dessen Freigabe erreichbar ist und wenn das bestätigt ist werden vorher festgelegte Ordner synchronisiert.

ServerKonfiguration

Nach der Installation von rsync ist unter Ubuntu erstmal nur der Clientdienst aktiv. Den Serverdienst muss man erst einrichten und dann als Service definieren. Zu erst wird die Datei

/etc/rsyncd.conf

mit folgendem Inhalt angelegt

<server>:/etc# cat rsyncd.conf 
use chroot = true
strict modes = false
hosts allow = <network/mask>
uid = <user>
gid = users
max connections = 5
syslog facility = local5
pid file = /var/run/rsyncd.pid

[<Share1>]
comment = backup folder on <server>
path = /data1/Arbeit/
read only = no
list = yes
auth users = <user at source>
secrets file = /etc/rsyncd.secrets

[<Share2>]
comment = Documents folder on <server>
path = /data1/Dateiablage/
read only = no
list = yes
auth users = <user at share>
secrets file = /etc/rsyncd.secrets

In der Datei

/etc/rsyncd.secrets

stehen nur die User mit den dazugehörigen Passwörtern drinn. Ich wollte die nicht so unbedingt einfach in die Konfig hämmern. Mann sollte ja wenigstens den Anschein von Sicherheit wahren. :-D

Danach hab ich noch mit

apt-get install xinetd

den xinetd Startservice installiert. In dem dazugehörigen Ordner unter

/etc/xinetd.d

muss dann noch eine Datei rsync angelegt werden. Die sieht bei mir so aus

<server>:/etc# cat xinetd.d/rsync 
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#	allows crc checksumming etc.
service rsync
{
	disable	= no
	flags		= IPv6
	socket_type     = stream
	wait            = no
	user            = root
	server          = /usr/bin/rsync
	server_args     = --daemon
	log_on_failure  += USERID
}

Nach einem

<server>:/# service xinetd restart

ist der rsync-Service dann erreichbar.

Clientkonfiguration

Auf dem Client hab ich ein Backup-Script laufen in dem ich einer seits den/ die Server angeben kann auf die ich sichern will und anderer seits die Verzeichnisse angebe die ich sichern will. Das Script wird dann über einen CRON-Job in regelmässigen Abständen aufgerufen.

<servername>:/$ cat /opt/backup/backup.sh 
#!/bin/bash
## insert all directories to sync/ backup ##
directories=( <directory1> <directory2>)
workdir=<workdir> 

## define target

user=<transferuser>
server=(<targetserver1> <targetserver2>)
# view /etc/rsyncd.conf at targetserver
targetshare=<share at target>

## generate log-file-names
tstemp=`date +%Y%m%d%H`
tstemp_old=`date +%Y%m%d -d yesterday`
logfile=$workdir/$tstemp.backup.log
logcheckfile=$workdir/$tstemp.backup.check.log
# backup log
logtimefile=$workdir/backup.time.log
logtimefiletemp=$logtimefile.temp

## clean old log from messages and let all informations since the last running backup in file
clean_log()
{
  i=1
  while ((i <= 100))
    do
       if (tail -$i $logtimefile|grep done)
         then
          tail -$i $logtimefile > $logtimefiletemp
          cat $logtimefiletemp > $logtimefile
          rm $logtimefiletemp 
    break
      fi
      i=$(( $i + 1 ))
    done
  return 0
}

## generate display message for graphical desktops and write backup log
errormsg()
{
  errorcount=0
  ## if differrents between rsync run and rsync check exists, error message will generate
  for i in `cat $logcheckfile | grep '<f'|cut -d\/ -f2-`
    do
     if (cat $logfile | grep $i)
      then 
        ((errorcount++))
      fi
    done
  if (($errorcount > 0))
    then
      ## enable only if script run at system with graphical desktop ##
      #notify-send -u critical -t 3000 -i /opt/backup/pictures/error.jpg "Backup to $target failure!!"
      message='Backup error! Server :'
    else
      ## enable only if script run at system with graphical desktop ##
      #notify-send -u normal -t 3000 -i /opt/backup/pictures/symbol_check.png "Backup to $target done!"
      rm $logcheckfile
      rm $logfile
      message='Backup done with server: '
      if (ls $workdir| grep $tstemp_old)
        then
          for i in `ls $workdir| grep $tstemp_old` 
            do
              rm $i
           done
      fi
   fi
  message=`date`" : "$message$target
  echo $message >> $logtimefile
  return 0
}

## use for rsyncd at target server(s) ##
# check if job running from other schedule
if(! ps -ef | grep rsync | grep $workdir ) 
  then
    for target in "${server[@]}"
     do
       # check if host available
       if( ping -c 1  $target > /dev/null ) 
         then
           date >> $logfile
           date >> $logcheckfile
           for dir in "${directories[@]}"
             do
               echo $dir >> $logfile
               ## synchronize the directory
               rsync -vah --partial $workdir/$dir $user@$target::$targetshare/ --password-file=/etc/rsync.pass >> $logfile
               echo $dir >> $logcheckfile
               ## check if directories synchron (it's a dry run with renerate a check file)
               rsync -vahn --partial $workdir/$dir $user@$target::$targetshare/ --password-file=/etc/rsync.pass >> $logcheckfile
             done
           date >> $logfile
           clean_log
           errormsg
           ## transfer the backup-log
           rsync -vzh --partial $logtimefile $user@$target::$targetshare/ --password-file=/etc/rsync.pass
         else
           message=`date`" : Synchronisation host not reachable! hostname: "$target
           echo $message >> $logtimefile
         fi
      done
  fi
 exit

sfjspdfjsdkal

interessen/computer/fileserver.1393324369.txt.gz · Last modified: 2014/02/25 11:32 by tomtom