Fabric CA默认使用SQLite数据库,这是一种嵌入式的文件数据库,如果需要将在集群中部署Fabric CA,那么就需要使用PostgreSQL或者MySQL数据库,支持的最低版本如下:

PostgreSQL: 9.5.5

MySQL: 5.7(但是使用5.7以上的版本也会有问题,这个后面会详细说明)

单机版搭建

首先创建ca.yaml文件(需要注意文件中的一些目录需要根据情况做修改),文件内容如下:

# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#version: '2'
services:ca0:image: hyperledger/fabric-ca:$IMAGE_TAGenvironment:- FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server- FABRIC_CA_SERVER_CA_NAME=ca-org1- FABRIC_CA_SERVER_TLS_ENABLED=true- FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem- FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/7550a33dfd82fb96b16f209cff24eeeedb85a8ee4288bd434fa947d98b90356f_skports:- "7054:7054"command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/7550a33dfd82fb96b16f209cff24eeeedb85a8ee4288bd434fa947d98b90356f_sk  -b admin:adminpw -d'volumes:- ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config# 将ca服务的目录映射到主机目录中- /var/hyperledger/ca/:/etc/hyperledger/fabric-ca-servercontainer_name: ca0_peerOrg1

文件创建完成之后就可以启动ca服务了,docker-compose -f ca.yaml up -d
docker ps -a命令运行结果如下:

这时候可以发现我们映射到的主机目录下生成了一系列文件:

[root@bd226 ca]# tree
.
├── fabric-ca-server-config.yaml
├── fabric-ca-server.db
├── IssuerPublicKey
├── IssuerRevocationPublicKey
└── msp└── keystore├── 7550a33dfd82fb96b16f209cff24eeeedb85a8ee4288bd434fa947d98b90356f_sk├── IssuerRevocationPrivateKey└── IssuerSecretKey2 directories, 7 files

fabric-ca-server.dbSQLite数据库存储数据的文件。
fabric-ca-server-config.yamlCA服务的配置文件。
其他文件都是公钥密钥之类的文件。

修改配置文件

首先修改ca.yaml文件。
修改后的内容如下:

version: '2'
services:ca0:image: hyperledger/fabric-ca:$IMAGE_TAGenvironment:- FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server- FABRIC_CA_SERVER_CA_NAME=ca-org1- FABRIC_CA_SERVER_TLS_ENABLED=true- FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem- FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/7550a33dfd82fb96b16f209cff24eeeedb85a8ee4288bd434fa947d98b90356f_skports:- "7054:7054"command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/7550a33dfd82fb96b16f209cff24eeeedb85a8ee4288bd434fa947d98b90356f_sk  -b admin:adminpw -d'volumes:- ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config- /var/hyperledger/ca/:/etc/hyperledger/fabric-ca-servercontainer_name: ca0_peerOrg1ca1:image: hyperledger/fabric-ca:$IMAGE_TAGenvironment:- FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server- FABRIC_CA_SERVER_CA_NAME=ca-org1- FABRIC_CA_SERVER_TLS_ENABLED=true- FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem- FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/7550a33dfd82fb96b16f209cff24eeeedb85a8ee4288bd434fa947d98b90356f_skports:- "8054:7054"command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/7550a33dfd82fb96b16f209cff24eeeedb85a8ee4288bd434fa947d98b90356f_sk  -b admin:adminpw -d'volumes:- ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config- /var/hyperledger/ca/:/etc/hyperledger/fabric-ca-servercontainer_name: ca1_peerOrg1

然后是CA服务的配置文件fabric-ca-server-config.yaml,打开修改db选项即可。
如果需要配置成MySQL存储,则需要将如下这段

db:type: sqlite3datasource: fabric-ca-server.dbtls:enabled: falsecertfiles:client:certfile:keyfile:

替换为

db:type: mysqldatasource: username:password@tcp(***.***.***.***:3306)/fabric_ca?parseTime=truetls:enabled: falsecertfiles:client:certfile:keyfile:

然后删除主机目录下的所有文件,并将修改好的配置文件复制过去。重新启动CA服务即可。

问题解决

