Rsync ile CentOS8 Üzerinde Dizin Senkronizasyonu

Zeki Ahmet Bayar - Sep 30 '21 - - Dev Community

Rsync ile dizin senkronizasyonu yapmak için öncelikle sunucular arasında parolasız erişimi sağlamak gerekmektedir.

1- SSH Paketinin Kurulması

Senkronizasyon yapılacak sunucuların her ikisine gidilerek,

yum install ssh
Enter fullscreen mode Exit fullscreen mode

komutu ile SSH paketi kurulur.

2- SSH Konfigürasyon Ayarlarının Yapılması

Her ikisi sunucuda da,

cd ~
mkdir .ssh
touch .ssh/config .ssh/known_hosts .ssh/authorized_keys
Enter fullscreen mode Exit fullscreen mode

komutları ile gerekli SSH dizin yapısı oluşturulur. Daha sonra ilk sunucuda,

nano .ssh/config
Enter fullscreen mode Exit fullscreen mode

ile konfigürasyon dosyası açıldıktan sonra,

Host server02 # İkinci sunucu kısa adı
    HostName 10.0.0.2 # İkinci sunucu ip adresi
    User root # Rsync için kullanılacak user
    Port 22
Enter fullscreen mode Exit fullscreen mode

ikinci sunucunun bilgileri girilir. Aynı işlem ikinci sunucuda da, birinci sunucunun bilgileri girilerek uygulanır.

3- SSH Anahtarının Oluşturulması

SSH anahtarı oluşturmak için her iki sunucuda da,

ssh-keygen
Enter fullscreen mode Exit fullscreen mode

komutu çalıştırılır. Gelen sorular boş geçilerek anahtar ikilisi oluşturulur.

ssh-keygen
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter same passphrase again:
Your public key has been saved in /root/.ssh/id_rsa.pub.
SHA256:*************************** username@pc
+---[RSA 3072]----+
|..B+             |
|                 |
|o.o..            |
|+* ..         o  |
|+.o.    S.   . + |
|.  ... oo o . E o|
|..         . . + |
|+o +sssss     o  |
|+o*o.  *+o       |
+----[SHA256]-----+
Enter fullscreen mode Exit fullscreen mode

Her iki sunucuda da anahtar ikilisi oluşturulduktan sonra birinci sunucuda,

ssh-copy-id server02
Enter fullscreen mode Exit fullscreen mode

ve ikinci sunucuda,

ssh-copy-id server01
Enter fullscreen mode Exit fullscreen mode

komutları çalıştırılarak anahtarlar birbirlerine kopyalanır. Kopyalama işleminden sonra birinci sunucuda,

ssh server02
exit
Enter fullscreen mode Exit fullscreen mode

ve ikinci sunucuda,

ssh server01
exit
Enter fullscreen mode Exit fullscreen mode

komutları çalıştırıldığında parolasız erişimin sağlandığı görülmelidir. SSH bağlantılarının sonlandırılması için her bağlantı sonrasında exit komutu çalıştırılmalıdır.

4- Betiğin Sisteme Eklenmesi

4.1. - Gerekli Paketlerin Kurulması

yum install inotify-tools
Enter fullscreen mode Exit fullscreen mode

ile gerekli paketler kurulur.

4.2. - Dosya Senkronizasyonu Betiğinin Sisteme Yerleştirilmesi

Gerekli dizini oluşturmak için,

mkdir /usr/share/rsync
Enter fullscreen mode Exit fullscreen mode

komutu kullanıldıktan sonra,

nano /usr/share/rsync/file-sync.sh
Enter fullscreen mode Exit fullscreen mode

komutu ile ilgili dosya açılır ve içerisine,

while inotifywait -r -e modify,attrib,close_write,move,create,delete /bu/sunucuda/esitlenecek/dizin/; do
    rsync -aAXru --progress --delete /bu/sunucuda/esitlenecek/dizin/ server02:/karsi/sunucuda/esitlenecek/dizin/
done
Enter fullscreen mode Exit fullscreen mode

betiği yerleştirilir.

Bu betikte, /bu/sunucuda/esitlenecek/dizin/ yerine betiğin yerleştirileceği sunucuda eşitlenmesi istenen dizinin yolu verilmelidir.

/karsi/sunucuda/esitlenecek/dizin/ yerine ise, karşı sunucuda eşitlenmesi istenen dizinin yolu verilmelidir.

Bu uygulama her iki sunucuya da çapraz olarak yapılmalıdır.

5- Servis Dosyalarının Oluşturulması

Yukarıda hazırlanan betiklerin servis haline getirilip sürekli olarak senkronizasyonun sağlanması gerekmektedir. Bunun için,

nano /etc/systemd/system/rsync-client.service
Enter fullscreen mode Exit fullscreen mode

komutu ile servis dosyası açılır ve içerisine,

[Unit]
Description = SyncService
After = network.target
[Service]
PIDFile = /run/syncservice/syncservice.pid
User = root
Group = root
ExecStartPre = /bin/mkdir /run/syncservice
ExecStart = /bin/bash /usr/share/rsync/file-sync.sh
ExecReload = /bin/kill -s HUP $MAINPID
ExecStop = /bin/kill -s TERM $MAINPID
ExecStopPost = /bin/rm -rf /run/syncservice
PrivateTmp = true
[Install]
WantedBy = multi-user.target
Enter fullscreen mode Exit fullscreen mode

dosyası eklenir.

Bu dosyanın değiştirilmesine gerek yoktur. Her iki sunucuya da aynı şekilde eklenmelidir.

6- Servislerin Başlatılması

Servisler hazırlandıktan sonra,

systemctl daemon-reload
systemctl start rsync-client.service
systemctl enable rsync-client.service
Enter fullscreen mode Exit fullscreen mode

işlemleri her iki sunucuda da yapılmalıdır.

Servisin doğru çalıştığı, çıktının aşağıda yer alan çıktıya benzerliği ile kontrol edilebilir.

[root@localhost ~]# systemctl status rsync-client.service
● rsync-client.service - SyncService
   Loaded: loaded (/etc/systemd/system/rsync-client.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2021-09-28 06:10:30 EDT; 13s ago
  Process: 8286 ExecStopPost=/bin/rm -rf /run/syncservice (code=exited, status=0/SUCCESS)
  Process: 8284 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 8289 ExecStartPre=/bin/mkdir /run/syncservice (code=exited, status=0/SUCCESS)
 Main PID: 8291 (bash)
    Tasks: 2 (limit: 4755)
   Memory: 592.0K
   CGroup: /system.slice/rsync-client.service
           ├─8291 /bin/bash /usr/share/rsync/file-sync.sh
           └─8294 inotifywait -r -e modify,attrib,close_write,move,create,delete /root/yedek/

Sep 28 06:10:30 localhost.localdomain systemd[1]: rsync-client.service: Succeeded.
Sep 28 06:10:30 localhost.localdomain systemd[1]: Stopped SyncService.
Sep 28 06:10:30 localhost.localdomain systemd[1]: Starting SyncService...
Sep 28 06:10:30 localhost.localdomain systemd[1]: Started SyncService.
Sep 28 06:10:30 localhost.localdomain bash[8291]: Setting up watches.  Beware: since -r was given, th>
Sep 28 06:10:30 localhost.localdomain bash[8291]: Watches established.

Enter fullscreen mode Exit fullscreen mode

NOT : Senkronizasyonda yaşanan gecikmeler veri kaybına sebep olabilir !

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .