heketi简单安装配置使用

heketi是为glusterfs集群提供restfulapi的,通过restful风格对集群进行管理控制

前置条件

1 安装并启动glusterd,可参考https://www.cnblogs.com/bfmq/p/9990467.html
2 需要使用的磁盘是裸盘,没有被格式化挂载等
3 必须两个以上节点,否则集群创建完成后也创建不出卷
4 如果不是为了与k8s集成没必要安装heketi,直接用gfs自带的管理工具即可

正常安装并修改配置文件启动

[root@glusterfs-bj-ali-bgp1 ~]# yum install heketi heketi-client -y
[root@glusterfs-bj-ali-bgp1 ~]# cat /etc/heketi/heketi.json
{
  "_port_comment": "Heketi Server Port Number",
  "port": "8080",                                                            # 启用端口

  "_use_auth": "Enable JWT authorization. Please enable for deployment",
  "use_auth": false,                                                        # JWT认证是否开启

  "_jwt": "Private keys for access",                                        # JWT认证开启情况下配置
  "jwt": {
    "_admin": "Admin has access to all APIs",
    "admin": {
      "key": "My Secret"                                                    # 超级用户的密码,超级用户可以使用所有api
    },
    "_user": "User only has access to /volumes endpoint",
    "user": {
      "key": "My Secret"                                                    # 普通用户的密码,普通用户可以使用卷资源,即集群、节点之间的关系无法操作
    }
  },

  "_glusterfs_comment": "GlusterFS Configuration",
  "glusterfs": {
    "_executor_comment": [                                                    # 执行命令的方式
      "Execute plugin. Possible choices: mock, ssh",
      "mock: This setting is used for testing and development.",            # 开发者模式,测试功能用
      "      It will not send commands to any node.",
      "ssh:  This setting will notify Heketi to ssh to the nodes.",            # ssh是正常生产环境使用的
      "      It will need the values in sshexec to be configured.",
      "kubernetes: Communicate with GlusterFS containers over",                # 当gfs集群在kubernetes作为ds跑的时候使用
      "            Kubernetes exec api."
    ],
    "executor": "ssh",

    "_sshexec_comment": "SSH username and private key file information",    # 调用ssh时配置
    "sshexec": {
      "keyfile": "/etc/heketi/id_rsa",                                        # ssh执行用户的私钥,heketi用户需要该文件读权限
      "user": "root",                                                        # ssh执行用户,生产不用用root哦
      "port": "22",                                                            # ssh端口
      "fstab": "/etc/fstab"                                                    # 系统fstab路径
    },

    "_kubeexec_comment": "Kubernetes configuration",                        # 调用k8s时配置
    "kubeexec": {
      "host" :"https://kubernetes.host:8443",                                # k8s api地址端口
      "cert" : "/path/to/crt.file",                                            # k8s证书
      "insecure": false,                                                    # 是否启用不安全模式
      "user": "kubernetes username",                                        # k8s用户
      "password": "password for kubernetes user",                            # k8s密码
      "namespace": "OpenShift project or Kubernetes namespace",                # 项目所处命名空间
      "fstab": "Optional: Specify fstab file on node.  Default is /etc/fstab"
    },

    "_db_comment": "Database file name",
    "db": "/var/lib/heketi/heketi.db",                                        # heketi会有一个自己的小库,这个默认地址即可

    "_loglevel_comment": [
      "Set log level. Choices are:",
      "  none, critical, error, warning, info, debug",
      "Default is warning"
    ],
    "loglevel" : "warning"                                                    # 日志等级,日志会在/var/log/messages里显示
  }
}
[root@glusterfs-bj-ali-bgp1 ~]# systemctl enable heketi  && systemctl start heketi && systemctl status heketi
[root@glusterfs-bj-ali-bgp1 heketi]# netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3045/sshd           
tcp        0      0 0.0.0.0:24007           0.0.0.0:*               LISTEN      59232/glusterd      
tcp6       0      0 :::8080                 :::*                    LISTEN      60356/heketi             # 端口打开
[root@glusterfs-bj-ali-bgp1 heketi]# curl http://127.0.0.1:8080/hello                # 测试连通性
Hello from Heketi

