无忧启动论坛
标题: 利用BitTorrent-P2P进行内网下批量同传部署系统【07-07晚更新】 [打印本页]
作者: xxkknn 时间: 2020-7-6 20:28
标题: 利用BitTorrent-P2P进行内网下批量同传部署系统【07-07晚更新】
本帖最后由 xxkknn 于 2021-1-18 21:26 编辑
【2020-07-07更新】加入几个针对Windows自动化部署的脚本参考,以及正文加入一个比喻方便理解
【2020-07-07晚再更新】发现部分脚本代码不齐,现在补上了
【2021-01-18更新】补全了被吞的符号+疏漏的内容,修改了一些谬误
我最初对这种技术毫无兴趣,直到某次出差去到某场地部署50台服务器,全百兆内网环境,传统PXE完全玩不转,光是装系统和软件就折腾了整个白天,完事人像一滩淤泥一样,非常人性化;
回来以后痛腚思痛,四处寻求解决办法,最终在本论坛大佬@
江南一根葱 的启发下,找到了适合自己的解决方案:即——
利用BitTorrent协议进行P2P同传,借此达到去中心化,消除系统部署时对PXE服务器带宽性能的高度依赖,怎么做到的呢?
首先BT协议需要[文件发布者]根据[要发布的文件]生成一个[种子],下载时客户端根据种子里提供的信息向tracker服务器发送请求,tracker服务器会管理并且分发各个客户端的下载信息,让客户端之间可以相互了解各自的下载详情,并且互相分享各自下载好的部分,充分利用局域网中每一个客户端的带宽;初次分发某个文件时需要服务端做种,等BT服务端的分享率达到1.0+之后,服务端就可以停止做种让其它客户端之间自行传输,这样腾出带宽可以给PXE服务使用;
需要注意一点,P2P传输几乎能跑满所有参与的端口带宽,网络设备可靠性不佳的话慎用
打个比方:将批量下载的行为比作老师分发试卷,传统的Server to client下载就像是老师一个人挨个往下发或者集体上来领,不管需求有多大,一个人一双手能承担的量终究有限,就像服务器的宽带一样;
而P2P式的传输就像老师把试卷全部交给学生,由学生自行扩散传递,充分利用每一双手的同时,老师也可以腾出时间去做其它工作;而且与试卷不同的是,只要不停止做种,数据就可以不断重复地向不同的客户端分享,传输效率极高;
否则的话,以单服务器百兆网12.5MB/S的速率,7G左右的系统+软件包每个客户端就需要传输10分钟左右,仅仅50台机器就要耗费近9个小时,这样的效率实在是太低了;而且即便是千兆环境下,机器多的时候也很容易陷入服务器网络带宽的瓶颈;借用此方案能很大程度改善这个问题,而且实施起来也不难;
接下来进入正篇
需要的工具
以上两者可以用其它同类工具代替,剩下的工具请自行查找;建议搭配HFS使用。
运作过程:客户端PXE网启至PE之后运行批处理,在批处理中利用diskpart分区之后调用Aria2c.exe下载镜像,下载完成之后调用CGI或者imagex、ghost应用镜像
搭建过程:制作torrent种子文件,搭建并启用tracker服务,做种,在PE中放入aria2c、bat脚本并将脚本加入自启动;其实说起来复杂做起来简单,看下面几张截图就明白了
打开选项
注意:图片中有错误,不要勾选“超级做种”,改用其它同类软件时也不要启用相似选项,此选项是为了延长客户端在线时间保持健康度的,勾选此项后会降低客户端下载速度
调用Aria2的bat代码参考
C:\aria2\aria2c.exe C:\种子.torrent--seed-ratio=0 --force-save=true --dir=C:\
主程序 种子路径 参数
Aria2C常用参数:
- --seed-time 做种的持续时间(分钟),为0即不做种,下载完成即执行下一行
- --seed-ratio 分享率,为1则上传量达到100%后停止做种,0则一直做种,在批处理中做种会阻塞执行,在完成之前不会执行下一行代码
- --force-save 保存会话,即便在下载完成后也不删除会话文件,再次启动任务时就不会重新下载而直接进入做种阶段
- --dir 指定保存目录
其它参数可以参考之前提供的官方网站
自行编写批处理时,推荐调用带会话的下载,在下载完成后,再以非阻塞方式调用一次带会话的下载,此时由于会话中保存了已下载完成的信息,本次调用会直接进行上传做种,这样可保证其它客户端的下载速度的同时不阻塞脚本后续的操作;具体可参考7-7更新的批处理PEdownload.bat
补充一点点,现在唯一的缺憾就是PXE阶段不能P2P了,如果连带这块也实现了的话 才算圆满解决差网络环境下的批量部署问题,如果有人知道怎样实现或者有方向的话,希望可以帮忙分享一下或者指个路,感激不尽
【7-7更新部分批处理参考】
PE中调用
- @echo off
- mode con cols=45 lines=10
- cls&&echo 正在查找默认DHCP服务器...
- ping 127.0 -n 6 >nul
- :re
- ping 127.0 -n 3 >nul
- for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|findstr /ic:"DHCP 服务器"') do set ipgate=%%a
- if not defined ipgate goto:re
- set "ipgate=%ipgate: =%"
- echo 默认DHCP服务器:[%ipgate%]
- ::download
- X:\aria2\aria2c.exe "http://%ipgate%/Files/PEdownload.bat" --dir=X:\
- call X:\PEdownload.bat
- exit
复制代码 PEdownload.bat
- ::下载并应用分区脚本
- X:\aria2\aria2c.exe "http://%ipgate%/Files/diskpartMbr.txt" --dir=X:\
- diskpart /s X:\diskpartMbr.txt >NUL 2>NUL
- :re
- ping 127.0.1 -n 3 >nul
- if not exist "C:" (goto:re)
- md C:\Aria2\ && md C:\Windows\
- copy X:\Aria2\aria2c.exe C:\Aria2\
- ::下载种子
- C:\aria2\aria2c.exe "http://%ipgate%/Files/PEFiles.torrent" --dir=C:\ --follow-torrent=false
- ::下载安装系统配置文件
- C:\aria2\aria2c.exe "http://%ipgate%/Files/ISOinstall.ini" --dir=X:\CGI\
- ::下载完成执行下一行
- C:\aria2\aria2c.exe C:\PEFiles.torrent --seed-time=0 --force-save=true --dir=C:\
- ::有选择地下载种子内的文件
- ::C:\aria2\aria2c.exe --select-file=1,2-7 C:\PEFiles.torrent --seed-time=0 --force-save=true --dir=C:\
- ::开始持续做种
- start /min "Seedling" "C:\aria2\aria2c.exe" C:\PEFiles.torrent --seed-ratio=0 --force-save=true --dir=C:\
- echo start /min "Seedling" "C:\aria2\aria2c.exe" C:\PEFiles.torrent --seed-ratio=0 --force-save=true --dir=C:\ > C:\Seedling.bat
- ::安装系统
- X:\CGI\CGI-PLUS.exe X:\CGI\ISOinstall.ini
- ::全部安装完成,检测到断网则自动重启以进入Windows,即可以通过拔掉网线&停用网络设备批量控制机器重启
- :start
- color 27
- echo 正在监测网络状态...
- ping -n 4 %ipgate% | findstr /i "TTL" >NUL 2>NUL && goto start
- color 47
- echo 网络中断
- ping -n 4 %ipgate% | findstr /i "TTL" >NUL 2>NUL && goto start
- echo 网络持续中断,准备重启
- ping -n 3 %ipgate% | findstr /i "TTL" >NUL 2>NUL && goto start
- shutdown -r -t 5
- PECMD shut -r
- echo 5秒内重启! 取消请按任意键!
- pause>nul
- shutdown /a
- exit
复制代码 diskpartMBR.txt(慎用!会清空磁盘,数据丢失概不负责)
- select disk 0
- clean
- convert mbr
- create partition primary
- format quick fs=ntfs label="Windows"
- assign letter="C"
- active
- timeout /t 1
- exit
复制代码 ISOinstall.ini(CGI无人值守配置文件,详细用法参考5大原压缩包内的PDF文档)
- [operation]
- action = restore
- silent = 1
- [source]
- C:\Files\10ltsb2016x64lite.iso|\sources\INSTALL.WIM|1
- [destination]
- DriveLetter=system
- [miscellaneous]
- format = 0
- fixboot=auto
- shutdown=0
复制代码
以上批处理请根据所在环境情况自行改动;另外脚本需要findstr,部分PE可能已精简掉,故在附件中额外提供findstr.exe,放入System32即可
-
-
findstr.exe
31 KB, 下载次数: 30, 下载积分: 无忧币 -2
作者: bfgxp 时间: 2020-7-6 20:53
之前一直用utorrent分发大文件,也是支持命令行的。
Aria2 看起来也不错,下次用用。
作者: bfgxp 时间: 2020-7-6 20:54
对于同一个子网的话,不用tracker服务器也可以。
作者: liuy03 时间: 2020-7-6 20:57
楼主强!
本人只用过傲梅轻松备份的网刻系统。
作者: wjguowei 时间: 2020-7-6 21:56
感谢楼主热心分享!
作者: xxkknn 时间: 2020-7-6 22:57
理论上是可以,但我这边第一次测试没有成功,可能是路由那边做了什么限制,这玩意是我上司设置的,他是带证的专业网管,这方面我是完全不懂
作者: xxkknn 时间: 2020-7-6 23:29
本帖最后由 xxkknn 于 2020-7-7 15:58 编辑
Aria2真的是一个很棒的下载工具,但有个坑需要注意一下,配置文件里面的东西尽量只留自己需要的,不然很容易引发奇奇怪怪的问题;
最好最好是像示例那样摒弃配置文件直接用参数,简单又稳妥
作者: dna54001 时间: 2020-7-7 00:10
感谢楼主热心分享!
作者: 77888 时间: 2020-7-7 06:28
好高深的样子,小菜鸟看得一头雾水啊
作者: 江南一根葱 时间: 2020-7-7 08:46
现在不是有微力 试过了可以弄
作者: 2012huguoliang 时间: 2020-7-7 09:44
上教程 上成品呀
作者: caocaofff 时间: 2020-7-7 10:58
好,我要借鉴一下
作者: bfgxp 时间: 2020-7-7 12:35
微力有没有修正添加目录的bug
作者: edit009 时间: 2020-7-7 12:54
50台也不是很多了,买5个高速U盘。也就10次,100M网络速度跟本地没得比啊。
作者: 江南一根葱 时间: 2020-7-7 15:22
目前还没有,不过我机房试了下传输方式可行,大文件百兆下最合适的是一传二,二传四,四传八,
小文件可以一起随机传
作者: 江南一根葱 时间: 2020-7-7 15:27
我是直接搞了个批处理p2p.bat
- [url=home.php?mod=space&uid=336905]@echo[/url] off
- set verysync=%~dp0
- set drv=%1
- set path=%2
- set key=%3
- IF NOT EXIST %drv%\%path% md %drv%\%path%
- if exist X:\windows\system32\pecmd.exe X:\windows\system32\pecmd.exe -kill verysync.exe
- echo 微力路径为%verysync%verysy.exe
- echo 要添加的微力盘符是%drv% 相对路径是%path% key是%key%
- echo 跳转到下载目录
- cd /d %drv%
- echo 执行微力添加密钥
- start "" /min "%verysync%verysync.exe" -home %verysync%2020p2p -gui-address :8886 -no-browser
- X:\windows\system32\ping.exe 127.0 -n 10>nul
- echo 准备添加密钥…………
- "%verysync%verysync.exe" -home %verysync%2020p2p -gui-address :8886 -folder-cmd "add /%path%:%key%"
- exit
复制代码
发送命令C:\bat\p2p.bat 盘符 相对路径 密钥
其实我这样延时也不行,还是要抓日志判断有没有侦听完毕,不过也无所谓,发送两次就行了
作者: xxkknn 时间: 2020-7-7 15:50
确实不多,但我这里要考虑几个问题;一是只有我一个人操作;二是老平台服务器没有USB3;三是网启搭配批处理可以免去几乎所有的手动操作,不然太繁琐心累;四是P2P传输下每台机器都有接近满带宽的10M+的速度,机器多起来的话优势就很大了,我得为后面100+的工作量打算
作者: xxkknn 时间: 2020-7-7 15:54
你之前放弃BT方案纯粹就是因为麻烦吗?我感觉微力的方案也不简单多少
作者: qwe 时间: 2020-7-7 16:04
谢谢分享
作者: xxkknn 时间: 2020-7-7 16:08
你的注册时间可真早
我这就是自己搭建了个内网的BT服务器,让客户端之间进行P2P下载,不像传统PXE部署被服务器的网络带宽限制,P2P传输网络中的所有客户端都会提供上传,大家都是使用者的同时也是服务提供者,每个客户端的上行都不会被闲置浪费
作者: jeep2700 时间: 2020-7-7 16:17
可以肯定,我是搞不了的,也只能 顶一下楼主的好贴 得了。
作者: 江南一根葱 时间: 2020-7-7 17:31
是的,不够灵活 ,做种有点麻烦
作者: bfgxp 时间: 2020-7-7 20:32
感谢楼主放出的脚本,学习了。
作者: xhan 时间: 2020-7-8 00:23
谢谢分享
作者: xban 时间: 2020-7-8 00:29
谢谢分享
作者: 江南一根葱 时间: 2020-7-20 13:23
微力新版修正添加目录的bug了
作者: bfgxp 时间: 2020-7-20 16:40
这真是个好消息
作者: q2811121939 时间: 2020-7-30 11:22
一个qbittorrent不就搞定了,高级设置打开内置的tracker,做种子,tracker地址http://ip:9000/announce就行了
具体文档https://github.com/qbittorrent/q ... orrent-as-a-tracker
作者: xxkknn 时间: 2020-7-30 11:39
感谢你的好意,但请仔细看帖
作者: mamer88 时间: 2020-8-12 20:08
信佑p2p网克不就是这样的工具吗,还不用做镜像包。当然信佑的版本有点老了。
作者: iceatao 时间: 2021-4-7 11:37
全盘恢复怎么好用??
作者: bjay2008xmy 时间: 2021-5-25 13:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: bjay2008xmy 时间: 2021-5-25 14:15
提示: 作者被禁止或删除 内容自动屏蔽
作者: bfgxp 时间: 2021-5-25 14:26
ut可以设置.!ut后缀的。这样程序检测没有.!ut文件后再自动启动就好了。
aria2是可以获取到进度的
作者: bjay2008xmy 时间: 2021-5-25 16:27
提示: 作者被禁止或删除 内容自动屏蔽
作者: xhwfq 时间: 2021-5-26 18:59
用组播不香吗?
作者: bjay2008xmy 时间: 2021-5-27 19:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: bjay2008xmy 时间: 2021-5-27 20:21
提示: 作者被禁止或删除 内容自动屏蔽
作者: bfgxp 时间: 2021-5-27 20:49
ut你用423down的绿色版是可以在pe下运行的,只是ut没有64位版本,所以无法在纯64位PE下运行。
aria2下载过程命令行窗口是有进度的,au3可以获取到这个进度
作者: bjay2008xmy 时间: 2021-5-27 21:40
提示: 作者被禁止或删除 内容自动屏蔽
作者: bjay2008xmy 时间: 2021-5-30 17:51
提示: 作者被禁止或删除 内容自动屏蔽
作者: xxkknn 时间: 2021-6-20 12:28
怎么玩?求指路
作者: xxkknn 时间: 2021-6-20 18:11
有个叫Transmission的工具可以用命令生成种子,就是路径有点艹蛋,有想法的可以自己去整花活了
作者: xingwuzhe 时间: 2022-1-10 00:57
求全套链接
作者: riadwkdm 时间: 2022-1-12 10:40
牛逼
欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) |
Powered by Discuz! X3.3 |