CentOS
rsync
CentOS6.5
lsyncd

rsyncとlsyncdを使ったディレクトリの双方向同期

More than 1 year has passed since last update.


実現したいこと

複数のサーバ間で任意のディレクトリを同期(双方向)したい


環境


  • サーバ1


    • OS:CentOS release 6.5 (Final)

    • ip:10.102.55.101とします。



  • サーバ2


    • OS:CentOS release 6.8 (Final)

    • ip:10.102.55.103とします。



  • 同期したいディレクトリ


    • /opt/share



  • rsync


    • バージョン:Version 3.0.6 protocol version 30

    • rsync を デーモンモードで動作させ、rsyncd(サーバ)として利用する



  • lsyncd


    • バージョン:Version: 2.1.5



  • xinetd


    • バージョン:Version 2.3.14 libwrap loadavg




前提

1.同じタイムサーバで、時刻が同期できていること!

2.rsyncdは、xinetdのサービスとして使用する


rsyncとは?

サーバ間でファイル、ディレトリを同期させることが出来るコマンド

デーモンモードで動作させることで、rsyncd(サーバ)として利用することもできる


lsyncdとは?

inotify (ファイルシステムイベントを監視するLinuxカーネルのAPI ) で 同期元のファイルやディレクトリの新規作成、更新、削除などの変化を検出したら、指定した方式(デフォルトでは、rsync)で 同期先のファイル、ディレクトリの更新を自動で行うものです。


作業の流れ

今回は、双方向同期を実現したいので、同じセッティングを2つのサーバで行います。

1.rsync lsyncd xinetdインストール

# yum install rsync lsyncd xinetd

*必要に応じてLuaの依存パッケージをインストール

# yum -y install libxml2-devel lua-devel lua-static

2.Luaの環境変数設定

今回は、rootの.bash_profileに追加


/root/.bash_profile

export LUA_CFLAGS='-I/usr/include -lm -ldl'

export LUA_LIBS='/usr/lib/liblua.a'

2.コピー先用のディレクトリを作成

# mkdir /opt/share

3.コピー先用のディレクトリの権限変更

# chown nobody:nobody /opt/share

4.rsyncサーバー設定ファイルの作成と編集


  • サーバ1(10.102.55.101側)


/etc/rsyncd.conf

uid = root

gid = root
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid

[share]
path=/opt/share
hosts allow = 10.102.55.103
read only = no



  • サーバ2(10.102.55.103側)


/etc/rsyncd.conf

uid = root

gid = root
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid

[share]
path=/opt/share
hosts allow = 10.102.55.101
read only = no


5.lsyncd設定ファイル編集

*settingsのところに=は不要


/etc/lsyncd.conf

× settings = {

○ settings {


  • サーバ1(10.102.55.101側)


/etc/lsyncd.conf

settings {

logfile = "/var/log/lsyncd.log",
statusFile = "/tmp/lsyncd.stat",
statusInterval = 1,
}
sync{
default.rsync,
delay = 0,
source="/opt/share/",
target="10.102.55.103:/opt/share/",
delete="running",
rsync = {
archive = true,
links = true,
update = true,
verbose = true
}
}


  • サーバ2(10.102.55.103側)


/etc/lsyncd.conf

settings {

logfile = "/var/log/lsyncd.log",
statusFile = "/tmp/lsyncd.stat",
statusInterval = 1,
}
sync{
default.rsync,
delay = 0,
source="/opt/share/",
target="10.102.55.101:/opt/share/",
delete="running",
rsync = {
archive = true,
links = true,
update = true,
verbose = true
}
}

6.RSA鍵ペア(公開鍵/秘密鍵)作成

# ssh-keygen -t rsa -N ""

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

この後、空Enter

7.RSA鍵(公開鍵)を対向サーバへコピー


  • サーバ1 → サーバ2へ

# scp .ssh/id_rsa.pub 10.102.55.103:/root/.ssh/authorized_keys2


  • サーバ2 → サーバ1へ

# scp .ssh/id_rsa.pub 10.102.55.101:/root/.ssh/authorized_keys2


  • 必要に応じて、sshdで、キーファイル使用のみを許可

Match Address 10.102.55.*

PasswordAuthentication yes
PermitRootLogin without-password
X11Forwarding yes

# /etc/rc.d/init.d/sshd restart

sshd を停止中: [ OK ]
sshd を起動中: [ OK ]

5.xinetd起動

# /etc/rc.d/init.d/xinetd restart

xinetd を停止中: [ NG ]
xinetd を起動中: [ OK ]

7.rsyncサーバー起動と自動起動設定

# chkconfig rsync on

8.lsyncdサーバー起動と自動起動設定

# chkconfig --add lsyncd

# chkconfig lsyncd on
# chkconfig
lsyncd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

xinetd ベースのサービス:
rsync: on

以上の作業でデータが同期されるはずです。