然后通过载入topology文件方式快速初始化一个集群并配置相关节点磁盘设备资源信息,注意该json文件必须是一行!

[root@glusterfs-bj-ali-bgp1 heketi]# cat /etc/heketi/topology.json                    # 该文件一定要注意格式化后成json为一行,否则解析不了,这是很多网上文档的坑
{
    "clusters": [
        {
            "nodes": [
                {
                    "node": {
                        "hostnames": {
                            "manage": [
                                "172.17.1.1"
                            ],
                            "storage": [
                                "172.17.1.1"
                            ]
                        },
                        "zone": 1
                    },
                    "devices": [
                        "/dev/vdb",
                        "/dev/vdc",
                    ]
                },
                {
                    "node": {
                        "hostnames": {
                            "manage": [
                                "172.17.1.2"
                            ],
                            "storage": [
                                "172.17.1.2"
                            ]
                        },
                        "zone": 1
                    },
                    "devices": [
                        "/dev/vdd",
                        "/dev/vde",
                    ]
                }
            ]
        }
    ]
}
[root@glusterfs-bj-ali-bgp1 heketi]# cat /etc/heketi/topology.json                # 这是该文件该有的样子!
{"clusters": [{"nodes": [{"node": {"hostnames": {"manage": ["172.17.1.1"], "storage": ["172.17.1.1"]}, "zone": 1}, "devices": ["/dev/vdb", "/dev/vdc"]}, {"node": {"hostnames": {"manage": ["172.17.1.2"], "storage": ["172.17.1.2"]}, "zone": 1}, "devices": ["/dev/vdd", "/dev/vde"]}]}]}
[root@glusterfs-bj-ali-bgp1 ~]# heketi-cli topology load --json=/etc/heketi/topology.json        # 如果开启了认证则是heketi-cli --user admin --secret admin文件里密码 topology load --json=/etc/heketi/topology.json
Creating cluster ... ID: 5ff75a20c566d3ff520026a2bcfbd359
    Allowing file volumes on cluster.
    Allowing block volumes on cluster.
    Creating node 172.17.1.1 ... ID: a778da2dfeebcb1dfd6d3ddb50ee9658
        Adding device /dev/vdb ... OK
        Adding device /dev/vdc ... OK
    Creating node 172.17.1.2 ... ID: 3e13521fdc3ff7ce1dec30a5107e9d43
        Adding device /dev/vdd ... OK
        Adding device /dev/vde ... OK

创建卷并挂载使用

[root@glusterfs-bj-ali-bgp1 ~]# heketi-cli volume create --size=6000 --replica=2            # 创建一个6000G的磁盘,副本数为2,时间大概2-3分钟。更多用法可以用heketi-cli volume create -h查看,当然测试也不用创建6000G
Name: vol_adf27fe83b028ab6d7b0fde93a749d20                                    # 这个名字记下
Size: 6000
Volume Id: adf27fe83b028ab6d7b0fde93a749d20
Cluster Id: 5ff75a20c566d3ff520026a2bcfbd359
Mount: 172.17.1.1:vol_adf27fe83b028ab6d7b0fde93a749d20
Mount Options: backup-volfile-servers=172.17.1.1
Block: false
Free Size: 0
Reserved Size: 0
Block Hosting Restriction: (none)
Block Volumes: []
Durability Type: replicate
Distribute Count: 2
Replica Count: 2
[root@glusterfs-bj-ali-bgp1 ~]# df -h                                        # 可以看出/var/lib/heketi/mounts共挂出12T磁盘(我的两个ip是同一个机器,所以挂载全在一个机器上)
Filesystem                                                                              Size  Used Avail Use% Mounted on
devtmpfs                                                                                 16G     0   16G   0% /dev
tmpfs                                                                                    16G  120K   16G   1% /dev/shm
tmpfs                                                                                    16G  680K   16G   1% /run
tmpfs                                                                                    16G     0   16G   0% /sys/fs/cgroup
/dev/vda1                                                                               118G  3.0G  111G   3% /
tmpfs                                                                                   3.2G     0  3.2G   0% /run/user/0
/dev/mapper/vg_fd0ee85ed75d2b5c9fa6f5085b930806-brick_898f2216c03bac4f3ba17f55a9640917  3.0T   35M  3.0T   1% /var/lib/heketi/mounts/vg_fd0ee85ed75d2b5c9fa6f5085b930806/brick_898f2216c03bac4f3ba17f55a9640917
/dev/mapper/vg_416dcbb83bb64cfad79bfaaf64649e98-brick_375140d6002ea63c8f86675469ef1ee8  3.0T   35M  3.0T   1% /var/lib/heketi/mounts/vg_416dcbb83bb64cfad79bfaaf64649e98/brick_375140d6002ea63c8f86675469ef1ee8
/dev/mapper/vg_541a2089248e4b33f465eb3b15a55170-brick_34aea0de9fbdcf36b7af09eed538ea00  3.0T   35M  3.0T   1% /var/lib/heketi/mounts/vg_541a2089248e4b33f465eb3b15a55170/brick_34aea0de9fbdcf36b7af09eed538ea00
/dev/mapper/vg_3d348787cb304b524fe3261c2a7ccb7d-brick_7c73c33b5a64b7af4159e21c12847a64  3.0T   35M  3.0T   1% /var/lib/heketi/mounts/vg_3d348787cb304b524fe3261c2a7ccb7d/brick_7c73c33b5a64b7af4159e21c12847a64

