のんちゃんの記憶喪失メモ

覚える気がない。

rsyncとlsyncdでサーバ2台をリアルタイム同期をしたい

基本情報

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は元々インストールされていた

参考サイト: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/

ファイルのコピーはできるがパスワード入力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
  • rw-r--r-- 1 root root 576 5月 31 11:24 id_rsa.rsync_MAS.pub ★対向サーバの公開鍵
  • rw------- 1 root root 2610 5月 31 11:17 id_rsa.rsync_SUB
  • rw-r--r-- 1 root root 576 5月 31 11:17 id_rsa.rsync_SUB.pub

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/6928552

lsyncdを使用している場合に、監視間隔の間に大量のファイルが変更された場合、以下のようなメッセージを出力して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に出力させない

参考サイト:https://blog.denet.co.jp/lsyncdsystemd/

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から外したほうが安全なのかな?