一、關鍵技術
利用csync2+sqlite實現數據的高效實時的增量備份,相關目錄及文件信息都存儲在sqlite數據庫中,
大大提升了同步的速率和效率;利用inotify觸發式(實時)執行csync同步命令更新文件。
二、方案適用
圖片服務器集羣方案: ReiserFS4+csync2+inotify
網站服務程序分佈式方案:csync2+inotify+NFS
[注](如,網站程序中存在緩存目錄則排除此目錄同步,將緩存目錄掛載在NFS上)
分佈式集羣軟件配置更新同步方案: csync2+inotify
[注](如,集羣中heartbeat相關的配置文件,如apache,nginx的配置文件,並能執行相關腳本)
三、實際配置過程
系統:centos5.1
結構: 三臺服務器
利用csync2+sqlite實現數據的高效實時的增量備份,相關目錄及文件信息都存儲在sqlite數據庫中,
大大提升了同步的速率和效率;利用inotify觸發式(實時)執行csync同步命令更新文件。
二、方案適用
圖片服務器集羣方案: ReiserFS4+csync2+inotify
網站服務程序分佈式方案:csync2+inotify+NFS
[注](如,網站程序中存在緩存目錄則排除此目錄同步,將緩存目錄掛載在NFS上)
分佈式集羣軟件配置更新同步方案: csync2+inotify
[注](如,集羣中heartbeat相關的配置文件,如apache,nginx的配置文件,並能執行相關腳本)
三、實際配置過程
系統:centos5.1
結構: 三臺服務器
引用
# vi /etc/hosts
192.168.4.188 csync1
192.168.4.190 csync2
192.168.4.191 csync3
1、創建下載文件列表
引用
cd /usr/local/src/
vi list //以下內容:
ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.7.tar.gz
ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.4.tar.gz
ftp://ftp.gnutls.org/pub/gnutls/libtasn1/libtasn1-2.1.tar.gz
http://www.sqlite.org/sqlite-2.8.17.tar.gz
http://internode.dl.sourceforge.net/sourceforge/librsync/librsync-0.9.7.tar.gz
ftp://ftp.gnu.org/pub/gnu/gnutls/gnutls-2.6.6.tar.bz2
http://oss.linbit.com/csync2/csync2-1.34.tar.gz
http://jaist.dl.sourceforge.net/sourceforge/inotify-tools/inotify-tools-3.13.tar.gz
vi list //以下內容:
ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.7.tar.gz
ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.4.tar.gz
ftp://ftp.gnutls.org/pub/gnutls/libtasn1/libtasn1-2.1.tar.gz
http://www.sqlite.org/sqlite-2.8.17.tar.gz
http://internode.dl.sourceforge.net/sourceforge/librsync/librsync-0.9.7.tar.gz
ftp://ftp.gnu.org/pub/gnu/gnutls/gnutls-2.6.6.tar.bz2
http://oss.linbit.com/csync2/csync2-1.34.tar.gz
http://jaist.dl.sourceforge.net/sourceforge/inotify-tools/inotify-tools-3.13.tar.gz
2、創建安裝腳本並執行
引用
vi install.sh //以下內容:
wget –i list
cd /usr/local/src/
tar zxvf libgpg-error-1.7.tar.gz
cd libgpg-error-1.7
./configure && make && make install
cd ..
tar zxvf libgcrypt-1.4.4.tar.gz
cd libgcrypt-1.4.4
./configure --with-gpg-error-prefix=/usr/local && make && make install
cd ..
tar zxvf libtasn1-2.1.tar.gz
cd libtasn1-2.1
./configure && make && make install
cd ..
tar zxvf sqlite-2.8.17.tar.gz
cd sqlite-2.8.17
./configure && make && make install
cd ..
tar zxvf librsync-0.9.7.tar.gz
cd librsync-0.9.7
./configure && make && make install
cd ..
tar jxvf gnutls-2.6.6.tar.bz2
cd gnutls-2.6.6
./configure --with-libgcrypt-prefix=/usr/local/ && make && make install
cd ..
echo "/usr/local/lib" >> /etc/ld.so.conf
wget –i list
cd /usr/local/src/
tar zxvf libgpg-error-1.7.tar.gz
cd libgpg-error-1.7
./configure && make && make install
cd ..
tar zxvf libgcrypt-1.4.4.tar.gz
cd libgcrypt-1.4.4
./configure --with-gpg-error-prefix=/usr/local && make && make install
cd ..
tar zxvf libtasn1-2.1.tar.gz
cd libtasn1-2.1
./configure && make && make install
cd ..
tar zxvf sqlite-2.8.17.tar.gz
cd sqlite-2.8.17
./configure && make && make install
cd ..
tar zxvf librsync-0.9.7.tar.gz
cd librsync-0.9.7
./configure && make && make install
cd ..
tar jxvf gnutls-2.6.6.tar.bz2
cd gnutls-2.6.6
./configure --with-libgcrypt-prefix=/usr/local/ && make && make install
cd ..
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig
tar zxvf csync2-1.34.tar.gz
cd csync2-1.34
./configure && make && make install && make cert
cd ..
tar zxvf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13
./configure && make && make install
cd ..
echo "csync2 30865/tcp" >> /etc/services
echo "service csync2
{
disable = no
protocol = tcp
flags = REUSE
socket_type = stream
wait = no
user = root
group = root
server = /usr/local/sbin/csync2
server_args = -i
#only_from = 192.168.10.50 192.168.10.51
}" > /etc/xinetd.d/csync2
chkconfig xinetd on
tar zxvf csync2-1.34.tar.gz
cd csync2-1.34
./configure && make && make install && make cert
cd ..
tar zxvf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13
./configure && make && make install
cd ..
echo "csync2 30865/tcp" >> /etc/services
echo "service csync2
{
disable = no
protocol = tcp
flags = REUSE
socket_type = stream
wait = no
user = root
group = root
server = /usr/local/sbin/csync2
server_args = -i
#only_from = 192.168.10.50 192.168.10.51
}" > /etc/xinetd.d/csync2
chkconfig xinetd on
3、賦予腳本可執行權限並執行:
引用(注:需要在每個節點執行腳本)
chmod 755 install.sh
./install.sh
./install.sh
4、編輯hosts文件如下內容:
引用
vi /etc/hosts
192.168.4.188 csync1
192.168.4.188 csync1
192.168.4.190 csync2
192.168.4.191 csync3
(三臺主機都要修改)
5、生成密鑰並分發到每個節點:
引用
csync2 -k /etc/test.key
scp /etc/test.key root@node2:/etc/
scp /etc/test.key root@node2:/etc/
6、創建備份目錄:
引用
mkdir /var/csync_backup
注:用於防止修改錯誤恢復,如果啓用了,分別在其他節點建立相應的目錄。
7、修改csync2配置文件(所有節點相同):
引用
vi /etc/csync2.cfg //以下內容:
group testgroup
{
host csync1 csync2 csync3; //定義組成員
key /etc/test.key; //制定密鑰
include /var/www/html; //需要同步的目錄
exclude /var/www/html/temp; //需要排除的目錄。
exclude /var/www/html/templates_; //需要排除同步的緩存目錄。
exclude *~ .*; //排除同步.開頭的文件
backup-directory /var/csync_backup; //防錯備份目錄,根據自己的需求設置。
backup-generations 3;
auto younger; //同步以最新的文件爲標準更新.
}
group testgroup
{
host csync1 csync2 csync3; //定義組成員
key /etc/test.key; //制定密鑰
include /var/www/html; //需要同步的目錄
exclude /var/www/html/temp; //需要排除的目錄。
exclude /var/www/html/templates_; //需要排除同步的緩存目錄。
exclude *~ .*; //排除同步.開頭的文件
backup-directory /var/csync_backup; //防錯備份目錄,根據自己的需求設置。
backup-generations 3;
auto younger; //同步以最新的文件爲標準更新.
}
啓動服務:
引用
/etc/init.d/xinetd start
或者:
service xinetd start
注:csync2相關測試命令
引用
csync2 –vvv –T 測試csync配置是否正確,可以看到相關SQL執行過程
csync2 –xv 執行同步命令
csync2 –xvvv 執行同步命令,並顯示出詳細的信息
csync2 –xv 執行同步命令
csync2 –xvvv 執行同步命令,並顯示出詳細的信息
8.做個軟鏈接
32位系統:
ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib/libinotifytools.so.0
64位系統:
ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0
9、配置inotify觸發同步腳本(所有節點相同):
引用
vi /usr/local/sbin/csync2_test.sh //以下內容:
#!/bin/bash
src=/var/www/html
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \
--exclude "\.swp$" \
-e close_write,modify,delete,create,attrib,move \
${src} \
| while read file
do
csync2 -x >/dev/null 2>&1
done
#!/bin/bash
src=/var/www/html
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \
--exclude "\.swp$" \
-e close_write,modify,delete,create,attrib,move \
${src} \
| while read file
do
csync2 -x >/dev/null 2>&1
done
後臺執行腳本:
引用
chmod a+x /usr/local/sbin/csync2_test.sh
csync2_test.sh &
csync2_test.sh &
10、測試文件同步:
在任一節點上創建,修改,移動,或者刪除文件或目錄,在其他節點檢查是否同步,如果沒有同步,請使用csync2的相關測試命令測試同步是否正常。