系统环境为centos6和centos7
1、使用netcat工具备份有速度比较快的优点,在备份源和目的机器均安装netcata
yum install nc -y
2、在备份目的机器打开端口和文件等待
root@v61 tmp]# nc -l 9999 > bak1.tgz
文件传输完成后备份源的端口会自动关闭
3、在备份源的机器上面备份文件重定向到备份目的机器
[root@v73 tmp]# tar -zcvf - zabbix_agentd.log | nc 192.168.99.61 9999
4、解压验证数据
[root@v61 tmp]# tar -zxvf bak1.tgz
zabbix_agentd.log
[root@v61 tmp]# head -n 3 zabbix_agentd.log
1868:20191023:175159.085 Starting Zabbix Agent [Zabbix server]. Zabbix 3.4.3 (revision 73588).
1868:20191023:175159.085 **** Enabled features ****
1868:20191023:175159.085 IPv6 support: NO
5、扩展备份的作业,从一个中心节点备份所有的数据
备份脚本如下:
[root@v61 bakdir]# cat t3.sh
#!/bin/bash
bakserverip="192.168.99.61" #备份的服务器
bakdir=/bakdir #备份的目录,全部备份放到此处
function chkport() #检查端口是否被占用的函数
{
lsof -i:$1
}
function returnport() #返回可用的随机端口,netcat将打开这个端口传输备份数据
{
ports=`echo $RANDOM` #生成0-32767的随机端口号,如果已经在使用,则再生成一个,直到生成未使用的端口号
chkport $ports
flag=$?
while [ $flag -ne 1 ]
do
ports=`echo $RANDOM`
chkport $ports
flag=$?
done
echo $ports
}
#将需要备份的IP,用户名,密码,备份路径写在一个文件当中,空格分隔这些字段,一行一个备份源,如果已经做了ssh认证,可以不用密码更加安全一些
cat /bakdir/bakinfo.txt | while read lines
do
ips=`echo $lines|cut -d" " -f1`
uname=`echo $lines|cut -d" " -f2`
pwd=`echo $lines|cut -d" " -f3`
baksourcepath=`echo $lines|cut -d" " -f4`
bakfilename=$ips`echo $baksourcepath | sed 's#\/#.#g'`.`date +"%Y-%m-%d-%H-%M-%S"`.tgz #根据IP路径时间拼接出备份的文件名
cd $bakdir
bakports=`returnport`
nc -l $bakports > $bakfilename & #放后台执行,不会占用终端,导致脚本执行不下去
sleep 3 #等端口先打开,再连接
sshpass -p $pwd ssh -o StrictHostKeyChecking=no -n $uname@$ips "tar -Pzcvf - "$baksourcepath"|nc "$bakserverip" "$bakports
done
记录IP,用户名,密码,备份路径的文本的内容如下:
6、执行效果
[root@v61 bakdir]# sh t3.sh
可以放在crontab当中计划执行