# Rsync 服务实践

环境准备

主机名IP角色
server192.168.40.101rsync 服务端
client192.168.40.102rsync 客户

# 1.rsync 服务端

# 1.1 关闭防火墙、selinux
[root@localhost ~]# hostnamectl set-hostname backup
[root@localhost ~]# bash
[root@backup ~]# hostnamectl set-hostname aizj_lb01
[root@backup ~]# systemctl stop firewalld
[root@backup ~]# systemctl disable firewalld
[root@backup ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
[root@backup ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@backup ~]# yum install net-tools vim tree lrzsz wget unzip dos2unix bash-completion  lsof ntp ntpdate git -y
[root@backup ~]# yum update -y --exclude=kernel* && reboot
[root@backup ~]# echo 'Asia/Shanghai' >/etc/timezone
[root@backup ~]# ntpdate time2.aliyun.com
[root@backup ~]# crontab -e
*/5 * * * * /usr/sbin/ntpdate time2.aliyun.com &> /dev/nul
[root@backup ~]# mkdir /soft /data /scripts /backup
# 1.2 安装 rsync
[root@backup ~]# yum install -y rsync
[root@server ~]# systemctl start rsyncd
[root@server ~]# systemctl enable rsyncd
[root@backup ~]# useradd -M -s /sbin/nologin rsync
[root@backup ~]# mkdir -p /backup/mysql  /backup/file
[root@backup ~]# chown -R rsync.rsync /backup/mysql /backup/file
# 1.3 修改配置文件

#生产环境中取消注释,导致备份数据报错

#带注释配置文件
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync             #运行服务的用户
gid = rsync             #运行服务的组
port = 873              #服务监听端口
fake super = yes        #服务无需使用 root 用户身份,即可接收文件的完整属性
use chroot = no         #禁锢目录,不允许获取 root 权限
max connections = 200   #最大连接数,最多能有多少个客户端跟服务端的 873 端口建立连接
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 ~]# cat /etc/rsyncd.conf
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 ~]# cat /etc/rsync.passwd
rsync_backup:your passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd
[root@backup ~]# systemctl restart rsyncd && systemctl status rsyncd
# 5. 检查服务端口是否开启
[root@backup ~]# netstat -lntp | grep "rsync"
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
[root@db01 ~]# yum install nfs-utils -y
# 2.2 配置传输密码

方法 1:将密码写入文件

[root@db01 ~]#  echo 'your passwd' > /etc/rsync.pass
[root@db01 ~]# cat /etc/rsync.pass 
your passwd
[root@db01 ~]# chmod 600 /etc/rsync.pass
--测试收发数据:
[root@db01 ~]# rsync -avz --password-file=/etc/rsync.pass /root/test rsync_backup@192.168.40.101::backup_file
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 ~]# export RSYNC_PASSWORD='your passwd'
--测试收发数据:
[root@db01 ~]# rsync -avz /root/test rsync_backup@192.168.40.101::backup_file
sending incremental file list
sent 47 bytes  received 20 bytes  134.00 bytes/sec
total size is 0  speedup is 0.00

# Rsync 企业级备份案例

环境准备

主机名IP角色
server192.168.40.101rsync 服务端
client192.168.40.102rsync 客户

客户端需求

  • 客户端每天凌晨 3 点备份 MySQL 至 /backup 下以 "主机名_IP 地址_当前时间命名" 的目录中
  • 客户端推送 /backup 目录下数据备份目录至 Rsync 备份服务器
  • 客户端只保留最近七天的备份数据,避免浪费磁盘空间

服务端需求

  • 服务端部署 rsync 服务,用于接收用户的备份数据
  • 服务端每天校验客户端推送过来的数据是否完整,并将结果以邮件的方式发送给管理员
  • 服务端仅保留 6 个月的备份数据

注意:所有服务器的备份目录均为 /backup,所有脚本存放目录均为 /scripts。

# 1. 服务端部署 rsync 服务

