当前位置:首页 > 文章列表 > 数据库 > MySQL > 分布式数据库使用逻辑卷管理存储之扩容

分布式数据库使用逻辑卷管理存储之扩容

来源:SegmentFault 2023-01-26 21:09:15 0浏览 收藏

对于一个数据库开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《分布式数据库使用逻辑卷管理存储之扩容》,主要介绍了存储、MySQL、数据库、扩容、架构,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

开务数据库(原:云溪数据库)作为一款浪潮自主研发的国产分布式数据库,一大特性便是可支持 PB 级的数据服务。从存储层面来看,开务数据库不仅可以使用物理磁盘,也可以使用逻辑卷的方式来管理存储。使用逻辑卷,主要有以下两大场景:

(1)当业务上使用大容量的磁盘,单个物理磁盘不能满足需求时。例如:我们需要在 /data 下挂载 30TB 的存储,而单个磁盘没有这么大的容量。如果使用逻辑卷,将多个小容量的磁盘组合成一个卷组,聚合为一个大的逻辑磁盘,即能满足需求。

(2)当数据量不确定,后期需要扩展磁盘时。在业务初期规划磁盘时,不能完全知道需要分配多少磁盘空间。若使用物理卷,后期则无法扩展。如果使用逻辑卷,可以根据后期的需求量,手动扩展和收缩。

- 基本概念 -

逻辑卷是使用逻辑卷组管理 (Logic Volume Manager) 创建出来的设备,如果要了解逻辑卷,那么首先需要了解逻辑卷管理中的一些概念。

  1. 逻辑卷管理器(Logical Volume Manager,LVM):LVM 将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。LVM 使系统管理员可以更方便的为应用与用户分配存储空间。
  2. 物理卷(Physical Volume,PV):指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如 RAID),是 LVM 的基本存储逻辑块。
  3. 卷组(Volume Group,VG):PV 的集合。是由一个或多个物理卷所组成的存储池,在卷组上能创建一个或多个逻辑卷。
  4. 逻辑卷(Logic Volume,LV):VG 中画出来的一块逻辑磁盘。类似于非 LVM 系统中的硬盘分区,它建立在卷组之上,是一个标准的块设备,在逻辑卷之上可以建立文件系统。

物理磁盘或者磁盘分区转换为物理卷,一个或多个物理卷聚集形成一个或多个卷组,而逻辑卷就是从某个卷组里面抽象出来的一块磁盘空间。具体架构如下:

image.png

- 创建 LVM -

1. 首先通过 fdisk -l 或 lsblk 查看磁盘的属性,找到要添加的磁盘名称。

vdc 是手动挂载到虚机上的一块磁盘,执行命令如下:

root@newsqltest:~# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    252:0    0   40G  0 disk 
|-vda1 252:1    0  571M  0 part /boot
`-vda2 252:2    0 39.5G  0 part /
vdb    252:16   0   64M  0 disk 
root@newsqltest:~# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    252:0    0   40G  0 disk 
|-vda1 252:1    0  571M  0 part /boot
`-vda2 252:2    0 39.5G  0 part /
vdb    252:16   0   64M  0 disk 
vdc    252:32   0   10G  0 disk 

root@newsqltest:~# fdisk -l
Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9b600047

Device     Boot   Start      End  Sectors  Size Id Type
/dev/vda1  *       2048  1171455  1169408  571M 83 Linux
/dev/vda2       1171456 83886046 82714591 39.5G 83 Linux


Disk /dev/vdb: 64 MiB, 67108864 bytes, 131072 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000


Disk /dev/vdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

2. 使用 fdisk 将磁盘进行逻辑分区

fdisk /dev/vdc

m 来查看命令帮助;

n 添加一张新的 partition,划分分区,以及分区的大小,这里都使用默认值,创建一个分区;

w 命令保存并退出。

root@newsqltest:~# fdisk /dev/vdc

Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xbb7719f5.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (1-4, default 1): 
First sector (2048-20971519, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): 

Created a new partition 1 of type 'Linux' and of size 10 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
root@newsqltest:~# fdisk -l
......
Device     Boot Start      End  Sectors Size Id Type
/dev/vdc1        2048 20971519 20969472  10G 83 Linux

