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
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
komutları ile gerekli SSH dizin yapısı oluşturulur. Daha sonra ilk sunucuda,
nano .ssh/config
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
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
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]-----+
Her iki sunucuda da anahtar ikilisi oluşturulduktan sonra birinci sunucuda,
ssh-copy-id server02
ve ikinci sunucuda,
ssh-copy-id server01
komutları çalıştırılarak anahtarlar birbirlerine kopyalanır. Kopyalama işleminden sonra birinci sunucuda,
ssh server02
exit
ve ikinci sunucuda,
ssh server01
exit
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
ile gerekli paketler kurulur.
4.2. - Dosya Senkronizasyonu Betiğinin Sisteme Yerleştirilmesi
Gerekli dizini oluşturmak için,
mkdir /usr/share/rsync
komutu kullanıldıktan sonra,
nano /usr/share/rsync/file-sync.sh
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
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
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
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
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.
NOT : Senkronizasyonda yaşanan gecikmeler veri kaybına sebep olabilir !