fabric 1.1教程(一):搭建第一个fabric网络

本教程详细介绍了如何在CentOS7.2环境下搭建Hyperledger Fabric1.1网络,包括系统配置、软件安装、源码下载、编译或下载二进制文件、下载镜像及快速部署网络等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fabric 1.1教程(一):搭建第一个fabric网络

一、前提条件

1.1、系统适配

需要linux内核到4.x及以上,内存2G及以上,本教程运行在centos7.2上。
在这里插入图片描述

1.2、安装docker

要求:Docker version 17.06.2-ce及以上

(1)官方安装

参考:https://docs.docker.com/install/linux/docker-ce/centos/#prerequisites

(2)阿里云安装
  • 安装docker-ce
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
yum install docker-ce -y
  • 查询版本是否正确
[root@localhost master]# docker --version
Docker version 18.06.1-ce, build e68fc7a
  • 重启docker并设置为开机自启
systemctl start docker & systemctl enable docker

1.3、安装docker-compose

要求 :Docker Compose 版本1.14.0及以上

(1) 官方安装
  • 安装docker-compose

    sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    
  • 查询版本是否正确

    [root@localhost master]# docker-compose --version
    docker-compose version 1.18.0, build 8dd22a9
    
(2) pip安装
  • 安装docker-compose

    yum -y install epel-release
    yum -y install python-pip
    pip install --upgrade pip 
    
  • 查询版本是否正确

    [root@localhost master]# docker-compose --version
    docker-compose version 1.18.0, build 8dd22a9
    

1.4、安装golang

要求:Go语言版本在1.9.X及以上

  • 下载并解压到/usr/local文件夹

    Wget https://storage.googleapis.com/golang/go1.10.1.linux-amd64.tar.gz
    tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz
    
  • 设置环境变量

    • 创建gopath文件夹

      mkdir -p /home/master/gopath
      
    • 设置环境变量:GOPATH(go语言运行目录)、GOROOT(go语言安装包目录)

      vim /etc/profile,在其最后添加以下代码:

      export GOROOT=/usr/local/go
      export GOPATH=$HOME/gopath
      export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
      
  • 查询版本是否正确

[root@localhost master]# go version
go version go1.10.4 linux/amd64

1.5、参考资料

官方文档:https://hyperledger-fabric.readthedocs.io/en/release-1.1/prereqs.html

二、源码下载

2.1 下载fabric源码

mkdir -p $GOPATH/src/github.com/hyperledger  
cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git

2.2 切换到release-1.1分支

cd fabric
git checkout release-1.1
git branch -a

显示结果为:

* release-1.1
  release-1.2
  remotes/origin/HEAD -> origin/release-1.2
  remotes/origin/feature/ca
  remotes/origin/feature/convergence
  remotes/origin/master
  remotes/origin/release-1.0
  remotes/origin/release-1.1
  remotes/origin/release-1.2
  remotes/origin/v0.6
  remotes/origin/v1.0.0-preview

2.3 下载fabric-samples

cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric-samples.git

2.4 切换到release-1.1分支

cd fabric-samples
git checkout release-1.1
git branch -a

显示结果为:

* release-1.1
  release-1.3
  remotes/origin/HEAD -> origin/release-1.3
  remotes/origin/master
  remotes/origin/release
  remotes/origin/release-1.0
  remotes/origin/release-1.1
  remotes/origin/release-1.2
  remotes/origin/release-1.3

三、编译或下载二进制文件

注:可以通过编译或者下载的方法生成二进制文件,二者选其一即可