# 1.1 关闭防火墙、selinux
[root@localhost ~]# hostnamectl set-hostname backup
[root@localhost ~]# bash
[root@backup ~]# hostnamectl set-hostname aizj_lb01
[root@backup ~]# systemctl stop firewalld
[root@backup ~]# systemctl disable firewalld
[root@backup ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
[root@backup ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@backup ~]# yum install net-tools vim tree lrzsz wget unzip dos2unix bash-completion  lsof ntp ntpdate git -y
[root@backup ~]# yum update -y --exclude=kernel* && reboot
[root@backup ~]# echo 'Asia/Shanghai' >/etc/timezone
[root@backup ~]# ntpdate time2.aliyun.com
[root@backup ~]# crontab -e
*/5 * * * * /usr/sbin/ntpdate time2.aliyun.com &> /dev/nul
[root@backup ~]# mkdir /soft /data /scripts /backup
# 1.2 安装 rsync
[root@backup ~]# yum install -y rsync
[root@server ~]# systemctl start rsyncd
[root@server ~]# systemctl enable rsyncd
[root@backup ~]# useradd -M -s /sbin/nologin rsync
[root@backup ~]# mkdir -p /backup/mysql  /backup/file
[root@backup ~]# chown -R rsync.rsync /backup/mysql /backup/file
# 1.3 修改配置文件

#生产环境中取消注释,导致备份数据报错

#带注释配置文件
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync             #运行服务的用户
gid = rsync             #运行服务的组
port = 873              #服务监听端口
fake super = yes        #服务无需使用 root 用户身份,即可接收文件的完整属性
use chroot = no         #禁锢目录,不允许获取 root 权限
max connections = 200   #最大连接数,最多能有多少个客户端跟服务端的 873 端口建立连接
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 ~]# cat /etc/rsyncd.conf
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 ~]# cat /etc/rsync.passwd
rsync_backup:your passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd
[root@backup ~]# systemctl restart rsyncd && systemctl status rsyncd
# 5. 检查服务端口是否开启
[root@backup ~]# netstat -lntp | grep "rsync"
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
[root@db01 ~]# yum install nfs-utils -y
# 2.2 测试客户端备份数据并推送至 rsync 服务器
[root@db01 ~]# export RSYNC_PASSWORD='your passwd'
[root@db01 ~]# rsync -avz /root/test rsync_backup@192.168.40.101::backup_file
# 2.3 客户端备份数据并推送至 rsync 服务器
[root@db01 ~]# mkdir /scripts
[root@db01 ~]# cat /scripts/mysql_backup.sh 
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#1、定义变量
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
#2、创建备份目录
if [ ! -d $Dest ];then
  mkdir -p $Dest
fi
#3、备份目录
/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"
#4、校验
md5sum $Dest/* >$Dest/backup_check_$Date
#5、将备份目录推动到 rsync 服务端
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
#6、删除 15 天备份目录
find $Dest -type d -mtime +15 | xargs rm -rf
echo "remove file  successfully"
[root@db01 ~]# chmod +x /scripts/etc_backup.sh
[root@db01 ~]# crontab -e
00 03 * * * /bin/bash /scripts/mysql_backup.sh &> /dev/null
# 2.4 服务端校验数据并将结果以邮件发送给管理员
# 2.4.1 配置邮件服务
[root@backup ~]# yum -y install mailx
[root@backup ~]# cat /etc/mail.rc      #最后一行插入
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 发送邮件测试
[root@backup ~]#  echo Hello World | mail -s test 373370405@qq.com &> /dev/null
# 2.4.3 配置脚本校验数据并将结果发送给管理员
[root@backup mysql]# cat /scripts/check_backup.sh 
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#1、定义变量
Path=/backup/mysql
Date=$(date +%F)
#2、查看 flag 文件,并对对文件进行校验,然后将校验的结果保存至 result_时间
find $Path -type f -name "backup_check_${Date}*"|xargs md5sum -c >$Path/result_${Date}
#3、将校验结果发送邮件给管理员
mail -s "Mysql Backup" 373370405@qq.com <$Path/result_${Date} &> /dev/null
#4、删除超过 7 天的校验结果文件,删除超过 180 天的备份数据文件
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 ~]# chmod +x /scripts/check_backup.sh 
[root@db01 ~]# crontab -e
00 06 * * * /bin/bash /scripts/mysql_backup.sh &> /dev/null

# Rsync+sersync 实现数据实时同步

环境准备

主机名IP角色
server192.168.40.101rsync 服务端
client192.168.40.102rsync 客户

# 1.rsync 服务端

# 1.1 关闭防火墙、selinux
[root@localhost ~]# hostnamectl set-hostname backup
[root@localhost ~]# bash
[root@backup ~]# hostnamectl set-hostname aizj_lb01
[root@backup ~]# systemctl stop firewalld
[root@backup ~]# systemctl disable firewalld
[root@backup ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
[root@backup ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@backup ~]# yum install net-tools vim tree lrzsz wget unzip dos2unix bash-completion  lsof ntp ntpdate git -y
[root@backup ~]# yum update -y --exclude=kernel* && reboot
[root@backup ~]# echo 'Asia/Shanghai' >/etc/timezone
[root@backup ~]# ntpdate time2.aliyun.com
[root@backup ~]# crontab -e
*/5 * * * * /usr/sbin/ntpdate time2.aliyun.com &> /dev/nul
[root@backup ~]# mkdir /soft /data /scripts /backup
# 1.2 安装 rsync
[root@backup ~]# yum install -y rsync
[root@server ~]# systemctl start rsyncd
[root@server ~]# systemctl enable rsyncd
[root@backup ~]# useradd -M -s /sbin/nologin rsync
[root@backup ~]# mkdir -p /backup/mysql  /backup/file
[root@backup ~]# chown -R rsync.rsync /backup/mysql /backup/file
# 1.3 修改配置文件

