片方向同期( lsyncd と rsync )
Contents
概要
AWSのスポットインスタンスで開発環境として一時的に使用したコンテンツを、他社VPSにコンテンツを片方向同期したいと思い、備忘録ガテラ調べた内容を記録します。
今回の要件を図で表すと以下の通りとなります。
同期先
rsyncインストール
ネットワークを通じて他のコンピュータと通信をおこない、ファイルやディレクトリの転送をおこなうため、 rsync
がインストールされていることを確認します。
※標準でインストールされているはず。
[同期先 ~]# rpm -q rsync
rsync-3.1.3-12.el8.x86_64
rsyncユーザ追加および公開鍵認証設定
同期"元"からパスワードなしで同期"先"にログインし、ファイルまたはディレクトリの同期をおこないため、専用ユーザを作成します。
[同期先 ~]# useradd rsync
[同期先 ~]# mkdir /home/rsync/.ssh
[同期先 ~]# ssh-keygen -t rsa -m PEM -f /home/rsync/.ssh/id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/rsync/.ssh/id_rsa.
Your public key has been saved in /home/rsync/.ssh/id_rsa.pub.
The key fingerprint is:
・
・[中略]
・
[同期先 ~]# chown -R rsync. /home/rsync/.ssh
[同期先 ~]# chmod 700 /home/rsync/.ssh
[同期先 ~]# mv /home/rsync/.ssh/id_rsa.pub /home/rsync/.ssh/authorized_keys
[同期先 ~]# chmod 600 /home/rsync/.ssh/authorized_keys
[同期先 ~]# cat /home/rsync/.ssh/id_rsa
⇒後ほど使用するのでテキストエディタ等にメモしておきます。
sudoers設定
上記で作成した専用ユーザから管理者アカウントでないと権限上問題が発生する場合があるので専用ユーザに対して、管理者へ昇格できるように設定します。
[同期先 ~]# vim /etc/sudoers.d/rsync
Defaults:rsync !requiretty
rsync ALL= NOPASSWD:/usr/bin/rsync
※ requiretty が有効になっている場合、ttyにログインしているセッションからのみ sudo 可能であるので、 cron や cgi-bin などのユーザを介して実行できないようにするものであるから、 rsync ユーザは、 requiretty を無効化する。
https://linuxjm.osdn.jp/html/sudo/man5/sudoers.5.html
同期元
秘密鍵設置
先ほど、同期"先"サーバで作成した専用ユーザの秘密鍵情報を、設定します。
[同期元 ~]# vim /root/rsync_id_rsa
⇒先ほどテキストエディタ等にメモした内容をコピー・アンド・ペーストします。
[同期元 ~]# chmod 600 /root/rsync_id_rsa
lsyncdのインストール
特定ディレクトリを監視し、ファイルやディレクトリの変更・削除・更新等のイベントを検知できるようにするため、 lsyncd
のインストールをおこないます。
[同期元 ~]# amazon-linux-extras install epel
[同期元 ~]# yum install lsyncd --enablerepo=epel
・
・[中略]
・
Installed:
lsyncd.x86_64 0:2.2.2-1.el7
Complete!
同期設定編集
source
に同期させたいディレクトリ(同期"元")を指定し、 target
には、同期"先"で、今回の場合、バックアップさせたいディレクトリを指定します。
※targetの ***.***.***.***
には同期"先"のIPアドレスを指定します。
[同期元 ~]# cp -p /etc/lsyncd.conf /etc/lsyncd.conf.org
[同期元 ~]# cp -p /etc/lsyncd.conf /etc/lsyncd.conf_$(date +"%Y%m%d")
[同期元 ~]# echo -n > /etc/lsyncd.conf
[同期元 ~]# vim /etc/lsyncd.conf
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd-status.log",
statusInterval = 20
}
sync {
default.rsync,
delay = 0,
source="/home/dev_user/script",
target="rsync@***.***.***.***:/root/contents_backup/",
rsync = {
archive = true,
rsync_path = "sudo /usr/bin/rsync",
rsh = "ssh -p {sshポート番号} -i /root/rsync_id_rsa -o StrictHostKeyChecking=no"
}
}
lsyncdサービス開始
以下のようにサービスを開始すると同期"元"の /var/log/lsyncd/lsyncd.log
、 /var/log/lsyncd/lsyncd-status.log
にログがでますので、期待した通りの動作がおこなえているか確認をおこなうようにしてください。
[同期元 ~]# systemctl --now enable lsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/lsyncd.service to /usr/lib/systemd/system/lsyncd.service.
[同期元 ~]# systemctl status lsyncd.service
● lsyncd.service - Live Syncing (Mirror) Daemon
Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2022-05-22 04:13:55 JST; 1s ago
Main PID: 5593 (lsyncd)
Tasks: 3
Memory: 5.6M
CGroup: /system.slice/lsyncd.service
tq5593 /usr/bin/lsyncd -nodaemon /etc/lsyncd.conf
tq5594 /usr/bin/rsync --delete --ignore-errors -gsolptD --rsh=ssh -p {sshポート番号} -i /root/rsync_id_rsa -o StrictHostKeyChecking=no --rsync-path=sudo...
mq5595 ssh -p {sshポート番号} -i /root/rsync_id_rsa -o StrictHostKeyChecking=no -l rsync ***.***.***.*** sudo /usr/bin/rsync --server -slogDtpre.iLsfxC
May 22 04:13:55 *** systemd[1]: Started Live Syncing (Mirror) Daemon.
まとめ
片方向同期に挑戦してみました。
スポットインスタンスは、すぐに消えてしまう可能性があるので、コンテンツをバックアップ等ができれば安心ですよね。
ディスカッション
コメント一覧
まだ、コメントがありません