- 基本情報
- テストデータ作成
- rsyncの設定&テスト
- Lsyncdのインストール
- Lsyncd.confの設定
- Lsyncdの監視ファイルの上限設定
- Lsyncdのログをsyslogに出力させない
- 動作確認
- 懸念
基本情報
MASとSUBというサーバを用意し、sambaファイルサーバデータをリアルタイム同期させたい。
まずはテストから。
テストデータ作成
MAS-SUBで
mkdir /data/Share/rsynctest
MASでテストファイルを作成
# dd if=/dev/zero of=test.file bs=1M count=1;for i in {1..10};do cp test.file test_${i}.file;done # ll /data/Share/rsynctest/ 合計 11264
- rw-r--r-- 1 root root 1048576 5月 26 16:55 test.file
- rw-r--r-- 1 root root 1048576 5月 26 16:55 test_1.file
- rw-r--r-- 1 root root 1048576 5月 26 16:55 test_10.file
rsyncの設定&テスト
rsyncは元々インストールされていた
ファイルのコピーはできるがパスワード入力4回求められる
# rsync -av /data/Share/rsynctest root@11.22.33.112:/data/Share Enter passphrase for key '/root/.ssh/id_rsa': Enter passphrase for key '/root/.ssh/id_rsa': Enter passphrase for key '/root/.ssh/id_rsa': root@11.22.33.111's password: sending incremental file list rsynctest/ rsynctest/test.file rsynctest/test_1.file 略 rsynctest/test_10.file sent 11,537,890 bytes received 229 bytes 378,298.98 bytes/sec total size is 11,534,336 speedup is 1.00
これを回避するためMASで公開鍵を作成し、公開鍵をSUBに登録する
※双方向同期を行うためにはお互いの公開鍵鍵を持つ必要があるので
SUBの公開鍵を作成し、公開鍵をMASに登録する作業もおこなう。
MASにて
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa.rsync_MAS ★id_rsaではなく専用の証明書を作ることにした。意味があるのかよくわからない ll /root/.ssh/ scp /root/.ssh/id_rsa.rsync_MAS.pub root@11.22.33.112:/root/.ssh
SUBにて公開鍵を登録
cd /root/.ssh/ ll cp authorized_keys authorized_keys.bak ★一応・・ cat id_rsa.rsync_MAS.pub cat authorized_keys cat id_rsa.rsync_MAS.pub >> authorized_keys ★authorized_keysにMASの公開鍵を追記 cat authorized_keys
MASにて動作確認
ssh -i ~/.ssh/id_rsa.rsync_MAS root@11.22.33.112 ★パスワードなしでSSH接続できることを確認してみた exitで抜ける rsync -av -e "ssh -i /root/.ssh/id_rsa.rsync_MAS" /data/Share/rsynctest root@11.22.33.112:/data/Share/ ★パスワード入力無しでファイルコピー成功
結果、MASの「.ssh」配下がどうなっているかというと
# ll /root/.ssh/ 合計 24
- rw------- 1 root root 2610 5月 31 11:17 id_rsa.rsync_MAS
- rw-r--r-- 1 root root 576 5月 31 11:25 id_rsa.rsync_MAS.pub
- rw-r--r-- 1 root root 576 5月 31 11:26 id_rsa.rsync_SUB.pub ★対向サーバの公開鍵
SUBの「.ssh」配下
# ll /root/.ssh/ 合計 28
Lsyncdのインストール
参考サイト:CentOS 8 では epel-release パッケージをインストールしても lsyncd パッケージが出てこない。
https://mattintosh.hatenablog.com/entry/20200408/1586272117
MAS-SUBで
1001 dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm 1002 yum --enablerepo=epel install lsyncd 1005 df -h 1006 less /etc/lsyncd.conf systemctl enable lsyncd.service ★Lsyncd自動起動設定もおこなう
Lsyncd.confの設定
参考サイト
「lsyncd環境設定」:https://www.wetch.co.jp/centos%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8C%E6%9C%9F%EF%BC%88lsyncdrsync%EF%BC%89/
設定の解説:https://ikm.hatenablog.jp/entry/2013/05/27/140336
initの設定:https://web.chaperone.jp/w/index.php?lsyncd
deleteの設定:https://iga-ninja.hatenablog.com/entry/2015/02/28/230014
lsync双方向同期で起こる悲劇:https://cloudpack.media/11060
おすすめの設定
lsyncdで双方向同期するなら delete= running
初回起動時に同期させない init = false
MAS設定ファイル抜粋
sync{ default.rsync, source = "/data/Share/rsynctest", target = "root@11.22.33.112:/data/Share/rsynctest", delete = running, init = false, delay = 1, rsync = { archive = true, compress = true, rsh = "/usr/bin/ssh -i /root/.ssh/id_rsa.rsync_MAS -o UserKnownHostsFile=/root/.ssh/known_hosts" ★ } }
Lsyncdの監視ファイルの上限設定
Lsyncdが利用している inotifyが監視できるファイル数には上限があります。
https://gist.github.com/mly520/6928552lsyncdを使用している場合に、監視間隔の間に大量のファイルが変更された場合、以下のようなメッセージを出力してlsyncdが停止する場合がある
https://serv-ops.com/knowledge/open.knowledge/view/15?offset=0
つまり、lsyncdはinotify(max_user_watchesの数)以上のファイル数を扱わないので
圧縮ファイルの解凍等で大量に更新があると、運が悪ければlsyncdでのミラーリングが止まる。
今の上限を確認すると
# cat /proc/sys/fs/inotify/max_user_watches 241196
現環境について調査して、増やす必要があると感じたので増やす。「1048576」という数字は調査中に得た数字。
MASSUBにて
「fs.inotify.max_user_watches = 1048576」をsysctl.confに追記
# cp /etc/sysctl.conf /etc/sysctl.conf20220531 # vim /etc/sysctl.conf # /sbin/sysctl -p net.ipv4.ip_nonlocal_bind = 1 fs.inotify.max_user_watches = 1048576 # cat /proc/sys/fs/inotify/max_user_watches 1048576
Lsyncdのログをsyslogに出力させない
MAS-SUBにて
724 vim /usr/lib/systemd/system/lsyncd.service ★"StandardOutput=null"を追記 lsyncdのログをsystemdへ出力しない 727 systemctl daemon-reload 728 systemctl restart lsyncd.service 729 systemctl status lsyncd.service 730 cat /var/log/lsyncd/lsyncd.log ★ファイルを操作してみてログが出力されていることを確認 1020 cat /var/log/messages | grep syncd ★シスログに設定して以降ログが出力されないことを確認
※rsyncのログも抑止できるらしいがデーモンではないからか /var/logにもmessageにも出てこない。
/etc/rsyncd.confに”transfer logging = no”を加筆する事でログ出力を抑制する事ができる。
https://www.program-laboratory.com/program/technic/linux_1.html
動作確認
①正常系
sambaサーバをブラウザで開いて操作
\\11.22.33.111\Share\rsynctest
\\11.22.33.112\Share\rsynctest
MASでファイルを作成したら、SUBでその内容がF5で反映されることを確認
MASでファイルを削除したら、SUBでその内容がF5で反映されることを確認
SUBでファイルを作成したら、MASでその内容がF5で反映されることを確認
SUBでファイルを削除したら、MASでその内容がF5で反映されることを確認
②異常系 MAS再起動
MASでファイルを作成したら、SUBでその内容がF5で反映されることを確認
MAS再起動する間に、SUBでそのファイルを書き換えor削除
MAS再起動後、どうなるか????
③異常系 SUB再起動
SUB再起動する間に、MASでファイルを書き換えor削除
SUB再起動後、どうなるか????
④異常系 MASが何日も動かない
MASが止まっている間に、SUBでそのファイルを書き換えor削除を大量に
MAS起動後、どうなるか????
懸念
・lsyncとrcyncはyumupdateから外したほうが安全なのかな?