为N台linux服务器传输大文件

1.服务端与客户端建立公钥及私钥信任关系。服务端作为原始文件存储地,ansible主机
1.1. 在ansible主机上创建公钥。
ssh-keygen -b 1024 -t rsa
[[email protected] ~]# ssh-keygen -b 1024 -t rsa
Generating public/private rsa key pair. #提示正在生成rsa密钥对
Enter file in which to save the key (/home/usrname/.ssh/id_dsa): #询问公钥和私钥存放的位置,回车用默认位置即可
Enter passphrase (empty for no passphrase): #询问输入私钥密语,输入密语 (这边输入的是2Hbl$qt)
Enter same passphrase again: #再次提示输入密语确认
Your identification has been saved in /home/usrname/.ssh/id_dsa. #提示公钥和私钥已经存放在/root/.ssh/目录下
Your public key has been saved in /home/usrname/.ssh/id_dsa.pub.
The key fingerprint is:
x6:68:xx:93:98:8x:87:95:7x:2x:4x:x9:81:xx:56:94
-b 1024 采用长度为1024字节的公钥/私钥对
-t rsa  采用rsa加密方式的公钥/私钥对
有人说使用登录使用密码短语,登录时还要使用密码短语没有比使用用户名和密码方便多少。其实不然
1.2. 传输公钥到远程主机上,命令:sshpass -p ‘远程主机密码’ [email protected] ssh-copy-id -o StrictHostKeyChecking=no
1.3 如何避免ssh 连接远程主机ip ,输入密码短语呢

(这个一般在云服务器管理中常见,堡垒机到内网主机ssh连接,但是每连一台主机都输入密码短语都比较麻烦,可用以下方式设置)

运行eval命令自动声明环境变量。eval ssh-agent ssh环境变量加入当前会话环境变量。
ssh-add 把专用密钥添加到ssh-agent的高速缓存中。提示输入密码短语,输入即可。
在当前的环境变量中直接ssh就能连接到远程主机。退出当前shell的时候,ssh-agent也退出。下次连接的时候,再次eval即可。

2.相关脚本定义
思路:基于第一步,建立了ansible主机到各个客户端信任关系后,运行tracker服务,生成大文件的.torrent的文件,播种需要分发的文件包,最后在客户端定义下载文件脚本。
2.1 首先定义两个目录 :存放大文件目录/opt/data/ ;定义脚本目录/opt/app/
2.2 修改/opt/app/murder下的seeder.conf配置文件内容。

#大文件
deploy_file=/opt/data/update_v0.27-91-2
#要生成的torrent文件存放地址,放在ansible的相应目录下。
torrent_file=/etc/ansible/roles/update/files/update_v0.27-91-2.torrent
#tracker服务,其他成员依赖tracker
tracker_ip=21.0.0.153:8998
local_ip=21.0.0.153

2.3 /opt/app/murder/murder_tracker.sh 定义,启动。

#/bin/sh
name="murder-tracker"
murder_tracker_bin="/opt/app/murder/murder-master/dist/murder_tracker.py"
murder_tracker_log="/opt/log/murder/murder_tracker.log"
murder_tracker_data="/opt/data/murder/tracker_data"

find_tracker_process(){
  PID=`ps -ef |grep murder_tracker|grep python |grep -v $0|grep -v grep |grep -v sh|awk ‘{print $2}‘`

}
start(){
    LOG_DIR=`dirname $murder_tracker_log`
    DATA_DIR=`dirname $murder_tracker_data`
    if [ ! -d $LOG_DIR ];then
         #echo -e "\e[35mlog dir $LOG_DIR doesn‘t exist,creating\e[0m"
         printf "log dir $LOG_DIR doesn‘t exist,creating...\n"
         mkdir -p $LOG_DIR
    fi
        if [ ! -d $DATA_DIR ];then
             printf "data dir $DATA_DIR doesn‘t exist,creating...\n"
         mkdir -p $DATA_DIR
        fi
        find_tracker_process
    echo $PID
        if [ "$PID" != "" ]; then
         printf  "$name is already running...\n"
    else
          python $murder_tracker_bin > /dev/null 2>&1 &
          printf  "starting $name done....\n"
    fi

}

stop(){
    if [ `netstat -lnpt |grep 8998 |wc -l` -eq 1 ];then
        find_tracker_process
        kill $PID
        printf "stoping $name done...\n"
    else
        printf "$name is already stopping...\n"
    fi
}

restart(){

    stop
    sleep 2
    start
}

case $1 in
start)
        start
        ;;
stop)
        stop
        ;;
restart)
        restart
        ;;
*)
        printf "Usage: $0 {start|stop|restart}\n"
esac

exit

2.4 /opt/app/murder/murder_seeder.sh定义,启动。

#!/bin/sh
name="murder-seeder"
muder_seeder_data="/opt/data/murder"
muder_seeder_log="/opt/log/murder/muder_seeder.log"
murder_make_torrent_bin="/opt/app/murder/murder-master/dist/murder_make_torrent.py"
murder_seeder_bin="/opt/app/murder/murder-master/dist/murder_client.py"
seeder_conf_path="/opt/app/murder/seeder.conf"

deploy_file=$(awk -F= ‘/deploy_file/{print $2}‘ $seeder_conf_path)
torrent_file=$(awk -F= ‘/torrent_file/{print $2}‘ $seeder_conf_path)
tracker_ip=$(awk -F= ‘/tracker_ip/{print $2}‘ $seeder_conf_path)
local_ip=$(awk -F= ‘/local_ip/{print $2}‘ $seeder_conf_path)
#echo $murder_make_torrent_bin  $deploy_file   $tracker_ip  $torrent_file

