双机同步任务操作步骤
注:红色为注释说明的内容,绿色为示例内容,请以项目实际情况修改操作
1、 安装或更新相关软件包
#yum install rsync* xinetd* –y
2、 配置rsync服务端(提供文件同步的服务器),制定提供同步的应用条目信息
A、 配置文件实例如下
#vim /etc/rsyncd.conf -------------编辑rsync配置文件
uid = root -------------设置进行数据传输时所使用的账户名或ID号,默认使用nobody
gid = root -------------设置进行数据传输时所使用的组名称或GID号,默认使用nobody
use chroot = no
max connections = 100 -------------稍后重试的提示消息
timeout = 600 -------------600s连接超时
pid file = /var/run/rsyncd.pid ------------设置rsync进程号保存名称
lock file = /var/run/rsyncd.lock ------------设置锁文件名称
log file = /var/log/rsyncd.log ------------设置日志文件名称,可以通过log format 参数设置日志格式
##以上为全局配置,下面为一个条目,可根据需求添加多个条目
[tomcat_project]
path = /opt/appl/ project/ ----------------同步目录的路径
##应用用户组id,和用户id
uid = 1501
gid = 1500
read only = yes ----------------是否允许客户端上传数据,这里设置为只读
list = yes ---------------客户端请求显示模块列表时,本模块名称是否显示,默认为ture
##允许使用该条目进行同步的主机地址,加入备机和预生产主机地址
hosts allow = 172.16.0.101,172.26.0.100
auth users = rsync ---------------设置允许连接服务器的账户,账户可以使系统中不存在的用户
secrets file = /etc/rsyncd.pwd --------------设置密码验证文件名称,注意该文件的权限要求为只读,建议权限600
B、 增加Rsync同步认证文件
#vim /etc/rsyncd.pwd ---------------设置验证文件密码
rsync:123456
C、 配置服务启动管理项
##vim /etc/xinetd.d/rsync
service rsync
{
##把这里的yes 改为 no
disable = no
flags = IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
#启动rsync服务
#service xinetd start
#验证是否启动成功
#netstat –anptl | grep 873
D、 防火墙放行rsync服务端口
#在vim /etc/sysconfig/iptables加入以上行
-A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
#service iptables restart ------------重启防火墙设置
3、 系统执行过setup脚本,默认是限制远程访问,这里需要开放客户端(同步端)的地址
#cat >> /etc/hosts.allow <<EOF
##这里的地址是同步端的
rsync:172.16.0.101:allow
EOF
服务端配置完毕!
4、 客户端(同步端)配置
A、 创建同步脚本放置目录
#mkdir -p /opt/appl/assist/rsync
B、 创建脚本生成日志文件的放置目录
#mkdir -p /var/log/rsync
C、 在脚本放置目录下创建如下脚本
#vim rsync_172.16.0.100_project.sh
#!/bin/sh
LOG_FILE=/var/log/rsync/rsync_172.16.0.100_project_$(date +%Y-%m-%d)
loginfo()
{
echo "$(date "+%Y-%m-%d_%H:%M") [ANIHC SAYS] $1" >>$LOG_FILE
}
##For project
loginfo "==========Synchronizing=========="
loginfo "Source directory project..."
loginfo "Destination directory is /opt/appl/project"
/usr/bin/rsync -arP --delete --exclude-from=/opt/appl/assist/rsync/exclude_list_project --password-file=/etc/rsyncd.pwd_project rsync@172.16.0.100::tomcat_project /opt/appl/project >>$LOG_FILE
loginfo "==========Synchronization done.=========="
D、 创建rsync用户认证文件
#cat /etc/rsyncd.pwd_project
##这里的密码和服务端的/etc/rsyncd.pwd中的密码一样
123456
E、 创建同步排除文件
##cat /opt/appl/assist/rsync/exclude_list_project
*.gz
*.tgz
*.zip
*.log
*.out
*.bak
*.tmp
log/*
logs/*
tmp/*
temp/*
##以上均为常规性同步排除,可以添加指定行排除文件
F、 测试脚本是否可以成功同步
#cd /opt/appl/assist/rsync
##后台执行脚本,并重定向输出到nohup.out文件
#nohup ./ rsync-172.16.0.100_project.sh &
##执行后检查/opt/appl 目录下是否已经有project同步过来,如果没有查看nohup.out定位错误
G、 如果脚本执行成功,添加定时任务
#crontab –e
#crontab –l
00 01 * * * /opt/appl/assist/rsync/rsync-172.16.0.100_project.sh > /dev/null 2>&1
常见的以下错误和相应的解决方法:
Q:为什么我总会出现"Read-only file system"的错误呢?
A:看看是否忘了设"read only = no"了
Q:为什么我会出现'@ERROR: invalid gid'的错误呢?
A:rsync使用时默认是用uid=nobody;gid=nobody来运行的,如果你的系统不存在nobody组的话,就会出现这样的错误,可以试试gid = ogroup或者其它
Q:绑定端口873失败是怎么回事?
A:如果你不是以root权限运行这一守护进程的话,因为1024端口以下是特权端口,会出现这样的错误。你可以用--port参数来改变。
Q:为什么我认证失败?
A:从你的命令行看来:你用的是
> bash$ rsync -a 144.16.251.213::test test
> Password:
> @ERROR: auth failed on module test
>
> I dont understand this. Can somebody explain as to how to acomplish this.
> All suggestions are welcome.
应该是没有以你的用户名登陆导致的问题,试试rsync -a max@144.16.251.213::test test
Q: 出现以下这个讯息, 是怎么一回事?
@ERROR: auth failed on module xxxxx
rsync: connection unexpectedly closed (90 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
A: 这是因为密码设错了, 无法登入成功, 请再检查一下 rsyncd.secrets 中的密码设定, 二端是否一致?
Q: 出现以下这个讯息, 是怎么一回事?
password file must not be other-accessible
continuing without password file
Password:
A: 这表示 rsyncd.secrets 的档案权限属性不对, 应设为 600。请下 chmod 600 rsyncd.secrets
Q: 出现以下这个讯息, 是怎么一回事?
@ERROR: chroot failed
rsync: connection unexpectedly closed (75 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
A: 这通常是您的 rsyncd.conf 中的 path 路径所设的那个目录并不存在所致.请先用 mkdir开设好备份目录.
完!