亚马逊云科技

广告

安信SSL证书

广告

如何调整DigitalOcean云主机大小以实现垂直扩展

美国云服务器推荐

DigitalOcean云主机(Droplet)是基于Linux系统的虚拟机,运行在虚拟化硬件之上。调整Droplet大小会改变其拥有的资源(CPU、内存和磁盘),目前官方提供两种调整大小的选项,分别是仅调整CPU和内存和调整磁盘、CPU和内存,本文将主要介绍相关教程及注意事项。

DigitalOcean官网地址:点击直达

DigitalOcean目前针对新用户提供200美元的试用金,可用来体验DigitalOcean任意服务。领取方法参考:

DigitalOcean怎么购买服务器 200美元试用额度领取及购买教程

DigitalOcean国外云服务器(Droplet)选型指南

DigitalOcean国外云服务器创建配置完整指南

一、DigitalOcean云主机调整大小前的注意事项

建议为每GB已使用磁盘空间预留约1分钟的停机时间,实际所需时间通常更短。可以通过命令“df / -h”查看文件系统的磁盘使用情况。

预估停机时间也取决于磁盘使用量,因为Droplet可能会迁移到新的虚拟机监控程序,此过程需要通过网络传输磁盘数据。另外建议在调整大小前为 Droplet 创建快照。

调整大小过程中,DigitalOcean云主机可能会迁移到新的虚拟机监控程序,且文件系统的任何更改都可能在出现问题时导致数据丢失。因此烈建议在调整大小前备份Droplet的数据。如果使用了快照,在确认调整大小成功后可以删除该快照。

二、通过控制面板、API或CLI调整DigitalOcean云主机大小

可以通过控制面板、DigitalOcean API或DigitalOcean命令行工具doctl调整Droplet大小。

1、通过控制面板调整

通过控制面板调整DigitalOcean云主机大小前需先关闭Droplet电源。为避免数据损坏,建议通过命令行执行关机操作:先通过SSH连接到你的Droplet,然后输入以下关机命令:

sudo shutdown -h now

访问DigitalOcean控制面板。在Droplets页面,点击需要调整大小的Droplet名称,然后在Droplet专属菜单中点击“调整大小(Resize)”选项。

通过控制面板调整

或者,如果有可用选项,也可以点击Droplet名称旁或Droplet详情页顶部的“升级(Upgrade)”按钮。

当前DigitalOcean云主机大小会高亮显示。选择“仅调整 CPU 和内存”或“调整磁盘、CPU 和内存”,然后选择新的 Droplet 大小。如果某个套餐无法用于调整大小,控制面板会显示具体原因。

注意:如果Droplet未关闭电源,会弹出“关闭 Droplet(Turn off Droplet)”警告窗口。可以通过控制面板关闭Droplet,但此操作可能导致数据损坏,因此建议通过命令行关机。

关闭DigitalOcean云主机电源并选择新套餐后,点击“调整大小(Resize)”。调整过程中会显示进度条。调整完成后,点击“开关(On/Off)”按钮重新启动 Droplet。

通过控制面板调整

2、通API调整

通过API调整DigitalOcean云主机大小时需要指定调整操作类型和大小标识(slug)。要查看标识列表,可使用/v2/size API端点。

首先创建个人访问令牌并保存以供与API配合使用。然后配合以下命令:

cURL:

# Enable Backups
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”enable_backups”}’ \
“https://api.digitalocean.com/v2/droplets/3164450/actions”

# Disable Backups
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”disable_backups”}’ \
“https://api.digitalocean.com/v2/droplets/3164450/actions”

# Reboot a Droplet
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”reboot”}’ \
“https://api.digitalocean.com/v2/droplets/3164450/actions”

# Power cycle a Droplet
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”power_cycle”}’ \
“https://api.digitalocean.com/v2/droplets/3164450/actions”

# Shutdown and Droplet
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”shutdown”}’ \
“https://api.digitalocean.com/v2/droplets/3067649/actions”

