Heketi 为GlusterFS 提供RESTful 接口

2019-08-06 0 By admin

Heketi是一个具有resetful接口的glusterfs管理程序,作为kubernetes的Storage存储的external provisioner。
“Heketi提供了一个RESTful管理界面,可用于管理GlusterFS卷的生命周期。借助Heketi,像OpenStack Manila,Kubernetes和OpenShift这样的云服务可以动态地配置GlusterFS卷和任何支持的持久性类型。
Heketi将自动确定整个集群的brick位置,确保将brick及其副本放置在不同的故障域中。Heketi还支持任意数量的GlusterFS集群,允许云服务提供网络文件存储,而不受限于单个GlusterFS集群。”

一、Heketi管理GlusterFS集群需要注意

1.GlusterFS集群的各peer必须要有未安装文件系统的磁盘设备(磁盘设备未进行格式化)。
2.GlusterFS集群各peer的端口号不能太少,不然当peer上的brick将端口号用完后,会造成无法创建卷。
3.GlusterFS的各peer不能组成集群,Heketi可以自创建集群组合。

二、Heketi 服务安装和配置

1、yum 安装服务
yum install heketi heketi-client
2、配置文件
/etc/heketi/heketi.json
3、配置文件示例

{
  "port": "8080",
  "use_auth": false,
  "executor": "ssh",
  "_sshexec_comment": "SSH username and private key file information",
  "sshexec": {
      "keyfile": "/home/root_id_rsa",
      "user": "root"
    }
  }
}

4、服务启动
systemctl start heketi
systemctl enable heketi

5、验证服务是否正常
#curl http://127.0.0.1:8080/hello
Hello from Heketi

三、Heketi 管理GlusterFS 配置

根据上文的注意说明,我们应该知道需要在 GlusterFS 服务端配置到哪种程度,那些事情需要做,那些事情不能做。

  1. GlusterFS 服务端需要运行守护进程,不要加入集群、不要创建volume。
  2. GlusterFS 服务端需要提供一个空白的磁盘设备,或者磁盘分区。

Heketi 会对 GlusterFS 提供的磁盘设备,创建LVM文件系统,所以要保证磁盘设备是空白的,否则数据会丢失;也可能会造成创建volume失败。
之前一直使用 虚拟磁盘(dd 命令创建,losetup 命名创建设备)用于测试,到后来Heketi 加载的device 设备,空间大小一直是0,就是因为LVM文件系统创建失败。
1、编辑配置文件 topology.json

{
  "clusters": [
    {
      "nodes": [
        {
          "node": {
            "hostnames": {
              "manage": [
                "gluster-1"
              ],
              "storage": [
                "10.1.1.1"
              ]
            },
            "zone": 1
          },
          "devices": [
            "/dev/sdb""
          ]
        },
        {
          "node": {
            "hostnames": {
              "manage": [
                "gluster-2"
              ],
              "storage": [
                "10.1.1.2
              ]
            },
            "zone": 1
          },
          "devices": [
            "/dev/sdb"
          ]
        }
      ]
    }
  ]
}

2、向 Heketi 发送创建GlusterFS集群的信息
heketi-cli --server http://localhost:8088 topology load --json=/etc/heketi/topology.json
3、集群扩容的方法

  1. 重新配置/etc/heketi/topology.json文件信息后,导入到heketi中就可以扩容。
  2. 也可以通过 add命令为集群扩容。

四、Heketi 管理GlusterFS 服务

1.新建heketidbstorage数据库(heketi用于记录GLusterFS集群磁盘空间信息等资源使用情况的数据库)
heketi-cli --server http://localhost:8088 setup-openshift-heketi-storage
2.查看GlusterFS集群的信息
#集群列表
heketi-cli --server http://localhost:8088 cluster list
#集群详细信息
heketi-cli --server http://localhost:8088 cluster info cluster_id
#节点信息
heketi-cli --server http://localhost:8088 node info node_id
#卷信息
heketi-cli --server http://localhost:8088 volume list

3.其他常用命令

#heketi支持如下命令
heketi-cli --server http://localhost:8088 -h
blockvolume Heketi Volume Management
cluster Heketi cluster management
db Heketi Database Management
device Heketi device management
help Help about any command
loglevel Heketi Log Level
node Heketi Node Management
setup-openshift-heketi-storage Setup OpenShift/Kubernetes persistent storage for Heketi
topology Heketi Topology Management
volume Heketi Volume Management

#集群相关命令
heketi-cli --server http://localhost:8088 cluster -h
create Create a cluster
delete Delete the cluster
info Retrieves information about cluster
list Lists the clusters managed by Heketi
setflags Set flags on a cluster

#节点相关命令
heketi-cli --server http://localhost:8088 node -h
add Add new node to be managed by Heketi
delete Deletes a node from Heketi management
disable Disallow usage of a node by placing it offline
enable Allows node to go online
info Retrieves information about the node
list List all nodes in cluster
remove Removes a node and all its associated devices from Heketi
rmtags Removes tags from a node
settags Sets tags on a node

#卷相关命令
heketi-cli --server http://localhost:8088 volume -h
clone Creates a clone
create Create a GlusterFS volume
delete Deletes the volume
expand Expand a volume
info Retrieves information about the volume
list Lists the volumes managed by Heketi

其他的命令可以通过<-h>查看详细使用方式

五、实际部署中遇到的问题

heketi-client导入GlusterFS集群配置信息时遇到的问题

正常时的输出日志:
#heketi-cli topology load --json=topology-sample.json
Creating cluster ... ID: 5b930ef6081fd22e895c25a3dfb0c516
Allowing file volumes on cluster.
Allowing block volumes on cluster.
Creating node 10.30.1.15 ... ID: b120572be40db6c1d979c3903876430b
Adding device /dev/sdb ... OK
Creating node 10.30.1.16 ... ID: 7ce13ffc5eabe64a3791e93233fd3c1a
Adding device /dev/sdb ... OK
Creating node 10.30.1.17 ... ID: f9abdc2e5d4cfa17c035a97f984a1a3b
Adding device /dev/sdb ... OK

当磁盘文件系统已经存在时的错误日志
[root@10-211-105-109 heketi]# heketi-cli --server http://localhost:8088 topology load --json=/etc/heketi/topology.json
Creating node 10.211.105.200 ... ID: 6c0476a0b495bc67c2e6b181ca2f0813
Adding device /dev/sda5 ... Unable to add device: Can't open /dev/sda5 exclusively. Mounted filesystem?

当节点是已经位于其他集群中时的报错
[root@10-211-105-109 heketi]# heketi-cli --server http://localhost:8088 topology load --json=/etc/heketi/topology.json
Creating node 10.211.106.9 ... Unable to create node: peer probe: failed: 10.211.106.9 is either already part of another cluster or having volumes configured