官方文档: GlusterFS Documentation
GlusterFS 是一个可扩展的网络文件系统,适用于数据密集型任务,例如云存储和媒体流。GlusterFS 是免费的开源软件
Gluster 是一个可扩展的分布式文件系统,它将来自多个服务器的磁盘存储资源聚合到一个全局命名空间中。
环境说明
主机名 | IP地址 | 配置 | 角色 | 安装软件 |
---|---|---|---|---|
gluster-server1 | 192.168.200.13 | 2C 2G | glusterfs, heketi | glusterFS 相关软件, Heketi |
gluster-server2 | 192.168.200.14 | 2C 2G | glusterfs, heketi | glusterFS 相关软件 |
安装 GlusterFS
在所有节点上配置 /etc/hosts 解析
1
2
3
4cat >> /etc/hosts <<EOF
192.168.200.13 gluster-server1
192.168.200.14 gluster-server2
EOF在所有节点上执行以下命令,格式化用作 bricks 的磁盘
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 创建磁盘分区
fdisk /dev/sdb
# 格式化分区,分配文件系统
mkfs.ext4 /dev/sdb1
# 创建分区挂载目录
mkdir /glusterfs/brick -p
# 配置开机挂载
echo '/dev/sdb1 /glusterfs/brick ext4 defaults 0 0' >>/etc/fstab
# 手动挂载分区
mount -av所有节点安装 glusterFS
1
2
3
4
5
6
7
8# 安装 GlusterFS 的 yum repo
yum install -y centos-release-gluster
# 安装 glusterfs 相关组件
yum install -y glusterfs glusterfs-server glusterfs-cli glusterfs-geo-replication glusterfs-rdma
# 启动 GlusterFS 并配置开机启动
systemctl enable --now glusterdiptables 配置,如果未关闭 iptables,则需要添加以下规则
1
iptables -I INPUT -p all -s <ip-address> -j ACCEPT
注: ip-address 是另一个节点的地址。
配置可信池
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 随便找个节点执行以下命令添加节点到可信池
gluster peer probe gluster-server2
# 查看可信池的状态
# gluster peer status
Number of Peers: 1
Hostname: gluster-server2
Uuid: 98169fc8-51bd-4162-ba07-0f251dfd54de
State: Peer in Cluster (Connected)
# 查看 可信池中所有的节点
# gluster pool list
UUID Hostname State
98169fc8-51bd-4162-ba07-0f251dfd54de gluster-server2 Connected
74a1b793-cbb0-47d3-aa04-db146be73459 localhost Connected创建一个 volume
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 所有节点执行以下命令,创建卷的物理目录
mkdir /glusterfs/brick/monitor-data
# 随便一个节点执行以下命令,创建 volume
gluster volume create monitor-data replica 2 \
gluster-server1:/glusterfs/brick/monitor-data \
gluster-server2:/glusterfs/brick/monitor-data
# 启动 volume
gluster volume start monitor-data
# 查看 volume 信息
gluster volume info
# 查看 volume 状态
gluster volume status再找一台机器测试 GlusterFS 卷
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 安装 GlusterFS 客户端工具
yum install -y glusterfs-fuse
# 挂载 GlusterFS 卷
mount -t glusterfs gluster-server1:/monitor-data /mnt
# 测试写入文件到 /mnt 目录
for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done
# 在客户端检查生成的文件
ls -lA /mnt/copy* | wc -l
# 在 Gluster 集群服务端查看文件
ls -lA /glusterfs/brick/monitor-data/copy* |wc -l
使用 Heketi 管理 GlusterFS
Kubernetes 中使用 GlusterFS 作为持久化存储,要提供 storageClass 使用需要依赖 Heketi 工具。Heketi 是一个具有 resetful 接口的 glusterfs 管理程序,作为kubernetes 的 Storage 存储的 external provisioner。
Heketi 提供了一个 RESTful 管理界面,可用于管理 GlusterFS 卷的生命周期。借助 Heketi,像 OpenStack Manila,Kubernetes 和 OpenShift 这样的云服务可以动态地配置 GlusterFS 卷和任何支持的持久性类型。Heketi 将自动确定整个集群的 brick 位置,确保将 brick 及其副本放置在不同的故障域中。Heketi 还支持任意数量的GlusterFS 集群,允许云服务提供网络文件存储,而不受限于单个 GlusterFS 集群。
Heketi: 提供基于 RESTful 接口管理 glusterfs 的功能,可以方便的创建集群管理 glusterfs 的 node,device,volume;与 k8s 结合可以创建动态的PV,扩展glusterfs 存储的动态管理功能。主要用来管理 glusterFS volume 的生命周期,初始化时候就要分配好 **裸磁盘(未格式化)
**设备.
注意事项
- 安装 Glusterfs 客户端:每个 kubernetes 集群的节点需要安装 gulsterfs 的客户端,如 glusterfs-cli, glusterfs-fuse.主要用于在每个 node节点挂载 volume。
- 加载内核模块:每个 kubernetes 集群的节点运行 modprobe dm_thin_pool,加载内核模块。
- 高可用(至少三个节点):至少需要三个节点用来部署 glusterfs 集群,并且这3个节点每个节点需要至少一个空余的磁盘。
正在运行的 glusterfs 集群,至少有三个 node 节点,每个节点至少有一个可用的裸块设备(如EBS卷或本地磁盘,就是没有格式化的).
用于运行GlusterFS节点必须为GlusterFS通信打开相应的端口(如果开启了防火墙的情况下,没开防火墙就不需要这些操作)。
安装 Heketi
Heketi 是由 golang 编写,直接静态编译运行二进制即可,也可以通过 yum 安装以及 docker 部署,主要会产生 db 文件存储 cluster、node、device、volume 等信息。
使用二进制包的方式安装
1
2
3
4
5
6
7
8
9
10
11
12# 下载二进制包
wget https://github.com/heketi/heketi/releases/download/v10.4.0/heketi-v10.4.0-release-10.linux.amd64.tar.gz
# 创建安装目录
mkdir -p /usr/local/heketi/{bin,conf,data}
# 解压安装包
tar xf heketi-v10.4.0-release-10.linux.amd64.tar.gz
# 拷贝文件
mv heketi/{heketi,heketi-cli} /usr/local/heketi/bin/
mv heketi/heketi.json /usr/local/heketi/conf/创建 ssh-key
1
2
3
4
5ssh-keygen -f /usr/local/heketi/conf/heketi_key -t rsa -N ''
# 拷贝公钥到 GlusterFS 集群节点
ssh-copy-id -i /usr/local/heketi/conf/heketi_key.pub root@gluster-server1
ssh-copy-id -i /usr/local/heketi/conf/heketi_key.pub root@gluster-server2修改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# 主要修改的地方有以下几个地方
"use_auth": true # 默认是 false, 这里改为 true
"jwt"."admin"."key": "adminkey" # 添加一个 adminkey
"jwt"."user"."key": "userkey" # 添加一个 userkey
"glusterfs"."executor": "ssh" # 修改 exector 模式为 ssh
# 修改 ssh exector 相关配置
"sshexec": {
"keyfile": "/usr/local/heketi/conf/heketi_key",
"user": "root",
"port": "22",
"sudo": true,
"fstab": "/etc/fstab",
# 修改 db 配置
"db": "/usr/local/heketi/data/heketi.db",
# 删除以下配置,或者配置上相关的参数,否则会启动失败
"xfs_sw": "Optional: Specify number of data disks in the underlying RAID device.",
"xfs_su": "Optional: Specifies a stripe unit or RAID chunk size.",
"gluster_cli_timeout": "Optional: Timeout, in seconds, passed to the gluster cli invocations",需要说明的是,heketi 有三种 executor,分别为 mock、ssh、kubernetes,建议在测试环境使用 mock,生产环境使用 ssh,当 glusterfs 以容器的方式部署在 kubernetes 上时,才使用 kubernetes。我们这里将 glusterfs 和 heketi 独立部署,使用 ssh 的方式。使用docker部署的时候,还需将 /var/lib/heketi/mounts 挂载至容器里面, heketi 会将此目录作为 gluster volume 的挂载点。
systemd 配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21cat > /usr/lib/systemd/system/heketi.service <<EOF
[Unit]
Description=RESTful based volume management framework for GlusterFS
Before=network-online.target
After=network-online.target
Documentation=https://github.com/heketi/heketi
[Service]
Type=simple
LimitNOFILE=65536
ExecStart=/usr/local/heketi/bin/heketi --config=/usr/local/heketi/conf/heketi.json
KillMode=process
Restart=on-failure
RestartSec=5
SuccessExitStatus=15
StandardOutput=syslog
StandardError=syslog
[Install]
WantedBy=multi-user.target
EOF启动 heketi 并配置开机启动
1
2systemctl daemon-reload
systemctl enable --now heketi.service创建命令快捷方式
1
ln -s /usr/local/heketi/bin/heketi-cli /usr/local/bin/
管理 GlusterFS
手动添加配置
添加 cluster
1
2
3
4
5
6
7
8# 创建集群
heketi-cli cluster create \
--user admin \
--secret adminkey \
--server http://192.168.200.13:8080 \
--json
{"id":"91e573816d33edde32644eacd6366149","nodes":[],"volumes":[],"block":true,"file":true,"blockvolumes":[]}将 GlusterFS 节点作为 node 添加到 cluster
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# 添加 gluster-server1 节点到集群
heketi-cli node add \
--user admin \
--secret adminkey \
--cluster "91e573816d33edde32644eacd6366149" \
--management-host-name gluster-server1 \
--storage-host-name 192.168.200.13 \
--zone 1 \
--json
# 添加 gluster-server2 节点到集群
heketi-cli node add \
--user admin \
--secret adminkey \
--cluster "91e573816d33edde32644eacd6366149" \
--management-host-name gluster-server2 \
--storage-host-name 192.168.200.14 \
--zone 1 \
--json查看节点
1
2
3heketi-cli node list \
--user admin \
--secret adminkey添加 device,机器只是作为 gluster 的运行单元,volume 是基于 device 创建的。同时需要特别说明的是,目前 heketi 仅支持使用裸分区或裸磁盘(未格式化)添加为device,不支持文件系统。
1
2
3
4
5
6
7
8
9
10
11heketi-cli device add \
--name="/dev/sdb" \
--node="4d5376c4a7d21de21579eefb5ae5ccad" \
--user=admin \
--secret=adminkey
heketi-cli device add \
--name="/dev/sdb" \
--node="577915f38a3422c043640cdd15fb87ab" \
--user=admin \
--secret=adminkey添加 volume
1
2
3
4
5
6heketi-cli volume create \
--size=3 \
--replica=2 \
--user=admin \
--secret=adminkey \
--clusters=91e573816d33edde32644eacd6366149
或者使用 topology 配置
创建 topology.json 配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30cat > /usr/local/heketi/conf/topology.json <<EOF
{
"clusters": [
{
"nodes": [
{
"node": {
"hostnames": {
"manage": ["gluster-server1"],
"storage": ["192.168.200.13"]
},
"zone": 1
},
"devices": ["/dev/sdb"]
},
{
"node": {
"hostnames": {
"manage": ["gluster-server2"],
"storage": ["192.168.200.14"]
},
"zone": 1
},
"devices": ["/dev/sdb"]
},
]
}
]
}
EOF创建集群配置
1
2
3
4
5
6heketi-cli \
--server http://localhost:8080 \
--user admin \
--secret adminkey \
topology load \
--json=/usr/local/heketi/conf/topology.json
测试使用 StorageClass
创建 storageclass 资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35# cat storageclass-glusterfs.yaml
apiVersion: v1
kind: Secret
metadata:
name: heketi-secret
namespace: default
data:
key: YWRtaW5rZXk=
type: kubernetes.io/glusterfs
---
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
name: glusterfs
provisioner: kubernetes.io/glusterfs
reclaimPolicy: Delete
allowVolumeExpansion: true
parameters:
resturl: "http://192.168.200.13:8080"
clusterid: "91e573816d33edde32644eacd6366149"
restauthenabled: "true"
secretNamespace: "default"
secretName: "heketi-secret"
# restuser: "admin"
# restuserkey: "adminkey"
gidMin: "40000"
gidMax: "50000"
volumetype: "replicate:2"
# 创建 sc 资源
kubectl create -f storageclass-glusterfs.yaml
# 配置集群默认的 StorageClass
kubectl patch storageclass glusterfs -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
Deployment 使用方式
创建资源清单 deploy-nginx.yaml 文件,内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: deploy-nginx-pvc
spec:
storageClassName: glusterfs
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumes:
- name: www
persistentVolumeClaim:
claimName: deploy-nginx-pvc创建资源
1
2
3
4
5
6# 创建资源
# kubectl create -f deploy-nginx.yaml
persistentvolumeclaim/deploy-nginx-pvc created
service/nginx created
deployment.apps/nginx created查看创建的资源
1
2
3
4
5
6
7
8
9
10# kubectl get pv,pvc,svc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-d3a0e370-2b08-4668-98bd-164453be4213 2Gi RWO Delete Bound default/deploy-nginx-pvc glusterfs 42s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/deploy-nginx-pvc Bound pvc-d3a0e370-2b08-4668-98bd-164453be4213 2Gi RWO glusterfs 44s
# 查看 pod 的挂载信息
# kubectl exec -it nginx-6bc9d97c4d-xwz92 -- df -Th |grep glusterfs
192.168.200.13:vol_2a9720f8a6828cded7932e1465df1b43 fuse.glusterfs 2.0G 54M 2.0G 3% /usr/share/nginx/html在 heketi 上查看相关的卷信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55heketi-cli topology info --user admin --secret adminkey --json |jq '.clusters[].volumes[] | select(.id == "2a9720f8a6828cded7932e1465df1b43")'
{
"size": 2,
"name": "vol_2a9720f8a6828cded7932e1465df1b43",
"durability": {
"type": "replicate",
"replicate": {
"replica": 2
},
"disperse": {}
},
"gid": 40000,
"glustervolumeoptions": [
"",
""
],
"snapshot": {
"enable": true,
"factor": 1
},
"id": "2a9720f8a6828cded7932e1465df1b43",
"cluster": "91e573816d33edde32644eacd6366149",
"mount": {
"glusterfs": {
"hosts": [
"192.168.200.14",
"192.168.200.13"
],
"device": "192.168.200.14:vol_2a9720f8a6828cded7932e1465df1b43",
"options": {
"backup-volfile-servers": "192.168.200.13"
}
}
},
"blockinfo": {},
"bricks": [
{
"id": "b46e902c5a19d65b77b68777aaf0ecd1",
"path": "/var/lib/heketi/mounts/vg_2c952713ab48178317fd2637e2121f0a/brick_b46e902c5a19d65b77b68777aaf0ecd1/brick",
"device": "2c952713ab48178317fd2637e2121f0a",
"node": "4d5376c4a7d21de21579eefb5ae5ccad",
"volume": "2a9720f8a6828cded7932e1465df1b43",
"size": 2097152
},
{
"id": "b92ef7661fc770bf9022eb57b1521d55",
"path": "/var/lib/heketi/mounts/vg_81da5bed2195185a9f06313ed0b1945c/brick_b92ef7661fc770bf9022eb57b1521d55/brick",
"device": "81da5bed2195185a9f06313ed0b1945c",
"node": "577915f38a3422c043640cdd15fb87ab",
"volume": "2a9720f8a6828cded7932e1465df1b43",
"size": 2097152
}
]
}同时,可以在 GlusterFS 节点上看到响应的卷挂载信息
1
2
3
4
5
6
7
8
9
10# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 979M 0 979M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /dev/shm
tmpfs tmpfs 991M 9.6M 981M 1% /run
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root ext4 55G 2.2G 50G 5% /
/dev/sda1 xfs 1014M 138M 877M 14% /boot
/dev/mapper/vg_81da5bed2195185a9f06313ed0b1945c-brick_3ee0de7a5f49dd240794fbe292b8ed0f xfs 1014M 33M 982M 4% /var/lib/heketi/mounts/vg_81da5bed2195185a9f06313ed0b1945c/brick_3ee0de7a5f49dd240794fbe292b8ed0f
tmpfs
StatefulSet 使用方式
创建资源清单文件 sts-nginx.yaml,内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
serviceName: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteMany" ]
storageClassName: "glusterfs"
resources:
requests:
storage: 1Gi创建资源
1
2
3# kubectl create -f sts-nginx.yaml
service/nginx created
statefulset.apps/nginx created查看创建的资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14# kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-24c41cae-8b30-473f-a706-8e26152d6108 1Gi RWX Delete Bound default/www-nginx-1 glusterfs 96s
persistentvolume/pvc-962d170f-b706-42a7-a4ae-396fe714a86b 1Gi RWX Delete Bound default/www-nginx-0 glusterfs 114s
persistentvolume/pvc-eb5afafb-4577-4f38-ae1a-2194af55fcdd 1Gi RWX Delete Bound default/www-nginx-2 glusterfs 66s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/www-nginx-0 Bound pvc-962d170f-b706-42a7-a4ae-396fe714a86b 1Gi RWX glusterfs 118s
persistentvolumeclaim/www-nginx-1 Bound pvc-24c41cae-8b30-473f-a706-8e26152d6108 1Gi RWX glusterfs 97s
persistentvolumeclaim/www-nginx-2 Bound pvc-eb5afafb-4577-4f38-ae1a-2194af55fcdd 1Gi RWX glusterfs 67s
# 查看 pod 挂载信息
# kubectl exec -it nginx-0 -- df -Th |grep gluster
192.168.200.13:vol_59e91fe1637c6d218468f899c79fdcd3 fuse.glusterfs 1014M 43M 972M 5% /usr/share/nginx/html在 heketi 上查看相关的卷信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54# heketi-cli topology info --user admin --secret adminkey --json |jq '.clusters[].volumes[] | select(.id == "59e91fe1637c6d218468f899c79fdcd3")'
{
"size": 1,
"name": "vol_59e91fe1637c6d218468f899c79fdcd3",
"durability": {
"type": "replicate",
"replicate": {
"replica": 2
},
"disperse": {}
},
"gid": 40000,
"glustervolumeoptions": [
"",
""
],
"snapshot": {
"enable": true,
"factor": 1
},
"id": "59e91fe1637c6d218468f899c79fdcd3",
"cluster": "91e573816d33edde32644eacd6366149",
"mount": {
"glusterfs": {
"hosts": [
"192.168.200.14",
"192.168.200.13"
],
"device": "192.168.200.14:vol_59e91fe1637c6d218468f899c79fdcd3",
"options": {
"backup-volfile-servers": "192.168.200.13"
}
}
},
"blockinfo": {},
"bricks": [
{
"id": "6600380e741ebb5b91bf606b30332a16",
"path": "/var/lib/heketi/mounts/vg_2c952713ab48178317fd2637e2121f0a/brick_6600380e741ebb5b91bf606b30332a16/brick",
"device": "2c952713ab48178317fd2637e2121f0a",
"node": "4d5376c4a7d21de21579eefb5ae5ccad",
"volume": "59e91fe1637c6d218468f899c79fdcd3",
"size": 1048576
},
{
"id": "91ec92a239279afad08e98729051f14a",
"path": "/var/lib/heketi/mounts/vg_81da5bed2195185a9f06313ed0b1945c/brick_91ec92a239279afad08e98729051f14a/brick",
"device": "81da5bed2195185a9f06313ed0b1945c",
"node": "577915f38a3422c043640cdd15fb87ab",
"volume": "59e91fe1637c6d218468f899c79fdcd3",
"size": 1048576
}
]
}同时可以在对应节点上查看挂载信息
1
2
3
4
5
6
7
8
9
10
11
12# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 979M 0 979M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /dev/shm
tmpfs tmpfs 991M 9.7M 981M 1% /run
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root ext4 55G 2.2G 50G 5% /
/dev/sda1 xfs 1014M 138M 877M 14% /boot
/dev/mapper/vg_2c952713ab48178317fd2637e2121f0a-brick_6600380e741ebb5b91bf606b30332a16 xfs 1014M 33M 982M 4% /var/lib/heketi/mounts/vg_2c952713ab48178317fd2637e2121f0a/brick_6600380e741ebb5b91bf606b30332a16
/dev/mapper/vg_2c952713ab48178317fd2637e2121f0a-brick_e6aff711da966af8b3e43105e593b36e xfs 1014M 33M 982M 4% /var/lib/heketi/mounts/vg_2c952713ab48178317fd2637e2121f0a/brick_e6aff711da966af8b3e43105e593b36e
/dev/mapper/vg_2c952713ab48178317fd2637e2121f0a-brick_cae626229a05cd64eeba4593a5675b8b xfs 1014M 33M 982M 4% /var/lib/heketi/mounts/vg_2c952713ab48178317fd2637e2121f0a/brick_cae626229a05cd64eeba4593a5675b8b
tmpfs
Gluster 集群扩容方法
方法一: 添加新硬盘
添加新的硬盘到虚拟机,然后使用以下命令扩容集群
1
heketi-cli device add --name="/dev/sdc" --node="7f20155c5ed85430bd19d77f966cc103" --user=admin --secret=adminkey
方法二: 扩容原有的虚拟机硬盘
编辑虚拟机,扩容原有硬盘,从 200G 扩容到 300G
登录虚拟机,执行以下命令,刷新磁盘容量
1
partprobe /dev/sdc
刷新 pv 的容量
1
pvresize /dev/sdc
同步 device 信息到 topology
1
2
3
4
5
6
7
8# 同步前查看设备信息
heketi-cli device info f174eac91470d0de715a1a903110a8ea --user admin --secret adminkey --json | jq .storage
# 同步磁盘容量信息
heketi-cli device resync f174eac91470d0de715a1a903110a8ea --user admin --secret adminkey
# 同步后再次查看容量信息
heketi-cli device info f174eac91470d0de715a1a903110a8ea --user admin --secret adminkey --json | jq .storage