Rsync备份全网服务器数据

环境

部署rsync安装环境,使用Socket守护进程

使用 yum仓库安装rsync和openssh-clients这两个服务,并关闭两台机器的防火墙,以及挂载光盘。

rsync 查看密码 rsync如何指定账号和密码_服务器

一、服务器rsync配置

1.

[root@centos ~]# vim /etc/rsyncd.conf

//创建程序启动的配置文件(在服务器上)

(ps:一般程序启动起来,进程名字就是程序名字后加上d,如http进程为httpd

代码:

rsync 查看密码 rsync如何指定账号和密码_IP_02

解释:

rsync 查看密码 rsync如何指定账号和密码_IP_03

rsync 查看密码 rsync如何指定账号和密码_rsync 查看密码_04

2.

[root@centos ~]# vim /etc/rsync.password

//编写虚拟账号的账号和密码

rsync 查看密码 rsync如何指定账号和密码_IP_05

3.

调整密码文件的权限

rsync 查看密码 rsync如何指定账号和密码_服务器_06

不修改权限,实验将失败

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服务

rsync 查看密码 rsync如何指定账号和密码_IP_07

解决措施:

进入/var/run目录,然后删除rsyncd.pid文件

rsync 查看密码 rsync如何指定账号和密码_linux_08


7.

通过端口查看守护进程是否启动

rsync 查看密码 rsync如何指定账号和密码_IP_09



二、客户机rsync配置

1.

在客户机上创建一个rsync.password文件,并写入虚拟账号密码

[root@centos ~]# vim /etc/rsync.password

rsync 查看密码 rsync如何指定账号和密码_rsync 查看密码_10

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 查看密码 rsync如何指定账号和密码_rsync 查看密码_11

Rsync推送成功,服务无问题

报错

处理

rsync 查看密码 rsync如何指定账号和密码_rsync 查看密码_12

防火墙未关闭,使用service iptables stop关闭防火墙(自己和对方都关闭)



三、邮件服务配置(服务端)

摘自:


环境

确保服务端可以上网(ping通baidu)。如果不行,修改DNS设置并重启网卡;或者修改虚拟机网卡配置。

1.

开启QQ邮箱的SMTP,获取授权码

rsync 查看密码 rsync如何指定账号和密码_rsync 查看密码_13

*.

关闭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

rsync 查看密码 rsync如何指定账号和密码_centos_14

4.

配置mail.rc脚本

[root@server ~]# vi /etc/mail.rc

//编写邮件脚本

rsync 查看密码 rsync如何指定账号和密码_服务器_15

测试

[root@server ~]# echo "hahaaha" | mail -s "title" 2xxxxxxxxx2@qq.com

rsync 查看密码 rsync如何指定账号和密码_centos_16


也可以使用其他邮箱,不过某些参数需要更改,这里不再一一列出

以上步骤摘自:




四、客户端脚本配置

1.

[root@client ~]# sh rsync_client.sh

rsync 查看密码 rsync如何指定账号和密码_服务器_17

解释:

rsync 查看密码 rsync如何指定账号和密码_centos_18

rsync 查看密码 rsync如何指定账号和密码_centos_19

rsync 查看密码 rsync如何指定账号和密码_centos_20

代码如下:

#!/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

rsync 查看密码 rsync如何指定账号和密码_centos_21

rsync 查看密码 rsync如何指定账号和密码_服务器_22



五、服务端脚本配置

1.

[root@server ~]# vim rsync_server.sh

//编写服务端脚本配置文件

rsync 查看密码 rsync如何指定账号和密码_linux_23

解释:

rsync 查看密码 rsync如何指定账号和密码_rsync 查看密码_24

rsync 查看密码 rsync如何指定账号和密码_IP_25


代码如下:

#!/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

脚本运行测试

rsync 查看密码 rsync如何指定账号和密码_IP_26



六、添加到计划任务

服务器

[root@server ~]# vim /etc/crontab

//进入周期性计划任务配置文件,添加计划任务

rsync 查看密码 rsync如何指定账号和密码_rsync 查看密码_27

客户机

[root@client ~]# vim /etc/crontab

//进入周期性计划任务配置文件,添加计划任务

rsync 查看密码 rsync如何指定账号和密码_IP_28

至此,配置完毕!


#!/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