Compute Engine 永久性磁盘在线扩容

作者:MeshCloud脉时云公有云架构师 许多杰

引言

当GCP虚拟机实例需要额外的存储空间或增加的性能限制时,我们可以增加永久性磁盘的大小。无论磁盘是否挂接到正在运行的虚拟机,都可以增加磁盘大小。

注意:您只能增加磁盘大小,而不能减小磁盘大小。如需减小磁盘大小,您必须创建较小的新磁盘。在删除较大的原始磁盘之前,您需要为这两个磁盘付费。

环境部署

本次实验是Web服务器Nginx的在线扩容,通过增加磁盘、制作文件系统等步骤完成Nginx缓存目录的扩容。

创建节点机器

Compute Engine 永久性磁盘在线扩容

制作文件系统

  • 将多个本地 SSD 分区格式化并装载到单个逻辑卷中

在终端中安装 mdadm 工具:

sudo apt update && sudo apt install mdadm --no-install-recommends
Compute Engine 永久性磁盘在线扩容
  • 使用 ext4 文件系统格式化完整的 /dev/sdb 阵列
sudo mkfs.ext4 -F /dev/sdb
Compute Engine 永久性磁盘在线扩容
  • 创建一个用于装载 /dev/sdb 的目录
sudo mkdir -p /var/cache/nginx
  • 将 /dev/sdb 阵列装载到 /var/cache/nginx
sudo mount  -o discard,defaults,nobarrier  /dev/sdb /var/cache/nginx  
  • 配置对该设备的读写权限
sudo chmod a+w /var/cache/nginx 
  • 将本地 SSD 添加到 /etc/fstab 文件,以便在实例重启时设备会自动重新装载。

指定 /etc/fstab 条目文件时,请务必添加 nofail 选项,这样,即使 SSD 不存在,实例也能继续启动。例如,如果您截取启动磁盘的快照并创建没有附加任何SSD 的新实例,则该实例可以继续启动流程,而不是无限期地暂停。

echo UUID=`sudo blkid -s UUID -o value /dev/sdb` /var/cache/nginx  ext4 discard,defaults,nobarrier,nofail 0 2 | sudo tee -a /etc/fstab
  • 使用 cat 命令验证您的 /etc/fstab 条目内容正确:
cat /etc/fstab
Compute Engine 永久性磁盘在线扩容
  • 使用 df -h命令查看文件系统是否创建完成:
df -h
Compute Engine 永久性磁盘在线扩容

当前VM附加的SSD persistent disk 大小为100GB,挂载到本地/var/cache/nginx目录下作为文件系统使用。

搭建Web服务器Nginx

  • 下载并安装Nginx:
sudo apt install -y nginx
  • 启用并设置Nginx开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
  • 修改Nginx配置文件,增加本地缓存proxy_cache_path等指令:
sudo vim /etc/nginx/nginx.conf
#修改下列nginx配置文件
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=mem-cache:1500m inactive=30d  max_size=10g use_temp_path=off;
Compute Engine 永久性磁盘在线扩容
  • 测试访问Web服务器(绑定节点机器IP地址):
curl -vo /dev/null 'http://picuser-mas.weplayapp.com/test.txt' -x 34.142.144.15:80
Compute Engine 永久性磁盘在线扩容

根据响应头判断Web服务器运行正常,并且可以进行资源缓存。另外通过Nginx日志和缓存资源也可以判断服务端状态正常。

Compute Engine 永久性磁盘在线扩容

测试验证

部署探测任务

  • 通过Shell脚本每1秒请求一次Nginx地址,并将请求的时间、响应头中的状态、响应大小、请求的url打印到result.txt文件中:
#!/bin/bash
while true
do
    date=$(date +"%Y-%m-%d %H:%M:%S")
    response=$(curl -s -o /dev/null -w "%{http_code} %{size_download} %{url_effective}" -H "Host: picuser-mas.weplayapp.com" http://34.142.144.15/test.txt)
    echo "$date $response" >> result.txt
    sleep 1
done
Compute Engine 永久性磁盘在线扩容

增加磁盘大小

  • 验证分区类型:
sudo parted -l
Compute Engine 永久性磁盘在线扩容
  • 调整非启动数据磁盘上的文件系统大小:
文件系统类型扩展指令
1ext4sudo resize2fs /dev/sdb
2xfssudo xfs_growfs MOUNT_DIR
3btrfssudo btrfs filesystem resize max MOUNT_DIR

这里类型ext4,请使用 resize2fs 命令扩展文件系统

sudo resize2fs /dev/sdb
Compute Engine 永久性磁盘在线扩容
  • 使用 df 命令验证文件系统是否已扩展:
df -h
Compute Engine 永久性磁盘在线扩容

当前VM附加的SSD persistent disk 大小扩容为200GB,挂载到本地/var/cache/nginx目录下作为文件系统使用。

业务验证

Compute Engine 永久性磁盘在线扩容

通过探测点日志记录:在增加磁盘大小的过程中Web服务端响应正常,未受影响。

结论

虚拟机实例增加永久性磁盘的大小,不会影响正在运行VM中的业务。

参考文件

  1. GCP 增加永久性磁盘的大小文档:https://cloud.google.com/compute/docs/disks/resize-persistent-disk?hl=zh-cn

发表评论

您的电子邮箱地址不会被公开。