# 换一台机器
[root@devops-bj-ali-bgp1 ~]# yum install -y glusterfs-fuse                    # 安装客户端
[root@devops-bj-ali-bgp1 ~]# mount -t glusterfs -o backup-volfile-servers=glusterfs-bj-ali-bgp2,log-level=WARNING glusterfs-bj-ali-bgp1:/vol_adf27fe83b028ab6d7b0fde93a749d20 /data/loki
[root@devops-bj-ali-bgp1 ~]# df -h
Filesystem                                                   Size  Used Avail Use% Mounted on
...
glusterfs-bj-ali-bgp1:/vol_adf27fe83b028ab6d7b0fde93a749d20  5.9T   61G  5.8T   2% /data/loki
[root@devops-bj-ali-bgp1 ~]# cd /data/
[root@devops-bj-ali-bgp1 data]# ll loki/
total 16
drwxr-xr-x 8 root root 4096 Mar 16 08:00 boltdb-shipper-active
drwxr-xr-x 3 root root 4096 Mar 12 15:32 boltdb-shipper-cache
drwxr-xr-x 5 root root 4096 Mar 16 09:53 boltdb-shipper-compactor
drwx------ 2 root root 4096 Mar 16 11:18 chunks

# 回到原机器可以看到数据
[root@glusterfs-bj-ali-bgp1 ~]# ll /var/lib/heketi/mounts/*/*/*
/var/lib/heketi/mounts/vg_3d348787cb304b524fe3261c2a7ccb7d/brick_7c73c33b5a64b7af4159e21c12847a64/brick:
total 1308
drwxr-xr-x 8 root root    8192 Mar 16 08:00 boltdb-shipper-active
drwxr-xr-x 3 root root      25 Mar 12 15:32 boltdb-shipper-cache
drwxr-xr-x 5 root root      63 Mar 16 09:53 boltdb-shipper-compactor
drwx------ 2 root root 1179648 Mar 16 11:18 chunks

/var/lib/heketi/mounts/vg_416dcbb83bb64cfad79bfaaf64649e98/brick_375140d6002ea63c8f86675469ef1ee8/brick:
total 1324
drwxr-xr-x 8 root root    8192 Mar 16 08:00 boltdb-shipper-active
drwxr-xr-x 3 root root      25 Mar 12 15:32 boltdb-shipper-cache
drwxr-xr-x 5 root root      63 Mar 16 09:53 boltdb-shipper-compactor
drwx------ 2 root root 1196032 Mar 16 11:18 chunks

/var/lib/heketi/mounts/vg_541a2089248e4b33f465eb3b15a55170/brick_34aea0de9fbdcf36b7af09eed538ea00/brick:
total 1036
drwxr-xr-x 8 root root    117 Mar 16 08:00 boltdb-shipper-active
drwxr-xr-x 3 root root     33 Mar 12 15:32 boltdb-shipper-cache
drwxr-xr-x 5 root root     79 Mar 16 09:53 boltdb-shipper-compactor
drwx------ 2 root root 909312 Mar 16 11:18 chunks

