DigitalOceanを使用してインフラストラクチャを拡張する方法
APIアクセスと完全なルートレベルのアクセスを備えたDigitalOceanのシンプルなインターフェイスを使用して、オンデマンドで拡張する自動セットアップを作成する絶好の機会です。 トラフィックの需要を満たすために、Webサイトを自動的にスケールアップまたはスケールダウンさせることができます。
このAPIを使用すると、垂直方向と水平方向の両方のスケーラビリティが可能になります。このAPIには、bashスクリプトだけでアクセスできます。 他のすべてのドロップレットに公開鍵を持つ管理ドロップレットを作成するのが最善です。 これにより、rsyncを使用してWebページの更新をプッシュしたり、他のドロップレットにコマンドを発行したり、Nagios、NRPE、およびSNMPDバイタルを照会したりできます。 スケーリングの方法とタイミングを決定するには、独自のレベルのロジックを作成する必要があります。たとえば、サーバーのCPU使用率が85%に達した場合は、RAMを2倍にする(垂直スケーリング)か、クローンを作成します(水平スケーリング)。 選択は価格と利益の分析であり、読者に任されています。
これが物事を始めるためのbashスクリプトです。 APIアクセスページからClient_KeyとAPI_Keyを独自の変数に変更してください。[GenerateanewAPIKey]をクリックしてください。 この例では、次のようになります。
Client Key: A2a9SfT4NeFBl6df5cu42 API Key: mnqWGdu4OfLBwwJPee6cpjkeY70qv9mKicqZYvtHJ
Scaler.sh:
#!/bin/bash # Be Sure To Change This! Client_Key=A2a9SfT4NeFBl6df5cu42 API_Key=mnqWGdu4OfLBwwJPee6cpjkeY70qv9mKicqZYvtHJ droplets() { echo "Your current droplets:" All_Droplets=`curl -s "https://api.digitalocean.com/droplets/?client_id=$Client_Key&api_key=$API_Key"` echo $All_Droplets | sed -e 's/,/\n/g' | sed -e 's/{/\n/g' | sed -e 's/}/\n/g' | sed -e 's/"//g' } spinup() { Droplet_Name=$1 Size_ID=$2 Image_ID=$3 Region_ID=$4 echo "Spinning up a new droplet $Droplet_Name" curl -s "https://api.digitalocean.com/droplets/new?name=$Droplet_Name&size_id=$Size_ID&image_id=$Image_ID®ion_id=$Region_ID&client_id=$Client_Key&api_key=$API_Key" } resize() { Droplet_ID=$1 Size_ID=$2 echo "Resizing a droplet ID: $Droplet_ID to Size ID: $2" curl -s "https://api.digitalocean.com/droplets/$Droplet_ID/resize/?size_id=$Size_ID&client_id=$Client_Key&api_key=$API_Key" } sizes() { sizes=`curl -s "https://api.digitalocean.com/sizes/?client_id=$Client_Key&api_key=$API_Key"` echo $sizes | sed -e 's/,/\n/g' | sed -e 's/{//g' | sed -e 's/}//g' | sed -e 's/"//g' | sed -e 's/\[/\n/g' } snapshot() { Droplet_ID=$1 Snapshot_Name=$2 echo "Taking a snapshot of Droplet $1 with Name: $Snapshot_Name" curl -s "https://api.digitalocean.com/droplets/$Droplet_ID/snapshot/?name=$Snapshot_Name&client_id=$Client_Key&api_key=$API_Key" } go() { # Display all current droplets. Region_ID: 1 for US, 2 for Amsterdam. droplets # Show possible Size IDs, for RAM, also tied to amount of CPU cores and HDD allocated - refer to https://www.digitalocean.com/pricing echo "Possible droplets sizes by RAM:" sizes # Take a snapshot of an existing droplet # The syntax is: snapshot Droplet_ID Snapshot_Name # For example to take a snapshot of droplet with ID "72100": #snapshot 72100 domain.com # Vertical Scaling - Increase RAM, CPU, Disk # The syntax is: resize Droplet_ID New_Size_ID # For example to resize a 512MB droplet to a 1GB droplet with ID "72100": #resize 72100 63 # Horizontal Scaling - Clone a server from a snapshot # The syntax is: spinup Droplet_Name Size_ID Image_ID Region_ID # For example, to spinup a 512MB clone of domain.com webserver with image ID "12573" in New York datacenter (Region 1): #spinup domain.com 66 12574 1 } go
Nagios、NRPE、SNMPDが構成されたNginx / Apache/Memcachedスタックを持つWebサーバードロップレットを作成したとします。 /root/.ssh/authorized_keysの管理ドロップレットのSSHキーとiptablesルールが設定されており、管理ドロップレットはSSH経由でのみ接続できます。 ホストされているドメインはdomain.comです。
スクリプトの出力例。このWebサーバーのドロップレットが表示されています。
id:72100 name:domain.com image_id:12574 size_id:66 region_id:1 backups_active:null ip_address:192.34.56.29 status:active
Droplet_IDが72100で、Image_ID(スナップショット)が12574であることに注意してください。このドロップレットのスナップショットを撮るには、次の行のコメントを外して実行します。
snapshot 72100 domain.com
名前:domain.comでDroplet72100のスナップショットを撮る
{"status":"OK","event_id":473473}
これにより、ドロップレットのスナップショットが作成され、「domain.com」として保存されます。
この液滴を512MBから1GBに垂直にスケーリングするには、次の行のコメントを外して実行します。
resize 72100 63
Resizing a droplet ID: 72100 to Size ID: 63 {"status":"OK","event_id":473530}
この液滴を水平方向にスケーリングするには、この行のコメントを解除してScaler.shを実行することにより、新しい液滴をスピンアップします。
spinup domain.com 66 12574 1
新しい液滴domain.comをスピンアップ
{"status":"OK","droplet":{"id":72124,"name":"domain.com","image_id":12574,"size_id":66,"event_id":473545}}
最新のDigitalOceanドロップレットサイズとID:
ID | 名前 |
66 | 512MB |
63 | 1GB |
62 | 2GB |
64 | 4ギガバイト |
65 | 8GB |
61 | 16ギガバイト |
60 | 32GB |
70 | 48GB |
70 | 48GB |
69 | 64GB |
68 | 96GB |
最近、DigitalOceanはSSDドライブにアップグレードされ、最小のドロップレットには512MBのRAMと1つのCPUコアが付属しています。 次のステップは、1GBのRAMと1つのCPUコアです。 PHPリクエストを処理するPHP-FPMを使用してバックエンドでNginxを実行し、Nginxの前でVarnishキャッシュを実行できます。
NginxとPHP+FPMを使用したVarnishキャッシュのベンチマークは、NginxとPHP-FPMのみで処理される22.25リクエスト/秒と比較して420リクエスト/秒を示しています。
液滴に関する限り、自己複製VMの興味深い概念もあります。 ホストは「オーバーロード」されていることを自己認識し、自分自身のクローンを作成して、そのクローンをDNSローテーションに追加することを決定できます。 これを実装する方法はたくさんありますが、最も簡単な方法は、データのポーリングにSNMPDとNagiosを使用することです。
すべてのVMに公開鍵を持つオーケストレーションVMをセットアップすることもできます。 自動化のレベルは、あなたの想像力と複雑さへの欲求に依存します。
クローンを作成するドロップレットにNagios、SNMPD、NRPE、SSHキーなどの重要な監視ツールを用意することが重要です。 これにより、新しいコンテンツをこのサーバーに同期して、プロセスをさらに自動化することができます。 Webページをアップロードし、そこからすべての同期がcrontabで実行される管理ドロップレットを設定できます。 この管理ドロップレットのキーはすべてのドロップレットに配置する必要があり、SSHポートはその管理ドロップレットのIPアドレスからのみ許可されます。 この管理ドロップレットへのOpenVPN接続を選択するかどうかはあなた次第です。
スナップショットから新しいWebサーバーを起動したら、サーバーをローテーションに配置する必要があります。 これは、DNSラウンドロビン、Nginxリバースプロキシ、専用のロードバランサーのセットアップなどによって実現できます。 選択は、インフラストラクチャのニーズと予算によって異なります。