Ovirt学习第4篇-超融合方案下的存储扩容(原节点)

1、扩容准备

目前情况:
有一个三节点集群,每个节点上有两块盘,一块系统盘100G,数据盘200G,集群可用空间为200G,现在在每一个节点上添加一块200G的盘,分别进行如下两种扩容测试

  • 扩容原数据卷
  • 创建新的卷

2、node1主机节点进行扩容

扩容原数据卷data
node1节点为部署engine虚拟机的节点
登录node1节点,选择-Hostedengine-Manage GlusterFS
03ht1

选择data卷进行扩展
03ht2

03ht3

03ht4

03ex1

完成扩展后,查看卷情况
03ht5

engine上查看
03ht6

服务器上查看
gluster volume info data

Volume Name: data
Type: Distributed-Replicate
Volume ID: 921be4dc-31a7-4213-883d-f8766b4522f6
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 3 = 6
Transport-type: tcp
Bricks:
Brick1: linuxwt60.com:/gluster_bricks/data/data
Brick2: linuxwt61.com:/gluster_bricks/data/data
Brick3: linuxwt62.com:/gluster_bricks/data/data
Brick4: linuxwt61.com:/gluster_bricks/data1/data1
Brick5: linuxwt62.com:/gluster_bricks/data1/data1
Brick6: linuxwt60.com:/gluster_bricks/data1/data1
Options Reconfigured:
performance.client-io-threads: on
nfs.disable: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
performance.quick-read: off
performance.read-ahead: off
performance.io-cache: off
performance.low-prio-threads: 32
network.remote-dio: enable
cluster.eager-lock: enable
cluster.quorum-type: auto
cluster.server-quorum-type: server
cluster.data-self-heal-algorithm: full
cluster.locking-scheme: granular
cluster.shd-max-threads: 8
cluster.shd-wait-qlength: 10000
features.shard: on
user.cifs: off
cluster.choose-local: off
client.event-threads: 4
server.event-threads: 4
storage.owner-uid: 36
storage.owner-gid: 36
network.ping-timeout: 30
performance.strict-o-direct: on
cluster.granular-entry-heal: enable

从上面可以看出ovirt以这种方式扩容后的卷为分布式复制卷

看一下扩容后的容量
03ht7
容量从200G扩容到400G了

扩容过程中遇到下面一个错误

TASK [gluster.infra/roles/backend_setup : Create volume groups] ****************
task path: /etc/ansible/roles/gluster.infra/roles/backend_setup/tasks/vg_create.yml:59
failed: [linuxwt60.com] (item={'key': 'gluster_vg_sdc', 'value': [{'vgname': 'gluster_vg_sdc', 'pvname': '/dev/sdc'}]}) => {"ansible_loop_var": "item", "changed": false, "err": " Device /dev/sdc excluded by a filter.\n", "item": {"key": "gluster_vg_sdc", "value": [{"pvname": "/dev/sdc", "vgname": "gluster_vg_sdc"}]}, "msg": "Creating physical volume '/dev/sdc' failed", "rc": 5}
changed: [linuxwt61.com] => (item={'key': 'gluster_vg_sdc', 'value': [{'vgname': 'gluster_vg_sdc', 'pvname': '/dev/sdc'}]}) => {"ansible_loop_var": "item", "changed": true, "item": {"key": "gluster_vg_sdc", "value": [{"pvname": "/dev/sdc", "vgname": "gluster_vg_sdc"}]}}
changed: [linuxwt62.com] => (item={'key': 'gluster_vg_sdc', 'value': [{'vgname': 'gluster_vg_sdc', 'pvname': '/dev/sdc'}]}) => {"ansible_loop_var": "item", "changed": true, "item": {"key": "gluster_vg_sdc", "value": [{"pvname": "/dev/sdc", "vgname": "gluster_vg_sdc"}]}}

解决办法:
编辑/etc/lvm/lvm.conf第357行,注释掉
03ht8

创建新卷newdata
在上面的基础上在每个节点上添加一块300G的硬盘
登录node1(部署hostengine的节点)
Hosted Engine -- Manage Gluster -- Create Volume
03ht9

03ht10

03ht11

03ht12

03ht14

这类扩容相当于是新创建的卷,与原来的data卷、engine卷无关系
03ht16
容量增加到700G了

到这里该情况的扩容结束了,后面简单说一下卷的删除和域的删除,先删除卷,等域处于失效状态再销毁域
03ht17

删除完后还有一些后续的工作,比如上面删除的卷newdata,虽然我们在engine管理页面上删除了,但是服务器节点还剩下逻辑卷没有删除,设备/dev/sdd还处于被使用状态
03ht18
正常来讲应该是按照以下步骤来处理

  • 卸载相关逻辑卷挂载
  • 清除/etc/fstab中的相关挂载设置
  • lvremove、vgremove、pvremove依次删除逻辑卷、卷组、设备卷标
  • 重启
    具体操作如下
    先查看要删除的卷信息
    lvdisplay
    03ht19

lvremove /dev/gluster_vg_sdd/gluster_lv_newdata
vgremove gluster_vg_sdd

