Chapter 4: Synchronizing Servers with RYSNC and SSH
1. rsync. 本书是一本描述HA和load balance的书,这一章主要是在描述如何同步两台服务器上的文件和内容。因为在做HA的时候,两台服务器上的内容必须完全一样,这样,当一台挂掉之 后,另外一台才能马上接替工作。当然了,如果两台服务器无盘,共享一个存储的话,就没有这个必要了。如果不是,那么就要做这些事情。
2. 本书的组织上,首先是讲HA,然后讲load balance。先描述了HA之后,就可以将load balance server做一个双机HA,这样再讲load balance就科学一些。
3. 使用rsync可以同步两台机器,相比cp这些工具,rsync提供了这样一些增强feature:
Examines the source files and only copies blocks of data that change.
(Optionally) works with the secure shell to encrypt data before it passes over the network.
Allows you to compress the data before sending it over the network.
Will automatically remove files on the destination system when they are removed from the source system.
Allows you to throttle the data transfer speed for WAN connections.
Has the ability to copy device files
rsync可以将一台机器上的数据push给另外一台;也可以用pull的方式从一台服务器上将数据拿到本机上来。Unison比rsync更强大一些。
4. OK,然后来看如何使用rsync和ssh吧。将rsync和ssh捆绑,能增加rsync的安全性,因为有可能被同步的数据有/etc/passwd, 用ssh可以保证这些数据的安全。情景为两台服务器,一台称为primary server(这台机器上保存了要同步的数据,数据只能在这台机器上修改,他是ssh client,即primary server发起连接),另一台成为backup server(这台服务器存放数据的冗余备份,他是ssh server)。那么,首先,将ssh配置好,配成不用输入口令就可以在两台机器上穿梭,至少要配成从primary server到backup server不需要输入口令,用public/private key即可做到。然后用如下的rsync命令就可以开始同步:
#rsync -v -a -z -e ssh --delete /www/ <backup server>:/www
这条命令中,-v表示verbose; -a表示同步所有文件和文件夹; -z表示压缩数据,这样可以使传输的流量减小; -e ssh表示用ssh做为连接手段,如果想让ssh作为rsync的默认连接手段,可以设置RSYNC_RSH环境变量; --delete表示如果destination(backup server)目录里面有些文件是primary server目录中所没有的,那就删掉,以此保证backup server和primary server文件的完全一样。所以,上述命令其实就是同步primary server的/www目录下的所有文件和backup server /www目录下的所有文件。这里/www/后面要加一个slash,表示要同步的是这个目录下的文件,而不光是一个目录。
5. rsync还有一个--stats的option,加上这个option后,rsync会打印出同步的细节,比如同步了哪些文件,同步了多少字节等。对于 没有修改过的文件,rsync是不会同步的,说白了rsync就是一个增量备份的东东。如果同步一个文件,可以这样:
#rsync -v -a -z -e ssh /etc/sysconfig/iptables <backup server>:/etc/sysconfig/
6. rsync还有一个option,是--bwlimit,这个东西可以用来限定rsync每秒发送的数据大小,在slow connection的情况下挺实用。比如:
rsync -v -a -z -e ssh --delete --bwlimit=8 /www/ <backup server>:/www # send 8K bytes per second
7. 使用cron从而是rsync成为一个计划任务。crontab -e编辑一个定时任务:
# 每个小时的第30分钟,执行rsync
30 * * * * rsync -v -a -z -e ssh --delete /www/ <backup server>:/www > /dev/null 2>&1
通过定时任务,轻松完成文件同步。可以写一个脚本,增强功能,比如当rsync失败的时候给我们发个邮件什么的,这就很简单了,不说了。
8. 最后罗嗦一句,rsync要使用873端口,ssh用22端口,如果有防火墙,记得打开这两个端口哦。
1. rsync. 本书是一本描述HA和load balance的书,这一章主要是在描述如何同步两台服务器上的文件和内容。因为在做HA的时候,两台服务器上的内容必须完全一样,这样,当一台挂掉之 后,另外一台才能马上接替工作。当然了,如果两台服务器无盘,共享一个存储的话,就没有这个必要了。如果不是,那么就要做这些事情。
2. 本书的组织上,首先是讲HA,然后讲load balance。先描述了HA之后,就可以将load balance server做一个双机HA,这样再讲load balance就科学一些。
3. 使用rsync可以同步两台机器,相比cp这些工具,rsync提供了这样一些增强feature:
Examines the source files and only copies blocks of data that change.
(Optionally) works with the secure shell to encrypt data before it passes over the network.
Allows you to compress the data before sending it over the network.
Will automatically remove files on the destination system when they are removed from the source system.
Allows you to throttle the data transfer speed for WAN connections.
Has the ability to copy device files
rsync可以将一台机器上的数据push给另外一台;也可以用pull的方式从一台服务器上将数据拿到本机上来。Unison比rsync更强大一些。
4. OK,然后来看如何使用rsync和ssh吧。将rsync和ssh捆绑,能增加rsync的安全性,因为有可能被同步的数据有/etc/passwd, 用ssh可以保证这些数据的安全。情景为两台服务器,一台称为primary server(这台机器上保存了要同步的数据,数据只能在这台机器上修改,他是ssh client,即primary server发起连接),另一台成为backup server(这台服务器存放数据的冗余备份,他是ssh server)。那么,首先,将ssh配置好,配成不用输入口令就可以在两台机器上穿梭,至少要配成从primary server到backup server不需要输入口令,用public/private key即可做到。然后用如下的rsync命令就可以开始同步:
#rsync -v -a -z -e ssh --delete /www/ <backup server>:/www
这条命令中,-v表示verbose; -a表示同步所有文件和文件夹; -z表示压缩数据,这样可以使传输的流量减小; -e ssh表示用ssh做为连接手段,如果想让ssh作为rsync的默认连接手段,可以设置RSYNC_RSH环境变量; --delete表示如果destination(backup server)目录里面有些文件是primary server目录中所没有的,那就删掉,以此保证backup server和primary server文件的完全一样。所以,上述命令其实就是同步primary server的/www目录下的所有文件和backup server /www目录下的所有文件。这里/www/后面要加一个slash,表示要同步的是这个目录下的文件,而不光是一个目录。
5. rsync还有一个--stats的option,加上这个option后,rsync会打印出同步的细节,比如同步了哪些文件,同步了多少字节等。对于 没有修改过的文件,rsync是不会同步的,说白了rsync就是一个增量备份的东东。如果同步一个文件,可以这样:
#rsync -v -a -z -e ssh /etc/sysconfig/iptables <backup server>:/etc/sysconfig/
6. rsync还有一个option,是--bwlimit,这个东西可以用来限定rsync每秒发送的数据大小,在slow connection的情况下挺实用。比如:
rsync -v -a -z -e ssh --delete --bwlimit=8 /www/ <backup server>:/www # send 8K bytes per second
7. 使用cron从而是rsync成为一个计划任务。crontab -e编辑一个定时任务:
# 每个小时的第30分钟,执行rsync
30 * * * * rsync -v -a -z -e ssh --delete /www/ <backup server>:/www > /dev/null 2>&1
通过定时任务,轻松完成文件同步。可以写一个脚本,增强功能,比如当rsync失败的时候给我们发个邮件什么的,这就很简单了,不说了。
8. 最后罗嗦一句,rsync要使用873端口,ssh用22端口,如果有防火墙,记得打开这两个端口哦。
补充一个在使用rsync时候的收获。rsync在读取文件名和文件夹的时候,是以byte的方式读取的,也 就是说,rsync是不管什么encoding这种事情的,比如我的suse上的文件和文件夹都是UTF-8的编码方式,此时我把这台机器上的东西备份到 另外一台机器上,所建立的文件夹和文件,他们的名字也就都是UTF-8的,此时如果我们在用samba挂载这台机器,如果codepage=cp936的 话,就会看到备份过来的文件都是乱码(中文的文件名和文件夹),所以,这里一定要指定codepage=utf-8,这个时候再去看文件,就都正常了。
补充:rsync支持多种sync的方式,比如前面看到的ssh, rsh等,除了这些,rsync自身还提供一个rsyncd的程序,只要被同步的机器上启动了rsyncd,那么,rsync就可以不依赖 ssh,rsh,也能正常工作,此时就是和对方的rsyncd通信了。这就是上面所说的873这个端口的由来了。