hexiaohu
作者hexiaohu2019-11-07 10:47
软件开发工程师, IBM

在LinuxOne服务器上运行KVM客户机部署多中心区块链网络

字数 3887阅读 602评论 0赞 2

前提

IBM LinuxOne服务器基于KVM开源技术提供了强大的虚拟化能力,基于LinuxOne的KVM客户机能够充分利用LinuxOne的高容量,高负载,高安全的运行环境,是运行区块链的理想基础设施。

目标

本实验目标是需要在两个LPAR( LinuxOne 分区)上分别运行多个KVM客户机,每个LPAR模拟一个独立的数据中心,KVM客户机是运行在数据中心的服务器。所有的KVM客户机部署到一个ICP Cluster, 利用IBM Blockcahin Platform 2.0在此ICP Cluster上部署区块链网络,并且根据不同的配置策略,控制区块链的网络实体(peer, orderer, ca)运行在不同的数据中心,进行负载分担和容灾备份。
需要达到的区块链网络部署图:
实际部署时,实体序号和分布可能与此图不一致,但是必须达到以下条件

  • 实体在两个数据中心的多个工作节点上均匀部署,达到负载分担的目的 - 同一个组织的两个Peer节点,需要分布在不同的数据中心,达到容灾的目的

KVM资源需求

  • 两个LPAR, 每个LPAR上的配置:3IFLs + 100G内存 + 250Disk
  • 需要部署的区块链网络实体及资源列表 (一共8个组织)
实体 每个实体资源需求 总资源需求
 8 CAs (1 ca/org)  ca: 0.1 vCPUs +  0.2G 内存    0.8 vCPU + 1.6G内存 
16 Peers (2 peers/org) dind: 2 vCPUs + 2 G 内存 4.1 * 16 = 65.6 vCPUs
- peer: 1 vCPU + 1 G 内存 5.7 * 16 = 91.2 G 内存
- couchdb: 0.5 vCPUs + 2 G 内存
- proxy: 0.5 vCPUs + 0.5 G 内存
- fluentd: 0.1 vCPUs + 0.2 G 内存
 5 Ordereres (raft with 5 nodes)  orderer: 1 vCPU + 1 G memory   7.5 vCPUs
- proxy : 0.5 vCPUs + 0.5 G memroy 7.5 G 内存

(没有考虑操作系统和其他应用软件的资源占用) 总共需要 73.9 vCPUs + 100.3G内存 , 现在两个LPAR的资源不够,需要在运行的KVM上进行硬件资源overcommit过量配置,LinuxOne可以支持非常好的虚拟机资源过度配置,参考如下:

资源   平均过量配置   最大过量配置
CPU   14:1  44:1
 内存 1.5:1  3.0:1

  • ICP Cluster工作节点规划 ICP Cluster里总共需要一个master, 四个workernodes, 和一个NFS磁盘服务器,资源配置如下
KVM客户机 资源配置 描述
 1台master 64G 内存 + 32 vCPUs  + 120G硬盘  部署在LPAR1上,启用ksm 内存共享技术
4台workernodes (64G 内存 + 32 vCPUs + 120G硬盘 ) * 4  每个LPAR上部署两台, 启用ksm 内存共享技术
1台NFS server 8 G 内存 + 4 vCPUs + 120G硬盘 部署在LPAR2上

KVM客户机安装

部署ICP Clusert里的6台KVM客户机, 部署过程请参考文章在LinuxOne服务器上安装配置KVM客户机
其中Master客户机的Domain配置文件可以参考如下:

<domain type="kvm">
  <name>icp-master</name>
  <memory unit="GiB">64</memory>
  <vcpu>32</vcpu>
  <memtune>
      <hard_limit unit='KiB'>15728640</hard_limit>
  </memtune>
  <os>
    <type arch='s390x' machine='s390-ccw-virtio-bionic'>hvm</type>
    <boot dev='hd'/>
  </os>
  <iothreads>1</iothreads>
  <on_crash>preserve</on_crash>
  <devices>
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2" cache="none" iothread="1" io="native"/>
      <source file="/var/lib/libvirt/images/icp-master.qcow2"/>
      <target dev="vda" bus="virtio"/>
    </disk>
    <interface type='direct' trustGuestRxFilters='yes'>
      <mac address='fe:54:00:d1:03:d9'/>
      <source dev='vlan507' mode='bridge'/>
      <model type='virtio'/>
      <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0002'/>
    </interface>
    <console type="pty">
      <target type="sclp"/>
    </console>
    <memballoon model="none"/>
  </devices>
</domain>

KVM硬件配置和优化

在区块链网路部署完后,发现两个LPAR的内存占用率过大 (> 90%)。所以我们启用了KSM内存共享技术,能够把LPAR上的内存占用率显著降到30%左右, 具体可以参考文章KVM虚拟机按需优化实例
简单步骤如下:


#临时开启KSM,只能使用重定向,不支持VI编辑器
echo 1 > /sys/kernel/mm/ksm/run

#我们有多个虚拟机,为了防止某个虚拟机无节制的使用内存资源,导致其他虚拟机无法正常使用,就需要对使用的内存进行限制,配置KVM客户机Domain文件,加入如下配置信息限制到15G
<memtune>
      <hard_limit unit='KiB'>15728640</hard_limit>
</memtune>

ICP Cluster安装

请参考ICP Cluster安装文件安装ICP Cluster: Installing IBM Cloud Private Cloud Native, Enterprise, and Community editions
注意:需要按照上面的ICP Cluster 工作节点规划,配置安装文件“/installation_directory/cluster/hosts”,参考 Setting the node roles in the hosts file

NFS网络文件系统部署

在ICP上部署NFS网络文件系统,创建storageclass, 创建的storageclass可以被IBP2.0使用。参考文章 Add a dynamic NFS provisioner to your Kubernetes cluster

IBP安装

参考下面的文章在ICPCluster上部署IBP2.0
Installing the IBM Blockchain Platform Helm chart
Deploying the IBM Blockchain console

区块链网络部署

参考下面的文章使用IBP2.0在ICPCluster部署区块链网络:
Build a network tutorial
注意:请参照前面的区块链网络的实体列表(8个组织的cas, peers, orderes)都创建出来,创建时请修改资源配置

区块链网络实体多中心部署

8个组织的区块链网络实体创建完成后,这些网络实体没有按照规定
在两个数据中心的工作节点上 (两个LPAR) 均匀分布,不能达到负载均衡和容灾备份的要求,请参考下面的文章,对ICP Cluster的工作节点打标签,对网络实体的部署文件进行修改,控制Pod的分布。参考文档:IBM Could Private,Linux One上通过Affinity进一步控制容器部署

参考的系列文章

1. 在LinuxOne服务器上安装配置KVM客户机
2. IBM Could Private,Linux One上通过Affinity进一步控制容器部署

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

关于TWT  使用指南  社区专家合作  厂商入驻社区  企业招聘  投诉建议  版权与免责声明  联系我们
© 2020  talkwithtrend — talk with trend,talk with technologist 京ICP备09031017号-30