Csync 实现双向同步功能

假设你现在拥有两台主机:server23.example.com server24.example.com
现在你要实现的是在一台电脑上改动一个文件的内容之后,执行该csync的相关命令之后实现同步修改。csync2只适合同步网页文件或者是配置文件,不适合同步大容量的文件,他的性能还是不够的。
1.首先你需要安装一些软件(务必记得以下操作在两台电脑上都要执行因为你要设置同步,所以应该是的两个电脑的环境应该相同的)
yum install gcc gcc-c++ libgpg-error libgpg-error-devel libgcrypt libgcrypt-devel -y’
然后你在相关网站或者服务器上下载相关文件(注意以下都是源码哦,执行源码编译三部曲)
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/csync2-1.34.tar.gz
http://jaist.dl.sourceforge.net/sourceforge/inotify-tools/inotify-tools-3.13.tar.gz
不管如何你得到这些源码的压缩包之后,解压缩
tar zxf libtasn1-2.1.tar.gz
cd libtasn1-2.1
./configure && make && make install

tar zxf sqlite-2.8.17.tar.gz
cd sqlite-2.8.17.
./configure && make && make install

tar zxf librsync-0.9.7.tar.gz
cd librsync-0.9.7
./configure && make && make install

tar jxf gnutls-2.6.6.tar.bz2
cd gnutls-2.6.6
./configure && make && make install

echo “/usr/local/lib”>>/etc/ld.so.conf
ldconfig

ldconfig读取的配置文件是/etc/ld.so.conf,所以读取在echo “/usr/local/lib”写进去文件,并且ldconfig重新读取文件。要不得等到开机的时候才会重新读取。注意一定要记得执行ldconfig哦。否则你在csync2-1.34编译的时候会报错类似:configure: error: gnutls not found; install gnutls, gnutls-openssl and libtasn1 packages for your system or run configure with --disable-gnutls切记切记哦!)

tar zxf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13
./configure && make && make install

yum install byacc flex –y

tar zxf csync2-1.34.tar.gz
cd csync2-1.34
./configure && make && make install
make cert(产生证书)
csync2 –k /etc/csync2.key(产生钥匙)
scp /etc/csync2.key root@server24.example.com:/etc/

(因为两台机子上都要设置,所以这里你只设置一个,那么另一个主机你直接将需要改动的文件拷贝就可以了哈)
对了,还有一点需要注意的是在上面编译那个源码的时候有可能出现错误,可能原因是你某些相关联的包没有安装,应当将包安装之后,继续编译源码

2.以上执行了一些所需源码的编译与安装,现在该轮到我们配置文件
yum install xinetd -y
vi /etc/xinetd.d/csync2
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
}

记得scp csync2 root@server24example.com:/etc/xinetd.d/
然后在两台主机(server23和server24)上vi /etc/service添加
csync2 30865/tcp

然后 vi /etc/csync2.cfg
# Csync2 Example Configuration File
# ---------------------------------
#
# Please read the documentation:
# http://oss.linbit.com/csync2/paper.pdf

group mygroup
{
host server23.example.com server24.example.com;

# host host4@host4-eth2;
#
key /etc/csync2.key;//指明key的位置
#
include /www23;指明需要同步的目录
# include %homedir%/bob;
# exclude %homedir%/bob/temp;
exclude *~ .*;//排除以“.”开头的文件
#
# action
# {
# pattern /etc/apache/httpd.conf;
# pattern /etc/apache/sites-available/*;
# exec "/usr/sbin/apache2ctl graceful";
# logfile "/var/log/csync2_action.log";
# do-local;
# }
#
backup-directory /var/backups/csync2;(防错备份目录,根据自己的需求可设置可不设置,每台主机均要设置可,这个目录与下面你建立的目录是一样的)
backup-generations 3;
#
auto younger;//同步以最新的文件为标准更新
}
#
# prefix homedir
# {
# on host[12]: /export/users;
# on *: /home;
# }
mkdir /var/backups/csync2(做备份的目录,两台主机都要做)
之后编译好之后记得传给另一台主机一份哦!
Service xinetd start
Chkconfig xinetd on
chkconfig csync2 on

3.配置好文件并且启动服务之后接下来到我们测试是否成功的时候了
Csync2 –Tv(Finished with 0 errors.显示0个错误的时候就好了!) 测试csync配置是否正确,看一看到相关的SQL执行的过程,在检查没错之后执行以下步骤:
比如在server23上建一个文件/www23(两台主机名字要相同呢),写上内容“hello westos!”
在server23上执行:csync –xv 命令,可以发现在serve24主机下的www15/产生一个与server23上相同的文件,并且内容相同。

注意:倘若在你连接的时候出现问题,连接不上等,也就是说并不能同步的话那么你就应该检查本就的,/etc/hosts.allow /etc/hosts.deny
/etc/xinetd.conf ,iptables -nL当说你的证书是错误的情况下,请注意
 rm -f /var/lib/csync2/desktop73.example.com.db
 rm -f /var/lib/csync2/server73.example.com.db

 等一系列设置均有可能造成同步出错,倘若是A同步B,使B和A的文件更新一致,如果无法同步,同步出错,那么是因为你对方的机子有问题,因为假如B机子的各个服务都能正常运行的话理应会被同步的。