### (1)下载法

  • 进入到fabric-samples文件夹,通过wget下载1.1.0 版本的二进制文件

     cd fabric-samples/
     wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.1.0/hyperledger-fabric-linux-amd64-1.1.0.tar.gz
    
  • 解压下载的文件,会发现多了bin和config两个个文件夹

    tar -zxvf hyperledger-fabric-linux-amd64-1.1.0.tar.gz 
    
  • 将bin文件夹下的二进制文件,拷贝到环境变量中

    cp bin/* /usr/local/bin
    

(2) 编译法

  • 安装相关依赖组件

    go get github.com/golang/protobuf/protoc-gen-go
    mkdir -p $GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin
    cp $GOPATH/bin/protoc-gen-go $GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin
    
  • 进入fabric文件夹

    cd $GOPATH/src/github.com/hyperledger/fabric
    
  • 编译fabric组件

    make release
    make docker
    

    编译结束后,相关二进制文件存放在以下目录中:

    $GOPATH/src/github.com/hyperledger/fabric/release/linux-adm64/bin
    
  • 将bin文件夹下的二进制文件,拷贝到环境变量中

    cp release/linux-adm64/bin/configtxgen /usr/local/bin
    cp release/linux-adm64/bin/configtxlator /usr/local/bin
    cp release/linux-adm64/bin/cryptogen /usr/local/bin
    cp release/linux-adm64/bin/orderer /usr/local/bin
    cp release/linux-adm64/bin/peer /usr/local/bin
    
  • 修改文件的执行权限

    chmod -R 775 /usr/local/bin/configtxgen
    chmod -R 775 /usr/local/bin/configtxlator
    chmod -R 775 /usr/local/bin/cryptogen
    
  • 模块安装结果检查

    [root@localhost fabric]# cryptogen version
    cryptogen:
     Version: 1.1.2-snapshot-9db3fbc
     Go version: go1.10.4
     OS/Arch: linux/amd64
    [root@localhost fabric]# cryptogen version
    cryptogen:
     Version: 1.1.2-snapshot-9db3fbc
     Go version: go1.10.4
     OS/Arch: linux/amd64
    

四、下载镜像

  • 进入到fabric下的scripts文件夹,运行bootstrap.sh,此过程需要等待几分钟
cd fabric/scripts/
./bootstrap.sh 
  • 通过docker iamges 命令查看镜像
    在这里插入图片描述

五、快速部署一个fabric网络

  • 进入到fabric-samples/first-network

    cd $GOPATH/src/github.com/hyperledger/fabric-samples/first-network
    
  • 生成配置文件。执行下方代码后,会出现Continue? [Y/n]输入y选择同意后,则默认生成的通道名为mychannel的配置信息

    ./byfn.sh generate
    
  • 起动项目

    ./byfn.sh -m up
    

    如果成功,则运行过程中不会报错,最终结果显示为:
    在这里插入图片描述

  • 成功后,关闭网络

    ./byfn.sh -m down
    

六、总结:

如果成功完成所有操作,看到上图所示的界面,那么,恭喜你,完成了fabric网络的搭建,已经快速部署了一个fabric网络,实现了对链码的操作。从而,从宏观上对fabric项目有了一定的认识,同时也表明你的电脑环境已经适用于fabric的开发了。下一教程,将详细介绍fabric网络部署以及链码的调用的各个步骤,谢谢!

<think>嗯,用户想搭建个Web性能测试平台,需要满足八个需求。首先得理解每个需求的具体内容,然后考虑如何设计架构和实现程序。让我个来分析。 第一个需求是控制远程压力机,下发执行JMeter测试计划。这可能需要用SSH或者Ansible之类的工具来远程控制压力机。不过直接调用JMeter的命令行可能更直接,需要压力机上安装好JMeter环境,并且有权限执行命令。可能需要个Agent程序跑在压力机上,接收来自主控节点的指令。 第二个需求是动态生成测试参数,尤其是自定义线程数。这里可能需要个参数化的机制,比如用户在前端输入线程数,后端动态修改JMeter的测试计划文件(.jmx),或者通过JMeter的命令行参数传递线程数。不过修改.jmx文件可能更灵活,但需要处理XML结构,或者使用JMeter的API来动态生成测试计划。 第三个需求是集成Prometheus和Grafana监控。Prometheus需要收集各个压力机的性能指标,比如CPU、内存、网络等,可能需要在压力机上部署Node Exporter,然后Prometheus拉取数据。Grafana用来展示仪表盘,可能需要预先配置好数据源和仪表盘模板。 第四个需求是支持分布式部署,同时控制多个压力机。这需要主控节点能够管理多个压力机节点,可能需要在每个压力机上部署Agent,主控节点通过RPC或者REST API与Agent通信,下发执行命令。同时需要考虑压力机的注册和心跳机制,确保节点可用。 第五个需求是集成JMeter的HTML报告生成器。JMeter本身有生成HTML报告的功能,可以通过命令行参数指定生成报告。需要将生成的报告保存到服务器,并通过Web界面展示给用户。可能需要处理报告文件的存储和访问权限问题。 第六个需求是实现Web控制界面。前端可能需要用Vue.js或React来构建,后端用Spring Boot或者Django提供API。用户通过Web界面配置测试参数,触发测试执行,查看报告和监控数据。需要考虑前后端的交互和数据传输格式,比如RESTful API。 第七个需求是添加实时监控。除了Prometheus和Grafana的历史数据,还需要实时展示测试过程中的指标,比如TPS、响应时间等。可能需要WebSocket或者Server-Sent Events (SSE)来实现实时数据推送,前端动态更新图表。 第八个需求是自动缩放机制,根据监控指标动态调整压力。这需要监控系统实时收集数据,当达到某个阈值时,自动增加或减少压力线程数。可能需要个策略引擎,定义伸缩的规则,比如CPU超过80%时减少线程数。同时需要JMeter测试计划支持动态调整参数,可能需要中断当前测试,重新配置后继续执行,或者JMeter本身支持运行时调整线程数,这可能需要JMeter的插件或者自定义代码。 接下来要考虑架构设计。可能需要分为以下几个模块:Web前端、后端服务、压力机Agent、监控系统、报告生成模块、自动伸缩模块。 后端服务需要处理用户请求,调度压力机,生成测试参数,调用JMeter执行测试,收集结果,触发报告生成,并与监控系统集成。压力机Agent需要接收命令,执行JMeter测试,收集本地指标,并上报给监控系统。Prometheus负责抓取压力机的指标,Grafana展示。自动伸缩模块需要监听Prometheus的数据,根据规则调整线程数,可能需要通过后端服务动态修改测试参数,并重新下发命令。 在技术选型方面,后端可能用Spring Boot,因为Java和JMeter都是Java系的,可能更方便集成。前端用Vue.js比较流行,容易上手。压力机Agent可以用Python或者Shell脚本,但考虑到跨平台和功能复杂性,可能用Go或者Java写Agent更合适,不过依赖可能会多些。不过如果压力机都是Linux系统,用Python加Fabric库处理SSH命令也可以。 动态参数生成方面,JMeter的测试计划是XML文件,可以用Java的XML解析库(比如DOM4J)来修改线程数等参数,然后保存为临时文件,再分发给各个压力机执行。或者使用JMeter的API,比如JMeter的Java API来动态生成测试计划,但可能需要更深入的学习。 分布式部署的话,主控节点需要维护压力机的列表,每个压力机启动Agent,注册到主控节点。主控节点下发测试计划和参数,Agent执行并返回结果。需要考虑网络通信的可靠性,比如超时重试,心跳检测等。 报告生成部分,JMeter执行完成后会生成HTML报告,后端需要将这些报告存储在某个目录,并通过Nginx提供静态访问,或者后端自己提供文件下载接口。前端需要展示报告链接,用户点击查看。 实时监控方面,除了Prometheus的历史数据,可能还需要在测试执行期间实时获取JMeter的结果,比如通过后端读取JMeter的日志文件或者结果文件,解析后通过WebSocket推送到前端。或者JMeter的Backend Listener配置为发送数据到某个中间件(比如Kafka),后端消费后处理并推送实时数据。 自动缩放机制需要定时查询监控指标,比如从Prometheus获取当前压力机的CPU、内存使用率,或者JMeter的活跃线程数、响应时间等。当指标超过阈值时,调用后端API调整线程数。调整线程数可能需要动态修改测试计划,并重新分发到压力机,或者JMeter支持动态调整,这可能需要JMeter插件的支持,比如使用Concurrency Thread Group,允许动态调整线程数。这时候自动缩放模块需要和JMeter的测试计划配合,可能需要发送HTTP请求到JMeter的API(如果有的话)来调整参数。 可能遇到的挑战包括:压力机的动态管理,如何高效分发测试计划和参数;JMeter测试计划的动态修改;实时监控数据的采集和展示;自动缩放的响应速度和准确性;分布式环境下的协同和容错处理。 在实现步骤上,可能需要分阶段开发。首先搭建基础架构,实现Web界面和基本的测试执行功能。然后集成监控和报告生成,接着实现分布式控制和自动缩放。每步都需要测试和验证,确保各个模块协同工作。 最后,安全性也是需要考虑的,比如压力机的SSH访问需要密钥认证,后端API需要身份验证和授权,防止未授权的访问。压力机之间的通信也需要加密,避免数据泄露。</think>我将为您设计个基于Spring Boot + Vue.js的Web性能测试平台架构方案,并提供关键代码片段: # 、系统架构设计 ![架构图](https://via.placeholder.com/800x400.png?text=Architecture+Diagram) 分层架构: 1. 前端层:Vue.js + ECharts 2. 网关层:Nginx 3. 应用层:Spring Boot微服务集群 4. 压力机层:JMeter Agent + Prometheus Exporter 5. 监控层:Prometheus + Grafana 6. 存储层:MySQL + MinIO # 二、核心模块实现 ## 1. JMeter控制模块(Spring Boot) ```java // JMeter执行服务 @Service public class JMeterService { @Value("${jmeter.home}") private String jmeterHome; public void executeTestPlan(String testPlanPath, Map<String, String> params) { List<String> command = new ArrayList<>(); command.add(jmeterHome + "/bin/jmeter"); command.add("-n"); command.add("-t"); command.add(testPlanPath); command.add("-l"); command.add("result.jtl"); params.forEach((k, v) -> command.add("-J" + k + "=" + v)); executeRemoteCommand(command); } private void executeRemoteCommand(List<String> command) { // 使用SSH连接压力机执行命令 } } ``` ## 2. 分布式控制模块 ```python # 压力机Agent示例(Python) import paramiko class PressureMachineAgent: def __init__(self, host, username, key_path): self.ssh = paramiko.SSHClient() self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) self.ssh.connect(host, username=username, key_filename=key_path) def execute_command(self, cmd): stdin, stdout, stderr = self.ssh.exec_command(cmd) return stdout.read().decode() ``` ## 3. 自动缩放模块 ```java // 自动缩放服务 @Service @EnableScheduling public class AutoScalingService { @Autowired private PrometheusClient prometheusClient; @Scheduled(fixedRate = 5000) public void adjustWorkload() { double cpuUsage = prometheusClient.query("avg(node_cpu_seconds_total{mode!='idle'})"); int currentThreads = getCurrentThreads(); if(cpuUsage > 0.8) { scaleThreads((int)(currentThreads * 0.9)); } else if(cpuUsage < 0.4) { scaleThreads((int)(currentThreads * 1.1)); } } } ``` ## 4. 前端界面示例(Vue.js) ```vue <template> <div> <el-form @submit="startTest"> <el-form-item label="线程数"> <el-input-number v-model="threadCount" :min="1"/> </el-form-item> <el-button type="primary" @click="startTest">开始测试</el-button> </el-form> <div id="monitor-chart" style="height:400px"></div> </div> </template> <script> import * as echarts from 'echarts' export default { data() { return { threadCount: 100, chart: null } }, mounted() { this.initChart(); this.setupWebSocket(); }, methods: { initChart() { this.chart = echarts.init(document.getElementById('monitor-chart')); // 初始化图表配置 }, setupWebSocket() { const ws = new WebSocket('ws://your-websocket-url'); ws.onmessage = (event) => { const data = JSON.parse(event.data); this.updateChart(data); } } } } </script> ``` # 三、关键集成点实现 ## 1. Prometheus监控集成 ```yaml # prometheus.yml 配置示例 scrape_configs: - job_name: 'jmeter' static_configs: - targets: ['pressure-machine1:9270', 'pressure-machine2:9270'] - job_name: 'application' static_configs: - targets: ['app-server:8080'] ``` ## 2. JMeter HTML报告生成 ```bash # 生成HTML报告命令 jmeter -g result.jtl -o report/ ``` ## 3. 自动缩放规则配置 ```json { "rules": [ { "metric": "cpu_usage", "threshold": 80, "operator": ">", "action": "scale_down", "factor": 0.9 }, { "metric": "response_time", "threshold": 1000, "operator": ">", "action": "scale_up", "factor": 1.2 } ] } ``` # 四、部署方案 1. 压力机环境准备: ```bash # 安装基础环境 sudo apt-get install openjdk-11-jdk wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.2.tgz tar -xzf apache-jmeter-5.6.2.tgz # 安装Prometheus exporter wget https://github.com/johrstrom/jmeter-prometheus-plugin/releases/download/0.6.0/jmeter-prometheus-plugin-0.6.0.jar cp jmeter-prometheus-plugin-0.6.0.jar apache-jmeter-5.6.2/lib/ext/ ``` 2. 使用Docker Compose部署核心服务: ```yaml version: '3' services: web: image: nginx:alpine ports: - "80:80" volumes: - ./dist:/usr/share/nginx/html backend: image: openjdk:11-jre command: java -jar /app.jar volumes: - ./backend.jar:/app.jar environment: - SPRING_PROFILES_ACTIVE=prod prometheus: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana ports: - "3000:3000" ``` # 五、扩展建议 1. 性能优化: - 使用Redis缓存测试结果数据 - 采用Kafka实现异步任务处理 - 实现压力机资源池的动态管理 2. 安全增强: - 增加OAuth2认证 - 实现测试计划版本控制 - 添加操作审计日志 3. 高级功能扩展: - 机器学习驱动的智能压测 - 链路追踪集成(Jaeger) - 混沌工程实验集成 以上方案可根据实际需求进行调整,建议采用迭代开发方式,首先实现核心测试流程,再逐步完善监控和自动化功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值