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

#実現したいこと
複数のサーバ間で任意のディレクトリを同期（双方向）したい

#環境
- サーバ１
    - OS：CentOS release 6.5 (Final)
    - ip：10.102.55.101とします。
- サーバ２
    - 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）で 同期先のファイル、ディレクトリの更新を自動で行うものです。

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

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で、キーファイル使用のみを許可

```/etc/ssh/sshd_config
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
```

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