建立fabric-ca-serve集群

步骤1:安装Docker

如果你还没有安装Docker,请先安装它。

sudo yum update -y
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

步骤2:运行MySQL 5.7容器

接下来,启动一个MySQL 5.7容器实例。记得替换your_mysql_root_password为你自己的密码。

docker run --name fabric-ca-mysql -e MYSQL_ROOT_PASSWORD=your_mysql_root_password -e MYSQL_DATABASE=fabric_ca -p 3306:3306 -d mysql:5.7
[root@localhost ~]# docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=fabric_ca -p 3306:3306 -d mysql:5.7

这个命令将启动一个名为fabric-ca-mysql的MySQL容器,同时创建一个名为fabric_ca的数据库。

步骤3:准备Fabric CA服务器配置

  • 下载Hyperledger Fabric CA 1.4.9二进制文件并解压。

  • 初始化第一个Fabric CA服务器实例。在初始化时,你可以指定管理员的用户名和密码。

    fabric-ca-server init -b admin:adminpw
    
  • 编辑fabric-ca-server-config.yaml文件,调整数据库配置以使用步骤2中启动的MySQL数据库。假设MySQL运行在同一台机器上,且使用默认端口。

    db:
      type: mysql
      datasource: root:your_mysql_root_password@tcp(localhost:3306)/fabric_ca?parseTime=true
    

    确保将your_mysql_root_password替换为你设置的实际密码。

步骤4:启动Fabric CA服务器

  • 使用更新后的配置启动Fabric CA服务器。

    fabric-ca-server start
    

有可能会出现这个错误

2024/03/24 03:29:33 [ERROR] Error occurred initializing database: Failed to create MySQL tables: Error creating certificates table: Error 1067: Invalid default value for 'expiry'

这个错误通常是因为MySQL的SQL模式与Fabric CA服务器试图创建的表的默认日期/时间值不兼容。从MySQL 5.7开始,默认的SQL模式包括NO_ZERO_DATENO_ZERO_IN_DATE,这会阻止使用’0000-00-00’作为日期的默认值。Fabric CA在创建其数据库表时,可能会尝试使用这样的默认值,从而导致上述错误。

解决方案

要解决这个问题,你可以在MySQL数据库中调整SQL模式以允许零日期值。这可以通过在启动MySQL容器时设置MYSQLD_OPTIONS环境变量来实现,或者在数据库初始化后修改。

方法1:调整Docker容器的启动参数

当你运行MySQL容器时,添加一个环境变量来修改SQL模式:

docker run --name fabric-ca-mysql \
  -e MYSQL_ROOT_PASSWORD=your_mysql_root_password \
  -e MYSQL_DATABASE=fabric_ca \
  -e MYSQLD_OPTIONS="--sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION" \
  -p 3306:3306 \
  -d mysql:5.7

这将从默认SQL模式中移除NO_ZERO_IN_DATENO_ZERO_DATE,允许Fabric CA正常创建其数据库表。

方法2:修改现有数据库的SQL模式

如果你的MySQL容器已经在运行,或者你希望在已经创建的数据库上应用这个更改,你可以执行以下SQL命令来调整SQL模式:

  1. 登录到MySQL数据库:

    docker exec -it fabric-ca-mysql mysql -uroot -pyour_mysql_root_password
    
    1. 在MySQL命令行中,运行以下命令来设置新的SQL模式:
    SET GLOBAL sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
    

扩展CA服务器集群以提高可用性和负载均衡

1. 使用共享数据库

确保所有Fabric CA服务器实例都配置为使用同一个MySQL数据库。这是通过在fabric-ca-server-config.yaml中正确设置数据库连接来实现的,正如之前所示。这保证了不论哪个CA实例接收到注册或签发证书的请求,都能够访问和更新同一份数据。

这里我们使用这个命令来从一台物理机上启动两个ca服务器

fabric-ca-server start -b admin:adminpw --cacount 2

2. 配置反向代理

使用反向代理(如Nginx或HAProxy)可以帮助你实现负载均衡和高可用性。反向代理将客户端请求分发到不同的CA服务器实例,从而实现负载均衡。它还可以提供TLS终端,加密客户端和服务器之间的通信。

步骤1: 安装HAProxy

首先,确保你已经在你的CentOS 7系统上安装了HAProxy。

sudo yum install -y haproxy

步骤2: 配置HAProxy

接下来,编辑HAProxy的配置文件。这个文件通常位于/etc/haproxy/haproxy.cfg。你需要为你的Fabric CA服务器集群添加配置。以下是一个配置示例:

global
    # 全局日志设置
    log /dev/log local0
    log /dev/log local1 notice
    # 设置HAProxy运行的用户和组
    user haproxy
    group haproxy
    # 以守护进程模式运行
    daemon

defaults
    # 默认日志设置
    log     global
    # 使用HTTP模式
    mode    http
    # 启用HTTP日志
    option  httplog
    # 空连接不记录日志
    option  dontlognull
    # 连接超时设置
    timeout connect 5000ms
    timeout client  50000ms
    timeout server  50000ms

# 定义前端,接受进入的客户端连接
frontend fabric_ca_frontend
    # 监听端口,*表示所有接口,8054为监听端口
    bind *:7054
    mode http
    # 默认将流量转发到的后端
    default_backend fabric_ca_backend

# 定义后端,包含了服务的实际实例
backend fabric_ca_backend
    mode http
    # 负载均衡算法,roundrobin表示轮询
    balance roundrobin
    # 定义后端服务器,check表示健康检查
    server ca1 localhost:7054 check  # 第一个CA服务器实例
    server ca2 localhost:7055 check  # 第二个CA服务器实例

在这个配置中:

  • frontend fabric_ca_frontend定义了一个前端,它监听所有接口上的7054端口。
  • backend fabric_ca_backend定义了一个后端,包含了两个CA服务器实例,使用roundrobin策略进行负载均衡。option httpchk GET /cainfo设置了健康检查,确保只有正常运行的CA实例会接收到请求。

确保替换ca1.example.comca2.example.com为你实际的CA服务器地址。

步骤3: 启动HAProxy

配置好HAProxy后,你需要重新启动服务以应用配置更改。

systemctl restart haproxy
sudo systemctl enable haproxy

相关推荐

  1. 建立fabric-ca-serve

    2024-06-18 20:40:02       7 阅读
  2. k8sCA证书过期处理

    2024-06-18 20:40:02       24 阅读
  3. 只需三步,使用 KRaft 建立多节点 Kafka

    2024-06-18 20:40:02       11 阅读
  4. Hyperledger Fabric 交易过程中读写语义

    2024-06-18 20:40:02       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-18 20:40:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-18 20:40:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-18 20:40:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-18 20:40:02       18 阅读

热门阅读

  1. fastapi对视频播放加速方法

    2024-06-18 20:40:02       4 阅读
  2. 嵌入式就业前景好么

    2024-06-18 20:40:02       5 阅读
  3. 数据库回表及优化方法(附示例)

    2024-06-18 20:40:02       6 阅读
  4. 计算机网络模型面试题50题

    2024-06-18 20:40:02       7 阅读
  5. 图解ZGC

    图解ZGC

    2024-06-18 20:40:02      4 阅读
  6. [python日常]获取指定文件夹下,指定后缀的文件

    2024-06-18 20:40:02       8 阅读
  7. PostgreSQL源码分析——SeqScan

    2024-06-18 20:40:02       7 阅读
  8. css伪类和伪元素选择器

    2024-06-18 20:40:02       5 阅读
  9. 充电学习—2、开关电源基本原理

    2024-06-18 20:40:02       5 阅读