/var/lib/heketi/mounts/vg_fd0ee85ed75d2b5c9fa6f5085b930806/brick_898f2216c03bac4f3ba17f55a9640917/brick:
total 860
drwxr-xr-x 8 root root    145 Mar 16 08:00 boltdb-shipper-active
drwxr-xr-x 3 root root     33 Mar 12 15:32 boltdb-shipper-cache
drwxr-xr-x 5 root root     79 Mar 16 09:53 boltdb-shipper-compactor
drwx------ 2 root root 745472 Mar 16 11:18 chunks
[root@glusterfs-bj-ali-bgp1 ~]# 
[root@glusterfs-bj-ali-bgp1 ~]# heketi-cli volume create --size=1000 --replica=2            # 后期可以继续创建其他卷,再分个1000G的双副本的
Name: vol_8be30f4b5edc2b6dee325492e7400c96
Size: 1000
Volume Id: 8be30f4b5edc2b6dee325492e7400c96
Cluster Id: 5ff75a20c566d3ff520026a2bcfbd359
Mount: 172.17.32.102:vol_8be30f4b5edc2b6dee325492e7400c96
Mount Options: backup-volfile-servers=172.17.32.101
Block: false
Free Size: 0
Reserved Size: 0
Block Hosting Restriction: (none)
Block Volumes: []
Durability Type: replicate
Distribute Count: 1
Replica Count: 2
[root@glusterfs-bj-ali-bgp1 ~]# df -h                                                        # 可以看出新的vg,然后去对端机器正常挂载使用即可
Filesystem                                                                              Size  Used Avail Use% Mounted on
devtmpfs                                                                                 16G     0   16G   0% /dev
tmpfs                                                                                    16G  120K   16G   1% /dev/shm
tmpfs                                                                                    16G  732K   16G   1% /run
tmpfs                                                                                    16G     0   16G   0% /sys/fs/cgroup
/dev/vda1                                                                               118G  3.0G  110G   3% /
tmpfs                                                                                   3.2G     0  3.2G   0% /run/user/0
/dev/mapper/vg_fd0ee85ed75d2b5c9fa6f5085b930806-brick_898f2216c03bac4f3ba17f55a9640917  3.0T  1.6G  3.0T   1% /var/lib/heketi/mounts/vg_fd0ee85ed75d2b5c9fa6f5085b930806/brick_898f2216c03bac4f3ba17f55a9640917
/dev/mapper/vg_416dcbb83bb64cfad79bfaaf64649e98-brick_375140d6002ea63c8f86675469ef1ee8  3.0T  363M  3.0T   1% /var/lib/heketi/mounts/vg_416dcbb83bb64cfad79bfaaf64649e98/brick_375140d6002ea63c8f86675469ef1ee8
/dev/mapper/vg_541a2089248e4b33f465eb3b15a55170-brick_34aea0de9fbdcf36b7af09eed538ea00  3.0T  1.7G  3.0T   1% /var/lib/heketi/mounts/vg_541a2089248e4b33f465eb3b15a55170/brick_34aea0de9fbdcf36b7af09eed538ea00
/dev/mapper/vg_3d348787cb304b524fe3261c2a7ccb7d-brick_7c73c33b5a64b7af4159e21c12847a64  3.0T  362M  3.0T   1% /var/lib/heketi/mounts/vg_3d348787cb304b524fe3261c2a7ccb7d/brick_7c73c33b5a64b7af4159e21c12847a64
/dev/mapper/vg_541a2089248e4b33f465eb3b15a55170-brick_d4af7bb821d0e29c9e140e067bdeff13 1000G   35M 1000G   1% /var/lib/heketi/mounts/vg_541a2089248e4b33f465eb3b15a55170/brick_d4af7bb821d0e29c9e140e067bdeff13
/dev/mapper/vg_416dcbb83bb64cfad79bfaaf64649e98-brick_79bc81de736ff888511b2bde46678b41 1000G   35M 1000G   1% /var/lib/heketi/mounts/vg_416dcbb83bb64cfad79bfaaf64649e98/brick_79bc81de736ff888511b2bde46678b41
原文地址:https://www.cnblogs.com/bfmq/p/14542635.html