Rsync备份全网服务器数据
环境 | 部署rsync安装环境,使用Socket守护进程 使用 yum仓库安装rsync和openssh-clients这两个服务,并关闭两台机器的防火墙,以及挂载光盘。 |
一、服务器rsync配置 | |
1. | [root@centos ~]# vim /etc/rsyncd.conf //创建程序启动的配置文件(在服务器上) (ps:一般程序启动起来,进程名字就是程序名字后加上d,如http进程为httpd) 代码: 解释: |
2. | [root@centos ~]# vim /etc/rsync.password //编写虚拟账号的账号和密码 |
3. | 调整密码文件的权限 不修改权限,实验将失败 |
4. | 创建用户,让其不能登录并没有家目录 [root@centos ~]# useradd -s /sbin/nologin -M rsync //创建程序用户rsync [root@centos ~]# id rsync uid=501(rsync) gid=501(rsync) 组=501(rsync) //查询创建的rsync程序用户 |
5. | 更改/backup目录的属主为rsync程序用户 [root@centos ~]# chown rsync /backup |
6. | 启动脚本 [root@centos ~]# rsync –daemon 当出现以下错误时,将不能正常启动rsync服务 解决措施: 进入/var/run目录,然后删除rsyncd.pid文件 |
7. | 通过端口查看守护进程是否启动 |
二、客户机rsync配置 | |
1. | 在客户机上创建一个rsync.password文件,并写入虚拟账号密码 [root@centos ~]# vim /etc/rsync.password |
2. | 修改文件权限 [root@centos ~]# chmod 600 /etc/rsync.password |
测试 | [root@client ~]# mkdir /backup [root@client backup]# touch {1..5} [root@client ~]# rsync -avzP /backup/ rsync_backup@192.168.200.4::backup --password-file=/etc/rsync.password //客户机免密码推送备份文件测试(P:显示备份过程) Rsync推送成功,服务无问题 |
报错 处理 | 防火墙未关闭,使用service iptables stop关闭防火墙(自己和对方都关闭) |
三、邮件服务配置(服务端) 摘自: | |
环境 | 确保服务端可以上网(ping通baidu)。如果不行,修改DNS设置并重启网卡;或者修改虚拟机网卡配置。 |
1. | 开启QQ邮箱的SMTP,获取授权码 |
*. | 关闭sendmail(可以用which查看是否有这个服务,没有可以不操作) [root@server ~]# service sendmail stop //关闭sendmail服务 [root@server ~]# chkconfig sendmail off //在启动项中关闭sendmail服务 |
2. | [root@server ~]# service postfix start //开启postfix邮件服务 [root@server ~]# chkconfig postfix on //在启动项中,开启postfix服务 [root@server ~]# postfix check //检查postfix服务是否有问题,没提示表示无问题 [root@server ~]# yum -y isntall mysql-libs //安装mysql-libs服务 |
3. | 创建认证 [root@server ~]# mkdir -p /root/.certs/ //创建目录,用于存放证书 [root@server ~]# echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt //向QQ请求证书 [root@server ~]#certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt //添加一个SSL证书到证书数据库中 [root@server ~]#certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt //添加一个Global证书到证书数据库中 [root@server ~]# certutil -L -d /root/.certs //列出目录下的证书 [root@server ~]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt //指明受信任证书、防报错 [root@server ~]# cd /root/.certs |
4. | 配置mail.rc脚本 [root@server ~]# vi /etc/mail.rc //编写邮件脚本 |
测试 | [root@server ~]# echo "hahaaha" | mail -s "title" 2xxxxxxxxx2@qq.com |
也可以使用其他邮箱,不过某些参数需要更改,这里不再一一列出 以上步骤摘自: | |
四、客户端脚本配置 | |
1. | [root@client ~]# sh rsync_client.sh |
解释: | |
代码如下: #!/bin/bash backup_S=192.168.200.4 IP=`ifconfig eth0 | awk -F "[ :]+" 'NR==2{print $4}'` Path=/backup Dir=${IP}_$(date +%F_%w) mkdir -p $Path/$Dir [ -f /var/spool/cron/root ] || mkdir -p /var/spool/cron ; touch /var/spool/cron/root && cp -rp /var/spool/cron/root $Path/$Dir [ -f /etc/rc.d/rc.local ] || mkdir -p /etc/rc.d/ ; touch /etc/rc.d/rc.local && cp -rp /etc/rc.d/rc.local $Path/$Dir [ -f /etc/sysconfig/iptables ] || mkdir -p /etc/sysconfig;touch /etc/sysconfig/iptables && cp -rp /etc/sysconfig/iptables $Path/$Dir [ -d /server/scripts ] || mkdir -p /server/scripts && cp -rp /server/scripts $Path/$Dir [ -d /var/html/www ] || mkdir -p /var/html/www && cp -rp /var/html/www $Path/$Dir [ -d /app/logs ] || mkdir -p /app/logs && cp -rp /app/logs $Path/$Dir cd $Path tar -zcf $Path/${Dir}.tar.gz $Dir rm -rf $Path/$Dir /usr/bin/md5sum $Path/${Dir}.tar.gz > $Path/md5sum_$IP.txt rsync -az $Path/ rsync_backup@$backup_S::backup --password-file=/etc/rsync.password find $Path/ -name "${IP}*" -type f -mtime +7 | xargs rm -rf | |
脚本运行测试 | [root@client ~]# sh rsync_client.sh |
五、服务端脚本配置 | |
1. | [root@server ~]# vim rsync_server.sh //编写服务端脚本配置文件 |
解释: | |
代码如下: #!/bin/bash # 全网服务器备份解决方案_rsync服务器端检查脚本 # author:xiaofa # 2021-1-10 . /etc/init.d/functions Path=/backup fileName="md5sum.txt" rsync_CN=1 /etc/init.d/postfix status $>/dev/null || /etc/init.d/postfix start if [ `find $Path/ -type f -name "md5sum*" | wc -l` -eq $rsync_CN ];then for filepath in `find $Path/ -type f -name "md5sum*"` do /usr/bin/md5sum -c $filepath if [ $? -eq 0 ];then action "${filepath}备份正常!" /bin/true rm -rf $filepath else action "${filepath}备份异常!" /bin/false echo "${filepath}备份异常!"| mail -s "$(date +%F)备份检查警告" 2xxxxxxxxx2@qq.com fi done else echo "Rsync客户端推送不完整!" echo "Rsync推送不完整" | mail -s "$(date +%F)备份推送警告" 2xxxxxxxxx2@qq.com fi find $Path/ ! -name "*_2.tar.gz" -mtime +180 -type f | xargs rm -rf #周一的数据会在周一晚上0点进行备份,所以在周的地方会变成2而不是1 | |
脚本运行测试 | |
六、添加到计划任务 | |
服务器 | [root@server ~]# vim /etc/crontab //进入周期性计划任务配置文件,添加计划任务 |
客户机 | [root@client ~]# vim /etc/crontab //进入周期性计划任务配置文件,添加计划任务 |
至此,配置完毕! | |
#!/bin/bash
#如测试成功,请手动删除 Login模块,并将最后三行的#删除
Login (){
cat << FOF
######################
请输入1,部署nfs备份导入前环境
请输入2,开始打包备份
输入3,退出脚本
######################
FOF
}
Test(){
echo "123456" > /etc/rsync.password
chmod 600 /etc/rsync.password
test -d /backup && rm -rf /backup/* || mkdir /backup
cd /backup && touch {1..5}
rsync -avzP /backup/ rsync_backup@192.168.200.128::backup --password-file=/etc/rsync.password >/dev/null
if [ $? -eq 0 ];then
echo "测试完毕,环境部署成功"
continue
else
echo "请检查rsync配置文件!程序将在3秒后退出"
sleep 1
for i in 3 2 1
do
echo "$i ..."
sleep 1
done
exit
fi
}
Tar(){
Menu=/backup
Test_Server=192.168.200.128
backup_Server=172.16.1.41
local_IP=`/sbin/ifconfig eth1|awk -F"[ :]+" 'NR==2{print $4}'`
File_Name=${local_IP}_$(date +%F_%w)
mkdir -v $Menu/$File_Name
[ -f /var/spool/cron/root ]
if [ $? -eq 0 ];then
cp -p /var/spool/cron/root $Menu/$File_Name/
else
mkdir -p /var/spool/cron/ && \
touch /var/spool/cron/root &&\
cp -p /var/spool/cron/root $Menu/$File_Name
fi
[ -f /etc/rc.d/rc.local ]
if [ $? -eq 0 ];then
cp -p /etc/rc.d/rc.local $Menu/$File_Name/
else
mkdir -p /etc/rc.d/ &&\
touch /etc/rc.d/rc.local &&\
/etc/rc.d/rc.local << FOF
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
FOF
fi
[ -d /server/scripts ]
if [ $? -eq 0 ];then
cp -rp /server/scripts $Menu/$File_Name/
else
mkdir -p /server/scripts && cp -rp /server/scripts $Menu/$File_Name/
fi
[ -d /var/html/www ]
if [ $? -eq 0 ];then
cp -rp /var/html/www $Menu/$File_Name/
else
mkdir -p /var/html/www && cp -rp /var/html/www $Menu/$File_Name/
fi
[ -d /app/logs ]
if [ $? -eq 0 ];then
cp -rp /app/logs $Menu/$File_Name/
else
mkdir -p /app/logs && cp -rp /app/logs $Menu/$File_Name/
fi
[ -f /etc/sysconfig/iptables ]
if [ $? -eq 0 ];then
cp -p /etc/sysconfig/iptables $Menu/$File_Name/
else
mkdir /etc/sysconfig/ &&\
touch /etc/sysconfig/iptables &&\
/etc/sysconfig/iptables << FOF
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
FOF
fi
cd $Menu &&\
tar -zcf $Menu/${File_Name}.tar.gz $File_Name &&\
rm -rf $Menu/${File_Name}
/usr/bin/md5sum $Menu/${File_Name}.tar.gz > $Menu/md5sum_${local_IP}.txt
rsync -az $Menu/ rsync_backup@${Test_Server}::backup --password-file=/etc/rsync.password
find $Menu/ -name "${local_IP}*" -type f -mtime +7 | xargs rm -rf
}
#以下请手动删除
Login
while :
do
read -p "" start
case $start in
1)
Test
;;
2)
Tar
echo "您的脚本已打包备份成功!恭喜"
echo "程序即将退出...";sleep 1
exit
;;
3)
echo "程序即将退出..."
sleep 1
exit
;;
*)
echo "您输入的数字有误,请重新输入"
;;
esac
done
#以上手动删除
#Test
#Tar
#00 0 * * * /bin/sh /server/scripts/rsync_backup.sh >/dev/null 2>&1