# Rsync 服务实践
环境准备
主机名 | IP | 角色 |
---|
server | 192.168.40.101 | rsync 服务端 |
client | 192.168.40.102 | rsync 客户 |
# 1.rsync 服务端
# 1.1 关闭防火墙、selinux
| [root@localhost ~] |
| [root@localhost ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| */5 * * * * /usr/sbin/ntpdate time2.aliyun.com &> /dev/nul |
| [root@backup ~] |
# 1.2 安装 rsync
| [root@backup ~] |
| [root@server ~] |
| [root@server ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
# 1.3 修改配置文件
#生产环境中取消注释,导致备份数据报错
| |
| [root@backup ~] |
| uid = rsync |
| gid = rsync |
| port = 873 |
| fake super = yes |
| use chroot = no |
| max connections = 200 |
| timeout = 600 |
| ignore errors |
| read only = false |
| list = false |
| auth users = rsync_backup |
| secrets file = /etc/rsync.passwd |
| log file = /var/log/rsyncd.log |
| [backup_mysql] |
| comment = welcome to rsync_backup |
| path = /backup/mysql |
| [backup_file] |
| comment = welcome to rsync_backup |
| path = /backup/file |
| |
| |
| [root@backup ~] |
| uid = rsync |
| gid = rsync |
| port = 873 |
| fake super = yes |
| use chroot = no |
| max connections = 200 |
| timeout = 600 |
| ignore errors |
| read only = false |
| list = false |
| auth users = rsync_backup |
| secrets file = /etc/rsync.passwd |
| log file = /var/log/rsyncd.log |
| [backup_mysql] |
| comment = welcome to rsync_backup |
| path = /backup/mysql |
| [backup_file] |
| comment = welcome to rsync_backup |
| path = /backup/file |
# 4. 创建虚拟用户密码文件并设置权限
| [root@backup ~] |
| rsync_backup:your passwd |
| [root@backup ~] |
| [root@backup ~] |
# 5. 检查服务端口是否开启
| [root@backup ~] |
| tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 20357/rsync |
| tcp6 0 0 :::873 :::* LISTEN 20357/rsync |
# 2. rsync 客户端
# 2.1 安装 rsync
# 2.2 配置传输密码
方法 1:将密码写入文件
| [root@db01 ~] |
| [root@db01 ~] |
| your passwd |
| [root@db01 ~] |
| --测试收发数据: |
| [root@db01 ~] |
| sending incremental file list |
| |
| sent 47 bytes received 20 bytes 134.00 bytes/sec |
| total size is 0 speedup is 0.00 |
方法 2:使用密码环境变量 RSYNC_PASSWORD
| [root@db01 ~] |
| --测试收发数据: |
| [root@db01 ~] |
| sending incremental file list |
| |
| sent 47 bytes received 20 bytes 134.00 bytes/sec |
| total size is 0 speedup is 0.00 |
# Rsync 企业级备份案例
环境准备
主机名 | IP | 角色 |
---|
server | 192.168.40.101 | rsync 服务端 |
client | 192.168.40.102 | rsync 客户 |
客户端需求
- 客户端每天凌晨 3 点备份 MySQL 至 /backup 下以 "主机名_IP 地址_当前时间命名" 的目录中
- 客户端推送 /backup 目录下数据备份目录至 Rsync 备份服务器
- 客户端只保留最近七天的备份数据,避免浪费磁盘空间
服务端需求
- 服务端部署 rsync 服务,用于接收用户的备份数据
- 服务端每天校验客户端推送过来的数据是否完整,并将结果以邮件的方式发送给管理员
- 服务端仅保留 6 个月的备份数据
注意:所有服务器的备份目录均为 /backup,所有脚本存放目录均为 /scripts。
# 1. 服务端部署 rsync 服务
# 1.1 关闭防火墙、selinux
| [root@localhost ~] |
| [root@localhost ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| */5 * * * * /usr/sbin/ntpdate time2.aliyun.com &> /dev/nul |
| [root@backup ~] |
# 1.2 安装 rsync
| [root@backup ~] |
| [root@server ~] |
| [root@server ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
# 1.3 修改配置文件
#生产环境中取消注释,导致备份数据报错
| |
| [root@backup ~] |
| uid = rsync |
| gid = rsync |
| port = 873 |
| fake super = yes |
| use chroot = no |
| max connections = 200 |
| timeout = 600 |
| ignore errors |
| read only = false |
| list = false |
| auth users = rsync_backup |
| secrets file = /etc/rsync.passwd |
| log file = /var/log/rsyncd.log |
| [backup_mysql] |
| comment = welcome to rsync_backup |
| path = /backup/mysql |
| [backup_file] |
| comment = welcome to rsync_backup |
| path = /backup/file |
| |
| |
| [root@backup ~] |
| uid = rsync |
| gid = rsync |
| port = 873 |
| fake super = yes |
| use chroot = no |
| max connections = 200 |
| timeout = 600 |
| ignore errors |
| read only = false |
| list = false |
| auth users = rsync_backup |
| secrets file = /etc/rsync.passwd |
| log file = /var/log/rsyncd.log |
| [backup_mysql] |
| comment = welcome to rsync_backup |
| path = /backup/mysql |
| [backup_file] |
| comment = welcome to rsync_backup |
| path = /backup/file |
# 4. 创建虚拟用户密码文件并设置权限
| [root@backup ~] |
| rsync_backup:your passwd |
| [root@backup ~] |
| [root@backup ~] |
# 5. 检查服务端口是否开启
| [root@backup ~] |
| tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 20357/rsync |
| tcp6 0 0 :::873 :::* LISTEN 20357/rsync |
# 2. rsync 客户端
# 2.1 安装 rsync
# 2.2 测试客户端备份数据并推送至 rsync 服务器
| [root@db01 ~] |
| [root@db01 ~] |
# 2.3 客户端备份数据并推送至 rsync 服务器
| [root@db01 ~] |
| [root@db01 ~] |
| |
| export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin |
| |
| |
| Host=$(hostname) |
| Ip=$(ifconfig ens192 | awk 'NR==2{print $2}') |
| Date=$(date +%F) |
| BackupDir=/backup/mysql |
| Dest=${BackupDir}/${Host}_${Ip}_${Date} |
| FILE_NAME=mysql_backup_`date '+%Y%m%d%H%M%S'`; |
| OLDBINLOG=/var/lib/mysql/oldbinlog |
| |
| |
| if [ ! -d $Dest ];then |
| mkdir -p $Dest |
| fi |
| |
| |
| /usr/bin/mysqldump -u'root' -p'your passwd' nf_flms > $Dest/nf-flms_${FILE_NAME}.sql |
| tar -czvf $Dest/${FILE_NAME}.tar.gz $Dest/nf-flms_${FILE_NAME}.sql |
| rm -rf $Dest/*${FILE_NAME}.sql |
| echo "Your database backup successfully" |
| |
| |
| md5sum $Dest/* >$Dest/backup_check_$Date |
| |
| |
| Rsync_Ip=192.168.1.145 |
| Rsync_user=rsync_backup |
| Rsync_Module=backup_mysql |
| export RSYNC_PASSWORD=your passwd |
| rsync -avz $Dest $Rsync_user@$Rsync_Ip::$Rsync_Module |
| |
| |
| find $Dest -type d -mtime +15 | xargs rm -rf |
| echo "remove file successfully" |
| |
| [root@db01 ~] |
| [root@db01 ~] |
| 00 03 * * * /bin/bash /scripts/mysql_backup.sh &> /dev/null |
# 2.4 服务端校验数据并将结果以邮件发送给管理员
# 2.4.1 配置邮件服务
| [root@backup ~] |
| [root@backup ~] |
| set from=373370405@qq.com |
| set smtp=smtps://smtp.qq.com:465 |
| set smtp-auth-user=373370405@qq.com |
| set smtp-auth-password=********** |
| set smtp-auth=login |
| set ssl-verify=ignore |
| set nss-config-dir=/etc/pki/nssdb |
# 2.4.2 发送邮件测试
# 2.4.3 配置脚本校验数据并将结果发送给管理员
| [root@backup mysql] |
| |
| export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin |
| |
| |
| Path=/backup/mysql |
| Date=$(date +%F) |
| |
| |
| find $Path -type f -name "backup_check_${Date}*"|xargs md5sum -c >$Path/result_${Date} |
| |
| |
| mail -s "Mysql Backup" 373370405@qq.com <$Path/result_${Date} &> /dev/null |
| |
| |
| find $Path -type f -name "result*" -mtime +7 | xargs rm -rf |
| find $Path -type f -mtime +180 | xargs rm -rf |
# 2.4.4 写计划任务
| [root@backup ~] |
| [root@db01 ~] |
| 00 06 * * * /bin/bash /scripts/mysql_backup.sh &> /dev/null |
# Rsync+sersync 实现数据实时同步
环境准备
主机名 | IP | 角色 |
---|
server | 192.168.40.101 | rsync 服务端 |
client | 192.168.40.102 | rsync 客户 |
# 1.rsync 服务端
# 1.1 关闭防火墙、selinux
| [root@localhost ~] |
| [root@localhost ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
| */5 * * * * /usr/sbin/ntpdate time2.aliyun.com &> /dev/nul |
| [root@backup ~] |
# 1.2 安装 rsync
| [root@backup ~] |
| [root@server ~] |
| [root@server ~] |
| [root@backup ~] |
| [root@backup ~] |
| [root@backup ~] |
# 1.3 修改配置文件
#生产环境中取消注释,导致备份数据报错
| |
| [root@backup ~] |
| uid = rsync |
| gid = rsync |
| port = 873 |
| fake super = yes |
| use chroot = no |
| max connections = 200 |
| timeout = 600 |
| ignore errors |
| read only = false |
| list = false |
| auth users = rsync_backup |
| secrets file = /etc/rsync.passwd |
| log file = /var/log/rsyncd.log |
| [backup_mysql] |
| comment = welcome to rsync_backup |
| path = /backup/mysql |
| [backup_file] |
| comment = welcome to rsync_backup |
| path = /backup/file |
| |
| |
| [root@backup ~] |
| uid = rsync |
| gid = rsync |
| port = 873 |
| fake super = yes |
| use chroot = no |
| max connections = 200 |
| timeout = 600 |
| ignore errors |
| read only = false |
| list = false |
| auth users = rsync_backup |
| secrets file = /etc/rsync.passwd |
| log file = /var/log/rsyncd.log |
| [backup_mysql] |
| comment = welcome to rsync_backup |
| path = /backup/mysql |
| [backup_file] |
| comment = welcome to rsync_backup |
| path = /backup/file |
# 4. 创建虚拟用户密码文件并设置权限
| [root@backup ~] |
| rsync_backup:your passwd |
| [root@backup ~] |
| [root@backup ~] |
# 5. 检查服务端口是否开启
| [root@backup ~] |
| tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 20357/rsync |
| tcp6 0 0 :::873 :::* LISTEN 20357/rsync |
# 2. 客户端安装 sersync
2.1 安装 sercync 依赖
2.2 安装 sercync
| [root@nfs ~] |
| [root@nfs ~] |
| [root@nfs ~] |
| [root@nfs soft] |
| [root@nfs soft] |
# 2.3 修改配置文件
| [root@nfs soft] |
| [root@nfs sersync] |
| [root@nfs sersync] |
| ... |
| 5 <fileSystem xfs="true"/> |
| 13 <delete start="true"/> |
| 14 <createFolder start="true"/> |
| 15 <createFile start="false"/> |
| 16 <closeWrite start="true"/> |
| 17 <moveFrom start="true"/> |
| 18 <moveTo start="true"/> |
| 19 <attrib start="true"/> |
| 20 <modify start="true"/> |
| 24 <localpath watch="/data"> |
| 25 <remote ip="192.168.1.145" name="backup_file"/> |
| 30 <commonParams params="-avz"/> |
| 31 <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.passwd"/> |
| ... |
# 2.4 生成密码文件
| [root@nfs sersync] |
| [root@nfs sersync] |
# 2.5 启动 sersync
| [root@nfs sersync] |
| [root@nfs sersync] |
2.5 设置 sersync 开机自启
| [root@qzj_nfs sersync] |
| /usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml |
| [root@qzj_nfs sersync] |
2.6 测试
在客户端 /data 目录增删改目录文件,rsync 服务端数据存放目录变化
2.7 添加脚本监控 sersync 是否正常运行
| [root@nfs sersync] |
| |
| sersync="/usr/local/sersync/sersync2" |
| confxml="/usr/local/sersync/confxml.xml" |
| status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l) |
| if [ $status -eq 0 ]; |
| then |
| $sersync -d -r -o $confxml & |
| else |
| exit 0; |
| fi |
| |
| [root@nfs sersync] |
| [root@nfs sersync] |
| */5 * * * * /usr/bin/sh /scripts/check_sersync.sh &> /dev/null |
补充: 多实例情况
1、配置多个 confxml.xml 文件(比如:www、bbs、blog.... 等等)
2、修改端口、同步路径、模块名称
3、根据不同的需求同步对应的实例文件
/usr/local/sersync/sersync2 -dro /usr/local/sersync/www_confxml.xml
/usr/local/sersync/sersync2 -dro /usr/local/sersync/bbs_confxml.xml