近期由于业务需要,需要将两台服务器数据保持同步。方案有很多,rsync是其中一种解决方案,本文对rsync的安装及配置进行简单说明,其他实现方式有兴趣可以研究。以下是本文提纲,供参考:
- rsync安装篇
- rsync配置篇(服务器端&客户端)
- 使用方法简介
一、rsync安装篇
rsync的安装于其他linux应用安装方法相同,在centos系统,可通过以下命令安装
yum install rsync
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
对于debian、ubuntu服务器,可使用以下命令:
sudo apt-get install rsyn
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
安装完成后可使用命令rsync进行测试,如安装成功,会有以下提示:
二、rsync配置篇(服务器端&客户端)
rsync服务器端可以理解为需要备份同步的主服务器,客户端可以理解为数据同步目标服务器。
1、rsync服务器端配置:
rsync服务器端正常运行需要三个配置文件:rsyncd.conf、rsyncd.secrets和rsyncd.motd,软件安装完成后默认是没有这三个配置文件的,需要手动创建,我们通过以下命令,创建相关目录及文件:
mkdir /etc/rsyncd/ touch /etc/rsyncd/rsyncd.conf
touch /etc/rsyncd/rsyncd.secrets
touch /etc/rsyncd/rsyncd.motd chmod 600 /etc/rsyncd/rsyncd.secrets
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; } 首先创建配置文件存放目录,这里使用/etc/rsyncd,之后建立三个配置文件。其中rsyncd.secrets为用户及密码存放文件,为了密码的安全性,我们把权限设为600。
rsyncd.conf是rsync服务器的主要配置文件,配置信息基本都在此文件包含。rsyncd.secrets为用户及密码存放文件。rsyncd.motd 存放客户端登陆后的欢迎提示信息(好纠结)。
下面为三个配置文件写入配置信息。
rsyncd.conf 配置文件主要信息如下
#Minimal configuration file for rsync daemon
# See rsync(1) and rsyncd.conf(5) man pages for help # This line is required by the /etc/init.d/rsyncd script
pid file=/var/run/rsyncd.pid
port=10086
address=192.168.162.9
#uid = nobody
#gid = nobody
uid=root
gid=root use chroot=yes
read only=no #limit access to private LANs
hosts allow=192.168.162.127
hosts deny=* max connections = 5
motd file = /etc/rsyncd/rsyncd.motd #This will give you a separate log file
#log file = /var/log/rsync.log #This will log every file transferred - up to 85,000+ per user, per sync
#transfer logging = yes log format = %t %a %m %f %b
syslog facility = local3
timeout = 300 [config_m]
path=/usr/local/config_m
auth users=sunguangran
secrets file=/etc/rsyncd/rsyncd.secrets [jboss_home]
path=/usr/local/jboss-as-7.1.0.Final
exclude=/usr/local/jboss-as-7.1.0.Final/standalone/tmp
auth users=sunguangran
secrets file=/etc/rsyncd/rsyncd.secrets
密码文件 rsyncd.secrets 的内容格式:
sunguangran:000000
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
rsyncd.motd 文件内容可以随便写,用于在客户端登陆服务后显示的欢迎文字。
rsyncd.conf 配置项较多,具体配置可google rsync配置项说明,没google知道的多,这里就不多说了 哈
此外,需要在服务器端开通相应端口的防火墙,以便客户端能够访问到服务。
三、使用方法简介
- 服务器端
上述三个配置文件准备好后,在服务器执行以下脚本,启动rsync服务:
/usr/bin/rsync –daemon --config=/etc/rsyncd/rsyncd.conf
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
2、客户端
客户端通过以下脚本同步数据:
/usr/bin/rsync -avzP --delete --port 10086 sunguangran@192.168.162.9::config_m /usr/local/config_m
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; } 注: 这个命令的意思就是说,用sunguangran用户登录到服务器上,把config_m(服务器配置节点名称)数据,同步到本地目录/usr/local/config_m上。当然本地的目录是可以你自己定义的。当你在客户端上,当前操作的目录下没有/usr/local/config_m这个目录时,系统会自动为你创建一个;当存在该目录中,要注意它的写权限。
使用这种方式进行同步是,在链接服务器成功后,需要手动个输入密码。我们期望做成系统定时任务,定期同步数据,可以使用以下方式,将密码从文件中读取。
我们加一个选项 --password-file=/etc/rsyncd/rsyncd.secrets,这是当我们以sunguangran用户登录rsync服务器同步数据时,密码将读取 rsyncd.secrets 这个文件。这个文件内容只是sunguangran用户的密码。我们要如下做:
touch rsyncd.secrets
chmod 600 rsyncd.secrets
echo "000000"> rsyncd.secrets
rsync -avzP --delete --port 10086 --password-file=/etc/rsyncd/rsyncd.secrets sunguangran@192.168.162.9::config_m /usr/local/config_m
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
这样就不需要手动输入密码文件了,可以手动将需要同步的目录写成shell脚本,做成系统定时任务。
新建一个文件 rsync_task.sh,加入以下两行代码:
/usr/bin/rsync -avzP --delete --port 10086 --password-file=/etc/rsyncd/rsyncd.secrets sunguangran@192.168.162.9::config_m /usr/local/config_m
/usr/bin/rsync -avzP --delete --port 10086 --password-file=/etc/rsyncd/rsyncd.secrets sunguangran@192.168.162.9::jboss_home /usr/local/jboss-as-7.1.0.Final
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
建立系统定时任务,输入crontab -e,输入以下内容:
0,30 * * * * /etc/rsyncd/rsync_task.sh
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
保存退出,客户端服务器每个小时的0分和30分时都会自动运行一次rsync_task.sh
rsync除了同步文件及目录之外,还可以利用它来实现对远程网站的远程备份。如果再结合脚本和Crontab就能实现定时自动远程备份。其可以实现与商业化的备份和镜象产品的类似效果,但完全免费。
本文主要针对环境搭建及实现进行了简单说明,如果对其中具体配置项意义感兴趣,可进行查询,这里不做赘述。