find_seed_process(){
    PID=`ps -ef |grep murder_client|grep seed |grep -v $0|grep -v grep |grep -v sh|awk ‘{print $2}‘`
}

start(){
    #make torrent
    python $murder_make_torrent_bin  $deploy_file  $tracker_ip   $torrent_file
    #echo $?
        if [ $? != 0 ];then
           python $muder_make_torrent_bin $deploy_file  $tracker_ip   $torrent_file
        fi

    find_seed_process
        #echo $PID
        if [ "$PID" != "" ]; then
               printf  "$name is already running...\n"
        else
           python $murder_seeder_bin seed $torrent_file $deploy_file $local_ip >/dev/null 2>&1 &
               printf  "starting $name done....\n"
        fi
}

stop(){
    find_seed_process
        if [ $PID != "" ];then
            kill $PID
            printf "stoping $name done...\n"
        else
            printf "$name is already stopping...\n"
        fi
}

restart(){

        stop
        sleep 2
        start
}

case $1 in
start)
        start
        ;;
stop)
        stop
        ;;
restart)
        restart
        ;;
*)
        printf "Usage: $0 {start|stop|restart}\n"
esac
exit

2.5

原文地址:https://blog.51cto.com/12191723/2432761

时间: 2024-10-08 07:36:27

为N台linux服务器传输大文件的相关文章

两台Linux服务器之间的文件传输

最近工作中有这样一个需求,需要将A服务器上的文件传到B服务器. 本来想用Java开发,但一想Java开发周期长,应对这样一个小需求没必要用Java,最后选择了Shell脚本,相关代码如下: 1 #!/bin/bash 2 3 function error_exit { 4 echo "$1" 1>&2 5 exit 1 6 } 7 8 # 本地目录(可修改项) 9 sourcePath=/opt/file 11 # 远程服务器IP,端口,目录(可修改项) 12 targe

linux 服务器删除大文件之后不释放存储空间的解决办法

查看磁盘空间使用情况:df -h 查看根目录下,第一层目录所占空间情况:du -h --max-depth=1 / 找出根目录下大于2000M的文件:find / -size +2000M 找出已删除,但是仍被进程占用的文件:lsof |grep deleted 根据上一步查出来的进程id来查看进程信息:ps -ef | grep pid 重启进程的服务:使用 kill -9 pid 命令停止进程. 之后,磁盘空间得到释放.

在生产环境下使用生成器像服务器传输大文件

废话不多说,直接上代码 1 # -*- coding: utf-8 -*- 2 # Created by richie at 2018/10/23 3 import os 4 import sys 5 6 _ver = sys.version_info 7 8 #: Python 2.x? 9 is_py2 = (_ver[0] == 2) 10 11 #: Python 3.x? 12 is_py3 = (_ver[0] == 3) 13 14 import httplib 15 import

服务器间大文件传输

前言在管理mysql,初始化服务器.复制和备份/还原,跨网络的传输大文件是很常见的操作.1.基本的操作 ● 压缩大文件 ● 发送到另一台服务器上 ● 解压大文件 ● 校验文件的完整性,是否有损坏2.具体的操作     (1)一般的步骤(scp)server1:gzip   -c   /backup/mysql/mytable.MYD     > mytable.MYD.gzscp    mytable.MYD.gz    [email protected]: /var/lib/mysql/ser

使用Python之paramiko模块和threading实现多线程登录多台Linux服务器

有时候我们需要在多台Linux服务器上面执行同样的命令,或者同样的操作,如果我们每一台单独登录上去做这样太麻烦了,所以我们可以考虑使用自动化脚本来实现.我这里使用Python多线程的方式,这样速度更快,如果使用Shell只能一台完了执行另外一台效率不高. 针对这样的需要写了一个Python脚本来完成这样的工作,大致实现了我需要的效果 实现代码: #!/usr/bin/python #*-*coding:utf8*-* """ 此脚本适用于批量登录到Linux操作系统,并执行一

C# Socket传输大文件

1.基础类TransferFiles,client和server都需要 using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.Windows.Forms; namespace Server { public class TransferFiles { public static int SendData(

scp 将数据从一台linux服务器复制到另一台linux服务器

原文地址:http://www.cnblogs.com/peida/archive/2013/03/15/2960802.html  完整内容参考原文! scp 是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且 scp传输是加密的.可能会稍微影响一下速度.当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来.另 外,scp还非常不占资源,不会提高多少系统负荷,在这一点上

Linux服务器删除乱码文件和文件夹的方法

Linux服务器删除乱码文件和文件夹的方法 首页进入乱码文件所在文件夹由于php大势所趋,所以接触Linux服务器的机会越来越多.不同于Windows服务器,Linux服务器只支持数字.英文等字符,对中文字符没办法识别.所以导致我们打包上传文件解压之后出现中文乱码文件和文件夹.网上有很多解决的办法,但是今天亲测用find命令能快速删除乱码的文件和文件夹,所以跟大家分享一下. 使用ls -i命令找到文件或文件夹的节点编号 前面的就是节点号了,接下来使用find命令查询并且删除 -inum指根据节点

Linux如何查找大文件或目录总结(转)

在Windows系统中,我们可以使用TreeSize工具查找一些大文件或文件夹,非常的方便高效,在Linux系统中,如何去搜索一些比较大的文件呢?下面我整理了一下在Linux系统中如何查找大文件或文件夹的方法. 1: 如何查找大文件? 其实很多时候,你需要了解当前系统下有哪些大文件,比如文件大小超过100M或1G(阀值视具体情况而定).那么如何把这些大文件搜索出来呢?例如我要搜索当前目录下,超过800M大小的文件 [[email protected] u03]# pwd /u03 [[email