多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

如何部署生产级比特币网络监控集群:Bitnodes多进程Master/Slave架构实战教程

如何部署生产级比特币网络监控集群:Bitnodes多进程Master/Slave架构实战教程 如何部署生产级比特币网络监控集群Bitnodes多进程Master/Slave架构实战教程【免费下载链接】bitnodesBitnodes estimates the size of the Bitcoin peer-to-peer network by finding all of its reachable and unreachable nodes.项目地址: https://gitcode.com/gh_mirrors/bi/bitnodesBitnodes 是一款开源的比特币网络监控工具它通过递归发送 getaddr 消息遍历整个比特币 P2P 网络估算网络规模、输出全网节点快照。本教程带你一步步用 Master/Slave 多进程架构部署生产级 Bitcoin 节点监控集群涵盖环境准备、参数调优与运维要点。⚡为什么需要集群比特币网络爬虫的规模挑战主网可达节点以数万计单进程难以在快照周期内跑完一轮完整爬取Bitnodes 天生采用「多进程 gevent 协程」模型每个进程内部跑数百个并发连接Master 负责调度与快照Slave 负责并发爬取Redis 作为共享协调中枢生产环境参考项目根目录的start.sh的进程拓扑如下进程职责生产实例数crawl.py master初始化 DNS 种子、驱动新爬取周期、定期快照1crawl.py slave并发弹出待爬节点、建连采集4ping.py master加载新快照、协调长连接池1ping.py slave维持节点长连接、记录 RTT15resolve.py/export.py/seeder.py反向解析 / 快照导出 / DNS 种子区文件各 1cache_inv.py缓存全网块 inv 广播数据3所有进程均通过nice -n 19启动让爬虫主动让出 CPU避免影响宿主机其他服务。三步快速部署从代码到运行集群第 1 步环境准备Python 3.12 Redis依赖清单见requirements.txtgevent、redis、geoip2、PySocks 等并需本机或远程装好 Redisgit clone https://gitcode.com/gh_mirrors/bi/bitnodes cd bitnodes python3.12 -m venv venv source venv/bin/activate pip install -r requirements.txt pytest # 运行 tests/ 目录的单元测试验证安装第 2 步生成配置文件把conf/下的*.conf.default模板复制为实际配置例如conf/crawl.f9beb4d9.conf、conf/ping.f9beb4d9.conff9beb4d9 是主网魔数。关键项修改建议参数说明建议workers每进程并发 greenlet 数默认 700按 CPU 核数伸缩user_agent爬取 UABIP-0014务必修改避免与官方实例混淆snapshot_delay快照周期默认 600 秒addr_ttl/max_age邻居缓存 TTL / 节点最大年龄默认 1h–6h / 8h–5dtor_proxies访问 .onion 节点的 Tor 代理127.0.0.1:9050seeders启动引导用 DNS 种子保留默认 10 个即可第 3 步启动 Master/Slave 集群每个组件都是「1 master N slave」日志分文件写入log/python -u crawl.py conf/crawl.f9beb4d9.conf master python -u crawl.py conf/crawl.f9beb4d9.conf slave python -u crawl.py conf/crawl.f9beb4d9.conf slave # 按机器规模继续追加 slave ... python -u ping.py conf/ping.f9beb4d9.conf master python -u ping.py conf/ping.f9beb4d9.conf slave 也可以直接执行根目录的start.sh一次性拉起 crawl、ping、resolve、export、seeder、cache_inv 全套进程。Master/Slave 协作原理值得看懂的三个设计Master启动时清理旧 Redis 键、用 DNS 种子初始化pending待爬集合并周期性把可达节点写成带时间戳的 JSON 快照输出到data/crawl/f9beb4d9/。只有 master 进程会运行crawl.py中的 cron 调度逻辑Slave从pending集合随机弹出节点并发完成 version/getaddr 握手把 version、区块高度与up集合写回 Redis状态机Redis 键crawl:master:statestarting/running控制 slave 是否暂停工作保证快照切换时不产生脏数据水平扩展每加一个 slave 进程并发线性增加由于 Redis 是协调媒介master 与 slave 理论上可分布在多台机器可观测性与运维要点清单日志每进程独立日志如log/crawl.*.master.out排查时可在配置中打开debug True进度监控cron 任务每cron_delay秒把pending/up计数写入日志Redis 列表elapsed记录每轮爬取耗时master 据此自适应调节max_age快照产物每轮爬取生成时间戳.json每条记录为[address, port, services, height]下游数据export.py合并快照导出全量数据seeder.py基于zone.tmpl生成 DNS 种子区文件geoip/下的 GeoLite2 mmdb 库可用geoip/update.sh定期更新资源控制nice -n 19 gevent 异步 IO让整个集群可在低配 VPS 上长期稳定运行常见踩坑部署前必读 5 点❌ 忘记改user_agent会被节点视为重复爬虫实例❌ 同时启动两个 master会互相清空 Redis 数据❌ 跳过pytest直接运行缺少 geoip mmdb 文件时geoip2.Reader会直接崩溃❌ 无 IPv6 出口仍开启ipv6 True建议置False或配置ipv6_proxies❌snapshot_delay调得过短单轮爬不完导致max_age持续收缩节点数剧烈抖动总结Bitnodes 生产级集群 1 套 Redis 多组 crawl/ping 的 Master/Slave 进程 独立配置文件。Master 当「大脑」、Slave 提供「双手」、gevent 提供「并发丝线」。按上述三步走一小时内即可拥有自己的比特币网络监控集群。【免费下载链接】bitnodesBitnodes estimates the size of the Bitcoin peer-to-peer network by finding all of its reachable and unreachable nodes.项目地址: https://gitcode.com/gh_mirrors/bi/bitnodes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表