#実現したいこと
複数のサーバ間で任意のディレクトリを同期(双方向)したい
#環境
- サーバ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に追加
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側)
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側)
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のところに=は不要
× settings = {
○ settings {
- サーバ1(10.102.55.101側)
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側)
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
以上の作業でデータが同期されるはずです。