# Power off a Droplet
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”power_off”}’ \
“https://api.digitalocean.com/v2/droplets/3164450/actions”

# Power on a Droplet
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”power_on”}’ \
“https://api.digitalocean.com/v2/droplets/3164450/actions”

# Restore a Droplet
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”restore”, “image”: 12389723 }’ \
“https://api.digitalocean.com/v2/droplets/3067649/actions”

# Password Reset a Droplet
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”password_reset”}’ \
“https://api.digitalocean.com/v2/droplets/3164450/actions”

# Resize a Droplet
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”resize”,”size”:”1gb”}’ \
“https://api.digitalocean.com/v2/droplets/3164450/actions”

# Rebuild a Droplet
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”rebuild”,”image”:”ubuntu-16-04-x64″}’ \
“https://api.digitalocean.com/v2/droplets/3164450/actions”

# Rename a Droplet
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”rename”,”name”:”nifty-new-name”}’ \
“https://api.digitalocean.com/v2/droplets/3164450/actions”

# Change the Kernel
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”change_kernel”,”kernel”:991}’ \
“https://api.digitalocean.com/v2/droplets/3164450/actions”

# Enable IPv6
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”enable_ipv6″}’ \
“https://api.digitalocean.com/v2/droplets/3164450/actions”

# Enable Private Networking
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”enable_private_networking”}’ \
“https://api.digitalocean.com/v2/droplets/3164450/actions”

# Snapshot a Droplet
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”snapshot”,”name”:”Nifty New Snapshot”}’ \
“https://api.digitalocean.com/v2/droplets/3164450/actions”

# Acting on Tagged Droplets
curl -X POST \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
-d ‘{“type”:”enable_backups”}’ \
“https://api.digitalocean.com/v2/droplets/actions?tag_name=awesome”

# Retrieve a Droplet Action
curl -X GET \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $DIGITALOCEAN_TOKEN” \
“https://api.digitalocean.com/v2/droplets/3164444/actions/36804807”

Go的官方DigitalOcean API客户端:

import (
“context”
“os”

“github.com/digitalocean/godo”
)

func main() {
token := os.Getenv(“DIGITALOCEAN_TOKEN”)

client := godo.NewFromToken(token)
ctx := context.TODO()
// Enable Backups
action, _, err := client.DropletActions.EnableBackups(ctx, 3164450)

// Disable Backups
// action, _, err := client.DropletActions.DisableBackups(ctx, 3164450)

// Reboot a Droplet
// action, _, err := client.DropletActions.Reboot(ctx, 3164450)

// Power Cycle a Droplet
// action, _, err := client.DropletActions.PowerCycle(ctx, 3164450)

// Shutdown a Droplet
// action, _, err := client.DropletActions.Shutdown(ctx, 3067649)

// Power Off a Droplet
// action, _, err := client.DropletActions.PowerOff(ctx, 3164450)

// Power On a Droplet
// action, _, err := client.DropletActions.PowerOn(ctx, 3164450)

// Restore a Droplet
// action, _, err := client.DropletActions.Restore(ctx, 3164449, 12389723)

// Password Reset a Droplet
// action, _, err := client.DropletActions.PasswordReset(ctx, 3164450)

// Resize a Droplet
// action, _, err := client.DropletActions.Resize(ctx, 3164450, “1gb”, true)

// Rebuild a Droplet
// action, _, err := client.DropletActions.RebuildByImageSlug(ctx, 3164450, “ubuntu-16-04-x64”)

// Rename a Droplet
// action, _, err := client.DropletActions.Rename(ctx, 3164450, “nifty-new-name”)

// Change the Kernel
// action, _, err := client.DropletActions.ChangeKernel(ctx, 3164450, 991)

// Enable IPv6
// action, _, err := client.DropletActions.EnableIPv6(ctx, 3164450)

// Enable Private Networking
// action, _, err := client.DropletActions.EnablePrivateNetworking(ctx, 3164450)

// Snapshot a Droplet
// action, _, err := client.DropletActions.Snapshot(ctx, 3164450, “Nifty New Snapshot”)

// Retrieve a Droplet Action
// action, _, err := client.DropletActions.Get(ctx, 3164450, 36804807)

}