3. 使用 lvm 来管理这个分区

1). 首先需要安装 lvm

apt-get install lvm2

2). 创建 Physical Volume(PV)

pvcreate /dev/vdc1

成功之后可以通过 pvdisplay 查看信息

root@newsqltest:~# pvcreate /dev/vdc1
  Physical volume "/dev/vdc1" successfully created.
root@newsqltest:~# pvdisplay
  "/dev/vdc1" is a new physical volume of "

3). 创建 Volume Group (VG).

vgcreate vg-newsql /dev/vdc1

root@newsqltest:~# vgcreate vg-newsql /dev/vdc1
  Volume group "vg-newsql" successfully created
root@newsqltest:~# vgscan
  Reading volume groups from cache.
  Found volume group "vg-newsql" using metadata type lvm2

4). 创建 Logical Volumes (LV).

lvcreate -n lv-newsql -l 100% VG vg-newsql (将所有的 vg-newsql 的内存都给这个 lv-newsql 逻辑卷)

root@newsqltest:~# lvcreate -n lv-newsql -l 100%VG vg-newsql
  Logical volume "lv-newsql" created.
root@newsqltest:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg-newsql/lv-newsql
  LV Name                lv-newsql
  VG Name                vg-newsql
  LV UUID                bMsyAX-xatH-cdTY-JbzE-4ao5-QR6h-j4Z7ON
  LV Write Access        read/write
  LV Creation host, time newsqltest, 2021-01-27 16:09:54 +0800
  LV Status              available
  # open                 0
  LV Size                

4. 格式化并挂载逻辑卷至 /data

1). 第一步格式化逻辑卷

mkfs.ext4 /dev/vg-newsql/lv-newsql

2). 将逻辑卷挂载到 home 文件夹下面

mount /dev/vg-newsql/lv-newsql /data

root@newsqltest:~# mkfs.ext4 /dev/vg-newsql/lv-newsql
mke2fs 1.44.1 (24-Mar-2018)
Creating filesystem with 2620416 4k blocks and 655360 inodes
Filesystem UUID: a667f950-9b91-45ce-9931-8fb147173054
Superblock backups stored on blocks: 
  32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

root@newsqltest:~# mount /dev/vg-newsql/lv-newsql /data
mount: /data: mount point does not exist.
root@newsqltest:~# mkdir /data
root@newsqltest:~# mount /dev/vg-newsql/lv-newsql /data
root@newsqltest:~# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               3.9G     0  3.9G   0% /dev
tmpfs                              798M  3.2M  795M   1% /run
/dev/vda2                           39G  2.8G   35G   8% /
tmpfs                              3.9G     0  3.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda1                          547M   77M  430M  16% /boot
tmpfs                              798M     0  798M   0% /run/user/0
/dev/mapper/vg--newsql-lv--newsql  9.8G   37M  9.3G   1% /data

至此,10G 的盘已卷组的方式挂载至 /data 目录。

- 扩容 -

1. 添加磁盘:

root@newsqltest:~# lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda                       252:0    0   40G  0 disk 
|-vda1                    252:1    0  571M  0 part /boot
`-vda2                    252:2    0 39.5G  0 part /
vdb                       252:16   0   64M  0 disk 
vdc                       252:32   0   10G  0 disk 
`-vdc1                    252:33   0   10G  0 part 
`-vg--newsql-lv--newsql 253:0    0   10G  0 lvm  /data
vdd                       252:48   0   10G  0 disk

2. 格式化磁盘

1). 当磁盘大小小于 2TB 的时候,与创建 LVM 的第 2 步骤相同:

fdisk /dev/vdd

m 来查看命令帮助

n 添加一张新的 partition,划分分区,以及分区的大小,这里我都使用默认值,创建一个分区

w 命令保存并退出

2)当大于 2TB 的时候,使用如下命令:

a. 编辑 /dev/sda 磁盘

parted /dev/vde

b. 设立磁盘分区类型

mklabel gpt

c. 设置默认单位为 TB、GB

unit TB

d. 创建分区大小

mkpart primary 0 0 or mkpart primary 0.00TB 2.10TB

e. quit

f. 格式化磁盘

mkfs.ext4 /dev/vde

root@newsqltest:~# parted /dev/vde
GNU Parted 3.2
Using /dev/vde
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help                                                             
  align-check TYPE N                        check partition N for TYPE(min|opt) alignment
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  name NUMBER NAME                         name partition NUMBER as NAME
print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found partitions, or a particular partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END
  resizepart NUMBER END                    resize partition NUMBER
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  disk_set FLAG STATE                      change the FLAG on selected device
  disk_toggle [FLAG]                       toggle the state of FLAG on selected device
set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright information of GNU Parted
(parted) mklabel gpt                                                      
(parted) unit TB
(parted) mkpart primary 0 0 or mkpart primary 0.00TB 2.10TB               
  align-check TYPE N                        check partition N for TYPE(min|opt) alignment
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  name NUMBER NAME                         name partition NUMBER as NAME
print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found partitions, or a particular partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END
  resizepart NUMBER END                    resize partition NUMBER
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  disk_set FLAG STATE                      change the FLAG on selected device
  disk_toggle [FLAG]                       toggle the state of FLAG on selected device
set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright information of GNU Parted
Warning: You requested a partition from 0.00TB to 2.10TB (sectors 0..4101562500).
The closest location we can manage is 0.00TB to 0.00TB (sectors 34..2047).
Is this still acceptable to you?
Yes/No? yes                                                               
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? ignore                                                     
(parted) quit                                                             
Information: You may need to update /etc/fstab.
root@newsqltest:~# mkfs.ext4 /dev/vde                                     
mke2fs 1.44.1 (24-Mar-2018)
Found a gpt partition table in /dev/vde
Proceed anyway? (y,N) y
Creating filesystem with 550502400 4k blocks and 137625600 inodes
Filesystem UUID: a08b03f2-05b7-4029-b317-0e07f93fb6d2
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
102400000, 214990848, 512000000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done 

3. 创建 pv 卷, 与使用 lvm 来管理这个分区中创建 Physical Volume 的步骤相同:

pvcreate /dev/vdd1

4. 扩展物理硬盘到同一个卷组里面,每个组管理不同物理磁盘:

vgextend vg-newsql /dev/vdd1

root@newsqltest:~# vgextend vg-newsql /dev/vdd1
  Volume group "vg-newsql" successfully extended

5. 从卷组里面向逻辑卷里面分配空间:

lvextend -l +100% FREE /dev/mapper/vg--newsql-lv--newsql(向逻辑卷里面分配空间)

root@newsqltest:~# lvextend -l +100%FREE /dev/mapper/vg--newsql-lv--newsql
  Size of logical volume vg-newsql/lv-newsql changed from 

6. 重启逻辑卷使其生效:

resize2fs /dev/mapper/vg--newsql-lv--newsql

root@newsqltest:~# resize2fs /dev/mapper/vg--newsql-lv--newsql
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/mapper/vg--newsql-lv--newsql is mounted on /data; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/mapper/vg--newsql-lv--newsql is now 5240832 (4k) blocks long.

7. 查看:

df -h 当发现该逻辑卷(resize2fs /dev/mapper/vg--newsql-lv--newsql)的空间增大时,表示添加成功。

root@newsqltest:~# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               3.9G     0  3.9G   0% /dev
tmpfs                              798M  3.2M  795M   1% /run
/dev/vda2                           39G  2.8G   35G   8% /
tmpfs                              3.9G     0  3.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda1                          547M   77M  430M  16% /boot
/dev/mapper/vg--newsql-lv--newsql   20G   44M   19G   1% /data

文中关于mysql的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《分布式数据库使用逻辑卷管理存储之扩容》文章吧,也可关注golang学习网公众号了解相关技术文章。

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
Go 语言使用 MySQL 的常见故障分析和应对方法Go 语言使用 MySQL 的常见故障分析和应对方法
上一篇
Go 语言使用 MySQL 的常见故障分析和应对方法
建议自查!MySQL驱动Bug引发的事务不回滚问题,也许你正面临该风险!
下一篇
建议自查!MySQL驱动Bug引发的事务不回滚问题,也许你正面临该风险!
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    14次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    22次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    30次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    39次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    35次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码