但是有时候在ovirt这个产品中无法按照这个方式实现/dev/sdd的清空,最后只好使用磁盘格式化的方式
fdisk /dev/sdd 先创建分区,保存退出
fdisk /dev/sdd 删除分区,保存退出
重启

3、engine管理机上进行扩容

上面是通过node1计算机点进行的扩容,但是还可以通过engine节点来进行扩容

扩容原数据卷data
gluster volume info data

Volume Name: data
Type: Replicate
Volume ID: d8bc85d1-8346-4f40-8246-ceaeae54f590
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: linuxwt70.com:/gluster_bricks/data/data
Brick2: linuxwt71.com:/gluster_bricks/data/data
Brick3: linuxwt72.com:/gluster_bricks/data/data

可以看到目前data卷类型为复制

下面使用engine管理界面来进行扩容
选择主机创建brick
03sd1

这里报了一个错误
03sd3

查看日志
tail -f /var/log/ovirt-engine/engine.log
发现错误

2021-03-23 14:39:03,373+08 ERROR [org.ovirt.engine.core.bll.gluster.CreateBrickCommand] (default task-40) [18f7b337-8293-4bae-983e-8b23f6d2d7ee] Command 'org.ovirt.engine.core.bll.gluster.CreateBrickCommand' failed: Task Create volume groups failed to execute. Please check logs for more details: /var/log/ovirt-engine/brick-setup/ovirt-gluster-brick-ansible-20210323143836-linuxwt72.com-18f7b337-8293-4bae-983e-8b23f6d2d7ee.log

上面错误提示让我们查看日志
tail -f /var/log/ovirt-engine/brick-setup/ovirt-gluster-brick-ansible-20210323143836-linuxwt72.com-18f7b337-8293-4bae-983e-8b23f6d2d7ee.log

2021-03-23 14:39:03 CST - failed: [linuxwt72.com] (item=/dev/sdc) => {"ansible_loop_var": "item", "changed": false, "err": " Device /dev/sdc excluded by a filter.\n", "item": "/dev/sdc", "msg": "Creating physical volume '/dev/sdc' failed", "rc": 5}

这个错误前面碰到过
解决方式
注释掉文件/etc/lvm/lvm.conf第357行

03sd4

在其他主机节点重复操作创建brick

下面将刚才创建的三个brick添加到data卷中
03sd5

03sd6

从上图可以看出给原卷扩容只能扩容成分布式复制卷

gluster volume info data查看data卷

Volume Name: data
Type: Distributed-Replicate
Volume ID: d8bc85d1-8346-4f40-8246-ceaeae54f590
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 3 = 6
Transport-type: tcp
Bricks:
Brick1: linuxwt70.com:/gluster_bricks/data/data
Brick2: linuxwt71.com:/gluster_bricks/data/data
Brick3: linuxwt72.com:/gluster_bricks/data/data
Brick4: linuxwt70.com:/gluster_bricks/data1/data1
Brick5: linuxwt71.com:/gluster_bricks/data1/data1
Brick6: linuxwt72.com:/gluster_bricks/data1/data1

03sd7

在第二节中我们讲过如何将新建的卷及域删除后使得原设备/dev/sdd恢复至未使用状态,这里我们再来看看如何将data卷中的brick删除并使得设备/dev/sdc恢复至未使用状态

删除brick
03sd9

03sd10

03sd11

03sd12

删除卷后需要到服务器执行以下操作
查看挂载情况
lsblk
df -h
03sd13
删除/etc/fstab中的挂载信息
03sd14

一次删除lvm卷、卷组、物理卷标识
03sd15

注意可以使用lvdisplay来查询逻辑卷等信息
03sd16

lsblk
03sd17
设备/dev/sdc已处于原始状态
但是engine管理界面的sdc上提示设备还处于使用状态,所以重启所有节点后发现/dev/sdc仍然处于使用状态
我们需要将设备恢复至未分区未格式化的状态,可以理解为最开始添加磁盘到服务器上的时候的状态,可以通过命令blkid来验证,如果无相关列则表明设备处于未分区未格式化状态,类似如下这种
03sd21

lsblk是可以看到/dev/sdc的

使用如下命令来达到我们的目的
dd if=/dev/zero of=/dev/sdc bs=1M count=1024
这个命令适合已有分区的盘重新进行分区前使用,新盘就没有必要了

完成后,engine界面进行设备同步
03sd22

03sd23

创建新卷newdata
在三个主机节点使用设备/dev/sdc创建brick
03sd24

新建卷newdata
03sd25
这里我们使用的是分布式卷,这和前面通过node1节点来创建卷有所区别(因为这种方式在v4.4.3版本里只能创建复制卷)

03sd26

创建newdata存储域挂载到newdata卷上
03sd27

03sd28

4、扩容后需要做的处理

gluster volume rebalance data fix-layout start识别扩容后的卷data的最新拓扑
成功会返回

volume rebalance: data: success: Rebalance on data has been started successfully
如果不执行此命令,新的数据仍然会存储到原来的brick上

gluster volume rebalance data start原有数据向新brick均匀迁移