注意:

  • 通过API执行调整操作会自动先关闭Droplet电源;
  • 调整完成后,重新启动Droplet即可。

3、通过CLI调整

通过CLI调整DigitalOcean云主机大小时需要提供标识(slug)并传递给 –size 参数。要查看标识列表,可使用命令 doctl compute size list。

调整大小前,还需通过命令 doctl compute droplet-action power-off 关闭 Droplet 电源。

  • 安装doct1官方的DigitalOcean CLl;
  • 创建个人访问令牌并保存以供与doctl;
  • 使用令牌授予doctl对您的DigitalOcean账户的访问权限;

doctl auth init

  • 最后,运行doctl compute droplet-action resize。

doctl compute droplet-action resize <droplet-id> [flags]

以下示例将 ID 为386734086的 Droplet 调整为配备两颗 CPU、2 GiB RAM 和 60 GB 磁盘空间的 Droplet。这 60 GB 磁盘空间是该s-2vcpu-2gb套餐的预设容量:

doctl compute droplet-action resize 386734086 –size s-2vcpu-2gb –resize-disk=true

调整完成后,启动Droplet。

三、验证磁盘调整结果

在某些情况下,磁盘调整可能无法成功调整DigitalOcean云主机的分区或文件系统。如果调整磁盘大小后重新运行df -h命令,发现输出结果无变化,则通常说明存在问题。可使用gdisk命令获取更多信息:

gdisk -l /dev/vda

输出结果如下:

GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Disk /dev/vda: 104857600 sectors, 50.0 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C1E73477-225B-4585-8BB5-C9291E473CE4
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 52428766
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 227328 52428766 24.9 GiB 8300

部分操作系统(如 CentOS)默认未预装gdisk。可以通过包管理器安装gdisk(例如命令 sudo yum install gdisk),也可以使用fdisk命令:

fdisk -l /dev/vda

输出结果如下:

Disk /dev/vda: 50.0 GB, 53687091200 bytes, 104857600 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
Disk label type: dos
Disk identifier: 0x000b956b

Device Boot Start End Blocks Id System
/dev/vda1 * 2048 52428766 52426718 83 Linux

在上述两种情况下,虽然磁盘大小为50GB,但分区仍为25GB。要调整分区大小,可使用growpart命令。该命令中,/dev/vda是磁盘名称,空格后紧跟需要调整的分区编号(此处为 1)。

growpart /dev/vda 1

调整文件系统的命令取决于文件系统类型。若不确定所使用的文件系统类型,可通过df命令查看:

df -Th /dev/vda1

输出结果的第二列即为文件系统类型。以下示例输出显示文件系统类型为 ext4。

Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 50G 4.0G 45G 10% /

对于ext3/4类型的文件系统,使用resize2fs命令调整大小。

resize2fs /dev/vda1

对于XFS类型的文件系统,使用xfs_growfs命令调整大小。

xfs_growfs /dev/vda1

如果磁盘上存在多个分区,可能需要修改上述命令以匹配Droplet的分区表。分区按编号区分,若要调整特定分区的大小,可在growpart /dev/vda命令中指定该分区编号。例如命令growpart /dev/vda 2用于调整第二个分区的大小。

(本文由美国主机侦探原创,转载请注明出处“美国主机侦探”和原文地址!)

主机侦探企业微信

微信扫码加好友进群

主机优惠码及时掌握

主机侦探QQ群

QQ群号:938255063

主机优惠发布与交流

温馨提示:

1、本站部分图片来源于互联网,如有侵权请联系删除。邮箱:2942802716#qq.com(#改为@)

2、本文评论没有专人回复,如果您有问题请到美国主机侦探论坛提问!

3、美国主机侦探免费为您提供美国主机购买咨询。

RAKsmart美国服务器
下一篇
通过控制面板调整
已经没有了
返回顶部