●概要
lsyncdを使用してマシン間でリアルタイムにディレクトリのミラーリングを行うことができます。lsyncdはLinuxカーネルのinotify機能を利用して、ファイルの更新時にミラー先のrsyncサーバへrsyncを実行することにより、リアルタイムにディレクトリのミラーリングを行うことができるようになります。
参考URL:lsyncd rsyndの設定方法
●rsyncサーバの設定(ミラー先)
ミラー先サーバにログインします。
役割:
除外ファイル・ディレクトリ(exclude)、含むファイル・ディレクトリ(include)の指定。ファイル・ディレクトリがコピーされようとするたびに記述されている順にチェックされる。該当したらすぐに適応され,コピーされない/される。
書式:
除外ファイル・ディレクトリ(exclude)、含むファイル・ディレクトリ(include)の指定。ファイル・ディレクトリがコピーされようとするたびに記述されている順にチェックされる。該当したらすぐに適応され、コピーされない/される。
●rsyncサーバ起動(ミラー先)
Fedora 21の場合
CentOS Stream 8、Rocky Linuxの場合
●lsyncdインストール(ミラー元):src版
●lsyncd設定(ミラー元):src版
デフォルトでは
lsyncd-2.1.4からlsyncdのオプションが大きく変わってしまっています。lsyncd.confを設定する場合は注意してください。
下記サイトが参考になります。
Lsyncd - Live Syncing (Mirror) Daemon
実際の設定例は以下のとおりです。
●lsyncd起動
起動用スクリプトを作成します。
しかし、いつの間にがOSを再起動してもlsyncdが自動起動しなくなってしまったことに気がつきました(2011年9月)。そこで起動順序を変更するため「# chkconfig: 345 56 50」の箇所を「# chkconfig: 345 99 50」に変更。
lsyncd起動スクリプトへ実行権限付加
# chmod +x /etc/rc.d/init.d/lsyncd
lsyncd起動
# /etc/rc.d/init.d/lsyncd start
lsyncd起動スクリプトをchkconfigへ登録
# chkconfig --add lsyncd
lsyncd自動起動設定
# chkconfig lsyncd on
●lsyncdインストール(ミラー元):RPM版
lsyncをRPMforgeからインストールします。
lsyncd-2.1.4からlsyncdのオプションが大きく変わってしまっています。lsyncd.confを設定する場合は注意してください。
下記サイトが参考になります。
Lsyncd - Live Syncing (Mirror) Daemon
●source path、target pathの記載方法による挙動の違い
source path、target pathの最後に「/」の記載有り無しでの挙動を確認してみました。デフォルトの設定は下記のとおりとします。
下記のように書き換えで、同期をさせた場合
また、このときはOpenSSHでの接続となりUIDで指定したユーザのパスワードを尋ねられるようになりました。「auth users」が設定されると、クライアントはモジュール接続時にユーザ名とパスワードの入力を要求される、そうです。
何故、OpenSSHで接続されるのかは不明(デフォルト?)。
OpenSSH接続での同期は問題ありませんが、同期のたびにパスフレーズを入力しなければならないのは非常に煩わしい作業です。これを解消するにはパスフレーズなしの鍵を作成する必要があります。
パスフレーズなしでログインする方法を参照して、ミラー先のホストでlsyncdを動作させるユーザのホームディレクトリに鍵を作成してください。作成した「authorized_keys」「id_dsa」「id_dsa.pub」をミラー元の同じユーザのホームディレクトリの.ssh/に保存してください。
また、sshd_configでパスフレーズなしを許可する必要があります。
●監視するファイル数制限を増やす
監視するディレクトリ内のファイルが増えると、同期できなくなりログにエラーが記録されるようになります。
●ログに出力されるエラー
lsyncdをスタートさせましたが以下のようなエラーが/var/log/lsyncdに記録されました。
エラーその1
下記の場合は、rsyncd.confのモジュールオプション「path」の設定で「=」が抜けていたのが原因です。
エラーその2
エラーその3
rsyncd.confで「auth users」を設定すると下記のようなエラーが出力されました。
エラーその4
このエラーはrsyncd.confに「auth users」を設定した時に発生します。
エラーその5
5分毎に下記のようなエラーが発生する。これは「xymon」を利用してポート監視を実行しているためです。
[Receiver=*.*.*]の「*.*.*」の数値はrsyncのバージョン番号。
エラーその6
エラーその7
●ディレクトリの除外方法
lsyncd.conf内に記載する、同期ファイル除外設定は正常に動作しないようです(2023.09.12現在)。したがって、ミラー側(rsyncd.conf)で除外設定しています。
以下の例では/var/www/html/が同期対象のディレクトリです。その配下にあるtest、test2ディレクトリを除外します。
? - スラッシュ(/) を除く任意の 1 文字にマッチ
* - スラッシュ(/) を除く任意の 0 文字以上にマッチ
** - スラッシュ(/) を含む任意の 0 文字以上にマッチ
lsyncd の exclude を外部ファイルで指定する場合には "excludeFrom=ファイル名" を使用して宣言する。
外部ファイルで指定する場合には + による include 設定は機能しない。'/' で終了している場合には除外ディレクトリと判定される。
(注意)除外するパターンマッチについて
exclude="log"
の除外指定を行なうと log(ファイル) , /log/ (ディレクトリ)が除外対象となる。
つまり、/abc/log/ はマッチするので除外対象となるが /login/は除外対象にはならない。
●OSアップデート時の注意事項
OSをアップデートするとrsyncd.confが差し替えられるので注意する必要があります。
差し替えられたファイルは/etc/rsyncd.conf.rpmsaveです。これをコピーしrsyncを再起動すれば対応完了です。
●yum updateを実施後、lsyncdが動作しなくなった
yum updateを実施したところlsyncdもアップデートされてしまい、そこから動作しなくなってしまいました。
「settings = {」と言う記載を「settings {」に変更し、lsyncdを再起動したら今度は違うエラーが記録されました。
●Error: Terminating since out of inotify watches.
/var/log/lsyncdに下記のようなログが記録される場合があります。
lsyncdを使用してマシン間でリアルタイムにディレクトリのミラーリングを行うことができます。lsyncdはLinuxカーネルのinotify機能を利用して、ファイルの更新時にミラー先のrsyncサーバへrsyncを実行することにより、リアルタイムにディレクトリのミラーリングを行うことができるようになります。
参考URL:lsyncd rsyndの設定方法
●rsyncサーバの設定(ミラー先)
ミラー先サーバにログインします。
ミラー先ディレクトリ作成。このディレクトリにファイルがミラーリングされます # mkdir /tmp/root ← ミラー先ディレクトリ所有者をnobodyに変更 # chown nobody:nobody /tmp/root rsyncサーバ設定ファイル作成 # vi /etc/rsyncd.conf # rsyncを動かすときのユーザ uid = root # syncを動かすときのグループ gid = root # chrootを行うかを指定 use chroot = no # 同時接続数 max connections = 4 # ログの保存先 pid file = /var/run/rsyncd.pid # 任意のモジュール名(ミラー元から接続時の名前) [backup] # ミラー先ディレクトリ path = /tmp/root # 接続許可ホスト(192.168.0.0/255.255.255.0でもよい) hosts allow = 192.168.0.0/24 # 転送ログの記録 transfer logging = yes # auth users = hoge # 更新許可。「no」でもOK read only = false [html] comment = Webサイト path = /var/www/html hosts allow = 192.168.0.0/24 # auth users = root read only = falesexclude、includeについて
役割:
除外ファイル・ディレクトリ(exclude)、含むファイル・ディレクトリ(include)の指定。ファイル・ディレクトリがコピーされようとするたびに記述されている順にチェックされる。該当したらすぐに適応され,コピーされない/される。
書式:
除外ファイル・ディレクトリ(exclude)、含むファイル・ディレクトリ(include)の指定。ファイル・ディレクトリがコピーされようとするたびに記述されている順にチェックされる。該当したらすぐに適応され、コピーされない/される。
- 正規表現っぽいのが使える
- 後方に/があればディレクトリ。なければファイル・ディレクトリが対象
- 例
- exclude=public:publicというファイル・ディレクトリが対象
- exclude=public/:pubicというファイルが対象
- 例
- 前方に/が書いてあれば,基底ディレクトリ(pathで指定されたディレクトリ)からの絶対パスになる(ファイルシステムの絶対パスではないところに注意)
- 例:path=/testとして
- exclude=public/:publicというディレクトリが対象(後方/がなければファイル)
- exclude=/public/:/test/publicというディレクトリが対象(後方/がなければファイル)
- 例:path=/testとして
●rsyncサーバ起動(ミラー先)
rsyncサーバー起動&自動起動設定 # chkconfig rsync on 自動起動の確認 # chkconfig --list rsync rsync onrsyncd.confを書き換えた場合は、下記のようにリロードします。
# service xinetd reload または # /usr/bin/rsync --daemon --config=/etc/rsyncd.conf
Fedora 21の場合
rsyncサーバー起動&自動起動設定 # systemctl enable rsyncd 自動起動の確認 # systemctl status rsyncd rsyncd.service - fast remote file copy program daemon Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled) Active: active (running) since 木 2015-04-09 09:18:51 JST; 3s ago Main PID: 18634 (rsync) CGroup: /system.slice/rsyncd.service └─18634 /usr/bin/rsync --daemon --no-detachrsyncd.confを書き換えた場合は、下記のようにリロードします。
# systemctl start rsyncd
CentOS Stream 8、Rocky Linuxの場合
# dnf -y install rsync rsync-daemon # systemctl enable --now rsyncd # firewall-cmd --add-service=rsyncd --permanent # firewall-cmd --reload
●lsyncdインストール(ミラー元):src版
# cd /usr/local/src lsyncdインストールに必要なパッケージをインストール # yum -y install libxml2-devel lsyncdダウンロード # wget http://lsyncd.googlecode.com/files/lsyncd-1.39.tar.gz ※最新版はダウンロードページで確認 lsyncd展開 # tar zxvf lsyncd-1.39.tar.gz lsyncd展開先ディレクトリへ移動 # cd lsyncd-1.39 lsyncdインストール # ./configure && make && make install lsyncd.conf.xmlを所定のディレクトリへコピー # cp lsyncd.conf.xml /etc/ lsyncd展開先ディレクトリを抜ける # cd .. lsyncd展開先ディレクトリを削除 # rm -rf lsyncd-1.39 ダウンロードしたファイルを削除 # rm -rf lsyncd-1.39.tar.gz lsyncdログローテーション設定ファイル作成 # vi /etc/logrotate.d/lsyncd /var/log/lsyncd { missingok notifempty sharedscripts postrotate /etc/rc.d/init.d/lsyncd restart 2>&1 > /dev/null || true endscript }
●lsyncd設定(ミラー元):src版
デフォルトでは
-lt%r --delete {--exclude-from [FILE]} [SOURCE] [DIRECTORY]というオプションでrsyncが呼び出されます(%rはlsyncd起動時にはr、それ以外はdになります)。ここで--deleteが指定されているので注意しましょう。lsyncd.conf.xmlファイルを作成して--conf オプションでそのファイルを指定すれば、rsyncの引数を変更できます。rsyncの--deleteオプションを外し、また-a オプション相当を指定するならば以下のような設定ファイルを作ればいいです。 ョン相当を指定するならば以下のような設定ファイルを作ればいいです。
lsyncd-2.1.4からlsyncdのオプションが大きく変わってしまっています。lsyncd.confを設定する場合は注意してください。
下記サイトが参考になります。
Lsyncd - Live Syncing (Mirror) Daemon
<lsyncd version="1"> <settings> <callopts> <option text="-%rlptgoD"/> <exclude-file/> <source/> <destination/> </callopts> </settings> </lsyncd>ただしソース側でchmodをしてもイベントを拾わないので、すぐにはrsyncが実行されず権限が同期先に反映されないことを理解しておく必要があります。lsyncdではディレクトリ単位でrsyncを実行するので、同じディレクトリでファイルの変更等がおきることで副次的にそのディレクトリの他のファイルの権限変更が同期されることになります(rsyncで-pオプションを指定している場合)。
実際の設定例は以下のとおりです。
lsyncd.conf.xml 編集 # vi /etc/lsyncd.conf.xml <settings> # 有効化 <pidfile filename="/var/run/lsyncd.pid"/> <callopts> # オプション変更 <option text="-lt%r"/> <option text="--delete"/> <exclude-file/> <file-filter/> <source/> <destination/> </callopts> </settings> <directory> # ミラー元ディレクトリ指定 <source path="/tmp/root/"/> # ミラー先IPアドレス::ミラー先ディレクトリ指定(上記の場合は相対パス) # rsyncd.confで「auth users」を指定するとエラーとなる # 下記参照 <target path="192.168.0.1::backup"/> <!-- or it can also be an absolute path for localhost <target path="/absolute/path/to/target"> --> </directory> <directory> <source path="/home/user/public_html/"/> # ミラー先IPアドレス::ミラー先ディレクトリ指定(上記の場合は相対パス) # rsyncd.confで「auth users」を指定するとエラーとなる # 下記参照 <target path="192.168.0.1::backup"/> <target path="192.168.0.1::/var/www/html"/> </directory> # lsyncdログローテーション設定ファイル作成 # vi /etc/logrotate.d/lsyncd /var/log/lsyncd { missingok notifempty sharedscripts postrotate /etc/rc.d/init.d/lsyncd restart 2>&1 > /dev/null || true endscript }
●lsyncd起動
起動用スクリプトを作成します。
# chkconfig lsyncd off # chkconfig lsyncd onを実施後、正常に自動起動するようになりました。
lsyncd起動スクリプト作成 # vi /etc/rc.d/init.d/lsyncd
#!/bin/bash
#
# lsyncd
#
# chkconfig: 345 56 50
# description: xinetd is a powerful replacement for inetd. \
# xinetd has access control mechanisms, extensive \
# logging capabilities, the ability to make services \
# available based on time, and can place \
# limits on the number of servers that can be started, \
# among other things.
#
# processname: /opt/lsyncd/binlsyncd
#Source function library
. /etc/rc.d/init.d/functions
PATH=$PATH:/sbin:/bin:/usr/bin:/usr/sbin:/opt/lsyncd/bin:/usr/local/bin
# Soruce networking configuration
[ -r /etc/sysconfig/lsync ] && . /etc/sysconfig/lsyncd
#option="$SHORT_LOG $IGNORE_START_ERRORS $DEBUG"
RETVAL=0
prog="lsyncd"
start(){
echo -n $"Starting $prog: "
#daemon $prog $option
daemon $prog
RETVAL=$?
echo
touch /var/lock/subsys/lsyncd
return $RETVAL
}
stop(){
echo -n $"Stopping $prog: "
killproc $prog
RETVAL=$?
echo
rm -f /var/lock/subsys/lsyncd
return $RETVAL
}
reload(){
echo -n $"Reloading configuration: "
killproc $prog -HUP
RETVAL=$?
echo
return $RETVAL
}
restart(){
stop
start
}
condrestart(){
[ -e /var/lock/subsys/lsyncd ] && restart
return 0
}
# See h
ow we were called. case "$
1" in start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart)
restart
;;
reload)
reload
;;
condrestart)
condrestart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
RETVAL=1
esac
exit $RETVA
作成したファイルに実行権を与え、起動スクリプトとして登録します。
#
# lsyncd
#
# chkconfig: 345 56 50
# description: xinetd is a powerful replacement for inetd. \
# xinetd has access control mechanisms, extensive \
# logging capabilities, the ability to make services \
# available based on time, and can place \
# limits on the number of servers that can be started, \
# among other things.
#
# processname: /opt/lsyncd/binlsyncd
#Source function library
. /etc/rc.d/init.d/functions
PATH=$PATH:/sbin:/bin:/usr/bin:/usr/sbin:/opt/lsyncd/bin:/usr/local/bin
# Soruce networking configuration
[ -r /etc/sysconfig/lsync ] && . /etc/sysconfig/lsyncd
#option="$SHORT_LOG $IGNORE_START_ERRORS $DEBUG"
RETVAL=0
prog="lsyncd"
start(){
echo -n $"Starting $prog: "
#daemon $prog $option
daemon $prog
RETVAL=$?
echo
touch /var/lock/subsys/lsyncd
return $RETVAL
}
stop(){
echo -n $"Stopping $prog: "
killproc $prog
RETVAL=$?
echo
rm -f /var/lock/subsys/lsyncd
return $RETVAL
}
reload(){
echo -n $"Reloading configuration: "
killproc $prog -HUP
RETVAL=$?
echo
return $RETVAL
}
restart(){
stop
start
}
condrestart(){
[ -e /var/lock/subsys/lsyncd ] && restart
return 0
}
# See h
ow we were called. case "$
1" in start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart)
restart
;;
reload)
reload
;;
condrestart)
condrestart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
RETVAL=1
esac
exit $RETVA
lsyncd起動スクリプトへ実行権限付加
# chmod +x /etc/rc.d/init.d/lsyncd
lsyncd起動
# /etc/rc.d/init.d/lsyncd start
lsyncd起動スクリプトをchkconfigへ登録
# chkconfig --add lsyncd
lsyncd自動起動設定
# chkconfig lsyncd on
●lsyncdインストール(ミラー元):RPM版
lsyncをRPMforgeからインストールします。
lsyncd-2.1.4からlsyncdのオプションが大きく変わってしまっています。lsyncd.confを設定する場合は注意してください。
下記サイトが参考になります。
Lsyncd - Live Syncing (Mirror) Daemon
# yum --enablerepo=rpmforge -y install lsyncd # cp /usr/share/doc/lsyncd/lrsync.lua /etc/lsyncd.conf # vi /etc/lsyncd.conf # 変更 statusInterval = 1, sync{ default.rsync, # ミラー元ディレクトリ指定 source="/var/www/html/", # ミラー先のホスト名/IPアドレス:(rsyncd.confで設定した名前) target="192.168.0.1::site", # 追記:rsync のオプション rsyncOpts="-az", # 追記:ミラー除外リスト excludeFrom="/etc/rsync_exclude.lst", } lsyncd-2.1.xの場合 # vi /etc/lsyncd.conf settings = { logfile = "/var/log/lsyncd.log", # ステータス管理ファイルの指定 statusFile = "/tmp/lsyncd.stat", # ステータスの更新頻度(秒) statusInterval = 1, # 起動時に接続に失敗した場合、再接続を試みる insist = 1, # lsyncdがrsyncを呼び出すまでの時間(秒) delay = 5, } sync{ default.rsync, source="/var/www/html/", target="192.168.0.1::site", -- exclude={"/test/", "/test2/"}, -- /var/www/html/testディレクトリ及び/var/www/html/test2ディレクトリを除く -- exclude="/test**", ワイルドカードによる指定も可能 -- exclude="/*/", サブディレクトリすべて -- exclude={"*.log", "/*/"}, ファイル名にも指定可能 rsync = { perms = true, owner = true, group = true, verbose = true, }, } # /etc/rc.d/init.d/lsyncd start Starting lsyncd: [ OK ] # chkconfig lsyncd on複数のディレクトリを監視するにはsync {} ブロックを並べて記載します。
●source path、target pathの記載方法による挙動の違い
source path、target pathの最後に「/」の記載有り無しでの挙動を確認してみました。デフォルトの設定は下記のとおりとします。
rsyncd.conf # 任意のモジュール名(ミラー元から接続時の名前) [backup] # ← ミラー先ディレクトリ path = /root/backup lsyncd.conf.xml <directory> # ミラー元ディレクトリ指定 <source path="/tmp/root/"/> # ミラー先IPアドレス::ミラー先のrsyncd.confでつけた名前 <target path="192.168.0.1::backup"/> </directory>上記の場合、/root/backup以下に同期されました。
下記のように書き換えで、同期をさせた場合
<directory> # ミラー元ディレクトリ指定 <source path="/tmp/root"/> # ミラー先IPアドレス::ミラー先のrsyncd.confでつけた名前 <target path="192.168.0.1::backup"/> </directory>/root/backup/root以下に同期されました。なお、上記の場合、rsyncd.confのpathに設定されているフォルダの最後の「/」の記載の有無に関わらず/root/backup/root以下に同期されます。
また、このときはOpenSSHでの接続となりUIDで指定したユーザのパスワードを尋ねられるようになりました。「auth users」が設定されると、クライアントはモジュール接続時にユーザ名とパスワードの入力を要求される、そうです。
何故、OpenSSHで接続されるのかは不明(デフォルト?)。
OpenSSH接続での同期は問題ありませんが、同期のたびにパスフレーズを入力しなければならないのは非常に煩わしい作業です。これを解消するにはパスフレーズなしの鍵を作成する必要があります。
パスフレーズなしでログインする方法を参照して、ミラー先のホストでlsyncdを動作させるユーザのホームディレクトリに鍵を作成してください。作成した「authorized_keys」「id_dsa」「id_dsa.pub」をミラー元の同じユーザのホームディレクトリの.ssh/に保存してください。
また、sshd_configでパスフレーズなしを許可する必要があります。
●監視するファイル数制限を増やす
監視するディレクトリ内のファイルが増えると、同期できなくなりログにエラーが記録されるようになります。
Tue Feb 22 14:09:07 2011: ERROR: Cannot add watch /path/to/source/foo/bar (28:No space left on device)監視するファイル数を増やすには inotify のカーネルパラメーターを増やします。
# vi /etc/sysctl.conf fs.inotify.max_user_watches = 30000有効にするため、sysctl -p コマンドを実行します。
# sysctl -pなお、inotify 関連のカーネルパラメーターは /proc 以下のファイルに書かれています。
/proc/sys/fs/inotify/max_queued_events 16384 /proc/sys/fs/inotify/max_user_instances 128 /proc/sys/fs/inotify/max_user_watches 8192
●ログに出力されるエラー
lsyncdをスタートさせましたが以下のようなエラーが/var/log/lsyncdに記録されました。
下記の場合は、rsyncd.confのモジュールオプション「path」の設定で「=」が抜けていたのが原因です。
@ERROR: chdir failed rsync error: error starting client-server protocol (code 5) at main.c(1506) [sender=3.0.7]以下のように変更したところ同期するようになりました。
<target path="192.168.0.1::backup"/>
↓
<target path="192.168.0.1:backup"/>
ERROR: module is read only rsync error: syntax or usage error (code 1) at main.c(747) [receiver=2.6.8] rsync: connection unexpectedly closed (4 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]この場合は、
read only = false
↓
read only = no
とします。
rsyncd.confで「auth users」を設定すると下記のようなエラーが出力されました。
Password: @ERROR: auth failed on module ****** rsync error: error starting client-server protocol (code 5) at main.c(1506) [sender=3.0.7]
このエラーはrsyncd.confに「auth users」を設定した時に発生します。
# vi /etc/rsyncd.conf
[user1]
comment = user1's Home Directory
path = /home/user1
hosts allow = 192.168.0.0/24
auth users = user1
secrets file = /etc/rsyncd.secrets
read only = no
# vi /etc/lsyncd.conf.xml
<directory>
<source path="/tmp/user1/"/>
<target path="192.168.0.1::user1"/>
</directory>
上記の設定で、lsyncdをリスタートさせたり、下記のコマンドをミラー元から実行した時にエラーが表示されます。
user1権限で実行する場合: rsync -avx /tmp/user1/ 192.168.0.1::user1 または rsync -avx --rsh=ssh /tmp/use1/ 192.168.0.1::user1 root権限で実行する場合: rsync -avx /tmp/user1/ user1@192.168.0.1::user1 表示されるエラー: Password: @ERROR: auth failed on module user1 rsync error: error starting client-server protocol (code 5) at main.c(1506) [sender=3.0.7] Sat Mar 5 21:40:04 2011: Forked binary process returned non-zero return code: 5 Sat Mar 5 21:40:04 2011: ERROR: Initial rsync from /tmp/user1/ -> 192.168.0.1::user1 failed.しかし、user1権限で下記のように実行すると同期が成功します。
$ rsync -avx --rsh=ssh /tmp/user1/ 192.168.0.1:/home/user1/ user1@192.168.0.1's password: building file list ... done sent 90 bytes received 20 bytes 44.00 bytes/sec total size is 6 speedup is 0.05
5分毎に下記のようなエラーが発生する。これは「xymon」を利用してポート監視を実行しているためです。
Jun 21 16:31:30 inu rsyncd[31642]: connect from inu.bigbang.dyndns.org (127.0.0.1) Jun 21 16:31:30 inu rsyncd[31642]: rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] Jun 21 16:31:30 inu rsyncd[31642]: rsync error: error in rsync protocol data stream (code 12) at io.c(***) [Receiver=*.*.*]io.c(***) の「***」の数値は463や601等。
[Receiver=*.*.*]の「*.*.*」の数値はrsyncのバージョン番号。
Feb 4 23:41:48 neko rsyncd[16922]: rsync: failed to set times on "." (in webdav): Operation not permitted (1)このエラーは同期先に書き込む権限がない場合に出力されます。/etc/rsyncd.confでのuidまたはgidを変更します。
Thu Nov 24 10:26:45 2016 Normal: Retrying startup of "/var/www/html/": 12 Thu Nov 24 10:26:50 2016 Normal: recursive startup rsync: /var/www/html/ -> 192.168.0.12::html/ Thu Nov 24 10:26:51 2016 Normal: Retrying startup of "/var/www/html/": 12 Thu Nov 24 10:26:56 2016 Normal: recursive startup rsync: /var/www/html/ -> 192.168.0.12::html/ Thu Nov 24 10:26:57 2016 Normal: Retrying startup of "/var/www/html/": 12 Thu Nov 24 10:27:02 2016 Normal: recursive startup rsync: /var/www/html/ -> 192.168.0.12::html/ Thu Nov 24 10:27:03 2016 Normal: Retrying startup of "/var/www/html/": 12 Thu Nov 24 10:27:08 2016 Normal: recursive startup rsync: /var/www/html/ -> 192.168.0.12::html/調査したところ同期先のサーバの/var/log/cactiのログが大きくなりすぎ/(ルート)の使用領域が100%となっているためでした。原因であるcactiのログサイズを0バイトとしたところ正常に同期されるようになりました。
Thu Nov 24 10:27:09 2016 Normal: Startup of "/var/www/html/" finished.実施した作業は下記のとおりです。
(同期先) # cat /dev/null > /var/log/cacti/cacti.log # systemctl restart rsyncd (同期元) # systemctl restart lsyncd同期元の/var/log/lsyncd.logを確認し該当ファイルが同期されていることを確認しました。
●ディレクトリの除外方法
lsyncd.conf内に記載する、同期ファイル除外設定は正常に動作しないようです(2023.09.12現在)。したがって、ミラー側(rsyncd.conf)で除外設定しています。
以下の例では/var/www/html/が同期対象のディレクトリです。その配下にあるtest、test2ディレクトリを除外します。
rsyncd.conf [hoge] path=/var/www/html/ uid = hoge gid = hoge read only = false exclude from = /etc/rsyncd.exclude/etc/rsyncd.excludeの内容は下記のとおりです。
- test - test2
lsyncd-2.1.xの場合 # vi /etc/lsyncd.conf settings { logfile = "/var/log/lsyncd.log", statusFile = "/tmp/lsyncd.stat", statusInterval = 1, } sync{ default.rsync, source="/var/www/html/", target="192.168.0.1::site", delete = false, # 同期先の削除無効 -- exclude={"/test/", "/test2/"}, -- /var/www/html/testディレクトリ及び/var/www/html/test2ディレクトリを除く -- exclude="/test**", ワイルドカードによる指定も可能 -- exclude="/*/", サブディレクトリすべて -- exclude={"*.log", "/*/"}, ファイル名にも指定可能 rsync = { perms = true, owner = true, group = true, verbose = true, }, }使用できるワイルドカードは
? - スラッシュ(/) を除く任意の 1 文字にマッチ
* - スラッシュ(/) を除く任意の 0 文字以上にマッチ
** - スラッシュ(/) を含む任意の 0 文字以上にマッチ
lsyncd の exclude を外部ファイルで指定する場合には "excludeFrom=ファイル名" を使用して宣言する。
外部ファイルで指定する場合には + による include 設定は機能しない。'/' で終了している場合には除外ディレクトリと判定される。
(注意)除外するパターンマッチについて
exclude="log"
の除外指定を行なうと log(ファイル) , /log/ (ディレクトリ)が除外対象となる。
つまり、/abc/log/ はマッチするので除外対象となるが /login/は除外対象にはならない。
●OSアップデート時の注意事項
OSをアップデートするとrsyncd.confが差し替えられるので注意する必要があります。
差し替えられたファイルは/etc/rsyncd.conf.rpmsaveです。これをコピーしrsyncを再起動すれば対応完了です。
●yum updateを実施後、lsyncdが動作しなくなった
yum updateを実施したところlsyncdもアップデートされてしまい、そこから動作しなくなってしまいました。
※/var/log/messagesの抜粋 May 1 09:22:19 neko yum[1518]: Updated: lsyncd-2.2.2-1.el7.x86_64 May 1 09:22:33 neko lsyncd: Error: Do not use settings = { ... } May 1 09:22:33 neko lsyncd: please use settings{ ... } (without the equal sign) May 1 09:22:33 neko systemd: lsyncd.service: main process exited, code=exited, status=255/n/a May 1 09:22:33 neko systemd: Unit lsyncd.service entered failed state. May 1 09:22:33 neko systemd: lsyncd.service failed.どうもconfigの書き方がおかしいらしい。
「settings = {」と言う記載を「settings {」に変更し、lsyncdを再起動したら今度は違うエラーが記録されました。
※/var/log/messagesの抜粋 May 1 10:17:36 neko lsyncd: Error: error preparing /etc/lsyncd.conf: /etc/lsyncd.conf:9: setting "delay" unknown. May 1 10:17:36 neko systemd: lsyncd.service: main process exited, code=exited, status=255/n/a May 1 10:17:36 neko systemd: Unit lsyncd.service entered failed state. May 1 10:17:36 neko systemd: lsyncd.service failed.delayディレクティブの記載場所をsetteingsから各rsyncの{}内に記載したところ正常に起動するようになりました。
●Error: Terminating since out of inotify watches.
/var/log/lsyncdに下記のようなログが記録される場合があります。
Error: Terminating since out of inotify watches. Consider increasing /proc/sys/fs/inotify/max_user_watchesこれはinotifyで監視しているディレクトリ数が上限に達しているのが原因です。対処方法は「●監視するファイル数制限を増やす」を参照してください。