但是CA服务使用MySQL的时候有一些bug。不论使用的MySQL版本是5.7以上还是以下的,都有一些问题出现。
因为CA服务启动的时候会判断数据库和表是否存在,如果不存在则会自动创建,但是建表语句与MySQL有些不兼容,所以会导致一些问题的出现。下面是导出的建表语句的SQL文件,可以手动创建,然后根据自身MySQL的版本做一些相应的修改即可成功启动CA服务


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for affiliations
-- ----------------------------
DROP TABLE IF EXISTS `affiliations`;
CREATE TABLE `affiliations`  (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(1024) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,`prekey` varchar(1024) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`level` int(11) NULL DEFAULT 0,PRIMARY KEY (`id`) USING BTREE,INDEX `name_index`(`name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for certificates
-- ----------------------------
DROP TABLE IF EXISTS `certificates`;
CREATE TABLE `certificates`  (`id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`serial_number` varbinary(128) NOT NULL,`authority_key_identifier` varbinary(128) NOT NULL,`ca_label` varbinary(128) NULL DEFAULT NULL,`status` varbinary(128) NOT NULL,`reason` int(11) NULL DEFAULT NULL,`expiry` timestamp(0) NOT NULL DEFAULT '0000-00-00 00:00:00',`revoked_at` timestamp(0) NOT NULL DEFAULT '0000-00-00 00:00:00',`pem` varbinary(4096) NOT NULL,`level` int(11) NULL DEFAULT 0,PRIMARY KEY (`serial_number`, `authority_key_identifier`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for credentials
-- ----------------------------
DROP TABLE IF EXISTS `credentials`;
CREATE TABLE `credentials`  (`id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`revocation_handle` varbinary(128) NOT NULL,`cred` varbinary(4096) NOT NULL,`ca_label` varbinary(128) NULL DEFAULT NULL,`status` varbinary(128) NOT NULL,`reason` int(11) NULL DEFAULT NULL,`expiry` timestamp(0) NOT NULL DEFAULT '0000-00-00 00:00:00',`revoked_at` timestamp(0) NOT NULL DEFAULT '0000-00-00 00:00:00',`level` int(11) NULL DEFAULT 0,PRIMARY KEY (`revocation_handle`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for nonces
-- ----------------------------
DROP TABLE IF EXISTS `nonces`;
CREATE TABLE `nonces`  (`val` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,`expiry` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0),`level` int(11) NULL DEFAULT 0,PRIMARY KEY (`val`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for properties
-- ----------------------------
DROP TABLE IF EXISTS `properties`;
CREATE TABLE `properties`  (`property` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',`value` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,PRIMARY KEY (`property`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for revocation_authority_info
-- ----------------------------
DROP TABLE IF EXISTS `revocation_authority_info`;
CREATE TABLE `revocation_authority_info`  (`epoch` int(11) NOT NULL DEFAULT 0,`next_handle` int(11) NULL DEFAULT NULL,`lasthandle_in_pool` int(11) NULL DEFAULT NULL,`level` int(11) NULL DEFAULT 0,PRIMARY KEY (`epoch`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (`id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',`token` blob NULL,`type` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`affiliation` varchar(1024) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`attributes` text CHARACTER SET utf8 COLLATE utf8_bin NULL,`state` int(11) NULL DEFAULT NULL,`max_enrollments` int(11) NULL DEFAULT NULL,`level` int(11) NULL DEFAULT 0,`incorrect_password_attempts` int(11) NULL DEFAULT 0,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact;SET FOREIGN_KEY_CHECKS = 1;

至此就搭建成功了。

后续会补充PostgreSQL的搭建教程。

HyperLedger Fabric 1.4.4 ca服务集群搭建(MySQL)相关推荐

  1. Hyperledger Fabric 1.4.6 多机器集群部署

    Hyperledger Fabric 1.4.6 多机集群部署(亲测有效) 参考: 1. 节点描述 节点 IP 说明 所在组织 order 192.168.30.67 排序节点 独立 peer0.or ...

  2. Eureka(eureka)服务集群搭建搭建

    编写Eureka Server集群: eureka-server总结 编写Eureka Server集群: 1.在POM文件中引入依赖:<dependency><groupId> ...

  3. 好客租房 — 项目发布以及各种服务集群搭建

    文章目录 1 .部署架构 2 .部署计划 2.1.MySQL服务 2.1.1.架构 2.1.2.规划 2.1.3.实施 2.1.3.1.部署pxc集群 2.1.3.2.部署MS架构 2.1.3.3.部 ...

  4. MySQL服务MySQL+MHA高可用服务集群搭建

    MySQL MHA MySQL MHA 一.MHA概念 1.MHA 的组成 2.MHA 的特点 二.搭建MySQL+MHA 1.所有服务器,关闭系统防火墙和安全机制 2.修改 master(192.1 ...

  5. spring boot 微服务集群 + 注册中心

    spring boot 微服务框架下载地址: https://start.spring.io/ 注册中心 Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进 ...

  6. 在滴滴云快速搭建自己的简易服务集群(入门版)

    引言 万物互联的时代,各行各业都或多或少的接入线上,作为开发人员,我们有了小而美的产品或服务方面的想法,就把它她做出来放到线上,让它发展壮大. 我以滴滴云为例,教你一步一步的搭建自己的服务器集群,包括 ...

  7. 『注册中心』Consul微服务注册中心的使用及相关集群搭建

    Consul目录 一.概念篇--注册中心 1. 什么是注册中心 2. 为什么要使用注册中心 3. 注册中心类型 4. 注册中心的优点 二.概念篇--Consul 1. 什么是Consul 2. Con ...

  8. linux的RHCS服务集群之Heartbeat集群简单搭建

    搭建Heartbeat服务器 Heartbeat名词解析: 所谓Heartbeat,顾名思义就是心跳同步的意思.在现在的网络中,是很重要稳定高效的时代.在很多的服务上都是通过搭建服务集群来提高效率:并 ...

  9. Zabbix(六):项目实战之--自动发现nginx调度器及后端web服务集群、自定义参数监控...

    项目: 1.自动发现nginx调度器及后端apache构建的web服务集群: 2.使用自定义参数监控调度器上nginx服务的相关统计数据及速率数据: 3.使用自定义参数监控后端apache服务的相关统 ...

最新文章

  1. 进程中的 hp1006MC.exe是什么,怎么解决
  2. C#网页数据采集(一)HtmlAgilityPack
  3. 关于Synchronized研伸扩展
  4. 【数理知识】《数值分析》李庆扬老师-第8章-矩阵特征值计算
  5. svn教程----TortoiseSVN常用操作
  6. linux里的挂载错误无法开机怎么办,Linux基础知识 - 开机挂载错误
  7. 对Servlet容器的补充
  8. 最长单调递增子序列_最长递增子序列(动态规划 + 二分搜索)
  9. 深入浅出C/C++中的正则表达式库(二)——Boost.Regex
  10. np.random中各随机采样函数一览
  11. 谷歌视频架构搜索:从 EvaNet 到 TinyVideoNet
  12. 【课程作业】表达学习 人脸图像复原 实验记录
  13. python 论文插图_插图论文
  14. 北京某数据中心全年用水量分析
  15. 水晶头做网线颜色排列
  16. 北京市参加汽车摇号条件
  17. Android视图绘制流程完全解析(二)
  18. Vue中props属性
  19. java是什么?用来做什么的?
  20. WPAN、WLAN、WMAN、WWAN、MANET、WSN、WMN、物联网、蓝牙、Zigbee、Wi-Fi、WiMax、RFID的概念

热门文章

  1. 【JavaWeb学习笔记】之HTMLCSS
  2. input 中放图片 css,css添加背景图片_css input定义背景图片
  3. Android插件化探索与发现
  4. 数据治理--浅谈数据质量管理【从方法论、质量标准、手段、流程分析】
  5. urllib抓取html数据,Python爬虫: 用urllib2写的抓取网页内容的简单示例
  6. 世界那么大,我们一起到处去看看
  7. 机器学习中相关英文专业术语
  8. 三大云平台的人工智能和大数据
  9. php下载卡住,php-Excel下载卡住188kb
  10. java transient作用_Java中transient关键字的作用