#生产环境中取消注释,导致备份数据报错

#带注释配置文件
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync             #运行服务的用户
gid = rsync             #运行服务的组
port = 873              #服务监听端口
fake super = yes        #服务无需使用 root 用户身份,即可接收文件的完整属性
use chroot = no         #禁锢目录,不允许获取 root 权限
max connections = 200   #最大连接数,最多能有多少个客户端跟服务端的 873 端口建立连接
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 ~]# cat /etc/rsyncd.conf
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 ~]# cat /etc/rsync.passwd
rsync_backup:your passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd
[root@backup ~]# systemctl restart rsyncd && systemctl status rsyncd
# 5. 检查服务端口是否开启
[root@backup ~]# netstat -lntp | grep "rsync"
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 依赖

[root@nfs ~]# yum install -y inotify-tools rsync

2.2 安装 sercync

[root@nfs ~]# mkdir -p /soft
[root@nfs ~]# cd /soft/
[root@nfs ~]# wget https://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@nfs soft]# tar -xf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@nfs soft]# mv GNU-Linux-x86 /usr/local/sersync
# 2.3 修改配置文件
[root@nfs soft]# cd /usr/local/sersync/
[root@nfs sersync]# cp confxml.xml confxml.xml.bak
[root@nfs sersync]# vim confxml.xml
...
5    <fileSystem xfs="true"/>    #第 5 行 false 改为 true
13          <delete start="true"/> #第 13-20 行 false 改为 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"/>  #rsync 服务端 IP 和模块名 backup_file
30      <commonParams params="-avz"/>  #rsync 命令选项
31      <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.passwd"/> #rsync 认证信息
...
# 2.4 生成密码文件
[root@nfs sersync]# echo 'your passwd' > /etc/rsync.passwd
[root@nfs sersync]# chmod 600 /etc/rsync.passwd
# 2.5 启动 sersync
[root@nfs sersync]# ln -s /usr/local/sersync/sersync2 /usr/bin/
[root@nfs sersync]# sersync2 -dro /usr/local/sersync/confxml.xml     #针对配置文件 confxml.xml 启动 sersync

2.5 设置 sersync 开机自启

[root@qzj_nfs sersync]# vim /etc/rc.d/rc.local   
/usr/local/sersync/sersync2 -d -r -o  /usr/local/sersync/confxml.xml  #在最后添加一行
[root@qzj_nfs sersync]# chmod +x /etc/rc.d/rc.local

2.6 测试

在客户端 /data 目录增删改目录文件,rsync 服务端数据存放目录变化

[root@backup backup]# watch ls

2.7 添加脚本监控 sersync 是否正常运行

[root@nfs sersync]# cat /scripts/check_sersync.sh 
#!/bin/sh
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]# chmod +x /scripts/check_sersync.sh
[root@nfs sersync]# crontab -l
*/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

此文章已被阅读次数:正在加载...更新于

请我喝[茶]~( ̄▽ ̄)~*

Xu Yong 微信支付

微信支付

Xu Yong 支付宝

支付宝