Amazon Web Services ブログ

Oracle データベースでの Amazon EBS エラスティックボリュームの使用 (パート2): LVMを 使ったデータベース



このブログシリーズのパート 1 では、エラスティックボリュームの機能について検討します。また、データベースストレージとして LVM なしの単一の Amazon EBS ボリュームを使用するシンプルなデータベースである Oracle データベースストレージレイアウトについても検討します。この記事のパート 2 では、ストレージ管理に LVM を使用する Oracle データベースである Amazon EC2 のストレージレイアウトについて検討します。さらに、可用性に影響を与えることなくデータベースストレージを拡張する方法を示します。

LVM を使用したデータベースのストレージ操作

このセクションでは、ストレージ管理に LVM を使用する Oracle データベース向けの Amazon EC2 のストレージレイアウトについて簡潔に検討します。次に、プロビジョニングされたストレージを増やしたり、またプロビジョニングされた IOPS を変更するなど、 Oracle データベースストレージの変更が、エラスティックボリュームの導入前にどのように行われたかについて検討します。また、関連する課題についても取り扱います。最後に、エラスティックボリュームでこれら課題のうちのいくつかを解決する方法について例を挙げて示します。

LVM を使用するデータベースのストレージレイアウト

データベースストレージ用に複数の EBS ボリュームが必要な大規模なデータベースの場合、LVM を使用してストレージを管理できます。このシナリオでは、ボリュームグループを作成し、ボリュームグループに EBS ボリュームを追加します。そして、ボリュームグループから論理ボリュームを作成し、論理ボリュームの上にファイルシステムを作成します。次の図は、LVM を使ったデータベースストレージレイアウトを示しています。

エラスティックボリュームのない Oracle データベースのストレージ操作

複数の EBS ボリュームとストレージ管理用の LVM を使用するシステム用にプロビジョニングされたストレージまたは IOPS を増やすために、新しい EBS ボリュームを作成します。そして、次の手順で新しい EBS ボリュームをボリュームグループに追加します。

  • 新しい EBS ボリュームを作成し、EC2 インスタンスに添付する。
  • pvcreate コマンドを使用して物理ボリュームを作成する。
  • vgextend コマンドを使用して、新しい物理ボリュームをボリュームグループに追加する。
  • lvextend コマンドを使用して、論理ボリュームを拡張する。
  • ファイルシステムのサイズを変更する。

新しい EBS ボリュームを追加した結果、総ストレージ容量と使用できる IOPS が増加しますが、データは EBS ボリューム全体へ均等に分散されません。この不均一さはホットスポットを生じさせる可能性があります。データ (Oracle データファイル) を EBS ボリューム全体に手動で再度バランスの調整または分散する必要があります。

エラスティックボリュームを使用した Oracle データベースのストレージ操作

EBS ボリュームを変更するには、AWS CLI の modify-volume コマンドまたは AWS Management Console の Modify Volume オプションを使用します。新しいボリュームサイズと IOPS を指定します。ボリュームサイズを変更せずにプロビジョニングされた IOPS だけを変更した場合、オペレーティングシステムまたは LVM レベルでの変更は必要はありません。EBS のボリュームサイズを変更する場合は、次の追加的な手順を実行します。

  • pvresize コマンドを使用して、物理ボリュームのサイズを変更する。
  • lvresize コマンドを使用して、論理ボリュームのサイズを変更する。
  • ファイルシステムのサイズを変更する。

EBS ボリュームのサイズまたは IOPS を変更すると、データは複数のバックエンドデバイスへ自動的に拡張されます。このアプローチは、ホットスポットを回避を助け、プロビジョニングされた IOPS の確保を保証します。

例 : LVM を使用するデータベースのストレージを増やす

このセクションでは、ダウンタイムなしに、ストレージ管理に LVM を使用する Oracle データベース用のプロビジョニングされたストレージを増やす方法を示します。このデモンストレーションで、ストレージ管理に LVM を使用する Amazon Linux 上で動作する Oracle 12c データベースを使用します。それぞれ 100 GiB のストレージを持つ 2 つの EBS ボリュームが、物理ボリュームとして LVM に提示されます。これらのボリュームから、論理ボリューム 200 GiB が Oracle データベースストレージ用に作成されます。このデモンストレーションでは、ダウンタイムなしで 200 GiB から 400 GiB にデータベースへプロビジョニングされたストレージを増やしています。

リサイズがデータベースのダウンタイムなしに実行されることを提示するために、evtestproc というデータベースストアドプロシージャを作成しました。このプロシージャは、レコードを 10 秒間隔で evtesttab という表に挿入します。サイズ変更操作の実行中にこのプロシージャを実行します。レコードが 10 秒間隔で evtesttab の表に挿入されていることを検証することで、データベースのダウンタイムなしにリサイズが完了したことを確認できます。evtestproc ストアドプロシージャの定義については、このブログシリーズのパート 1 を参照してください。

ステップ 1 : 現在の設定を確認する

AWS 管理コンソールから、EBS ボリュームのサイズを検証する。次のスクリーンショットに示すように、現在のサイズは 100 GiB です。

lsblk コマンドを使用したインスタンスに、ボリュームが接続されていることを確認する。

[ec2-user@ip-172-31-55-62 ~]$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda        202:0    0   20G  0 disk 
└─xvda1     202:1    0   20G  0 part /
xvdf        202:80   0   65G  0 disk 
└─dvg-lvol0 253:2    0   65G  0 lvm  /u01
xvdg 202:96 0 100G 0 disk xvdh 202:112 0 100G 0 disk 

続行するには、lvm パッケージがまだインストールされていない場合はインストールする必要があります。次のコマンドを使用してインストールを確認できます。

[root@ip-172-31-55-62〜]#rpm -qa | grep -i lvm
lvm2-libs-2.02.115-3.26.amzn1.x86_64
lvm2-2.02.115-3.26.amzn1.x86_64

lvm がインストールされていない場合は、次のように yum コマンドを使用してインストールが可能です。

[root@ip-172-31-55-62 ~]# yum install lvm2*

今度は、LVM を使って物理ボリュームを作成します。

[root @ ip-172-31-55-62 ec2-user]#pvcreate/dev/xvdg
  Physical volume "/dev/sdg" successfully created

[root@ip-172-31-55-62 ec2-user]# pvcreate /dev/xvdh
  Physical volume "/dev/sdh" successfully created

注記 : デバイス名に関する考慮事項に注意してください。この例では、/dev/xvdg/dev/sdg は同じデバイスを参照し、 /dev/xvdg/dev/sdg のシンボリックリンクです。カーネルのブロックデバイスドライバによっては、デバイスが指定した名前と異なる名前で接続されている可能性があります。詳細については、Amazon EC2 ユーザーズガイド Linux 版をご参照ください

次に、LVM を使用してボリュームグループを作成します。

[root@ip-172-31-55-62 ec2-user]# vgcreate EV-Datafile-VG /dev/sdg /dev/sdh
  Volume group "EV-Datafile-VG" successfully created

次に、LVM を使用して論理ボリュームを作成します。

[root@ip-172-31-55-62 ec2-user]# lvcreate -l +100%FREE -n EV-Data-LV EV-Datafile-VG
  Logical volume "EV-Data-LV" created.

図示のように、pvdisplayvgdisplay 、および lvdisplay コマンドを使用して構成を検証できます。

[root@ip-172-31-55-62 ec2-user]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdg
  VG Name               EV-Datafile-VG
  PV Size               100.00 GiB / not usable 4.00 MiBv
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              25599
  Free PE               0
  Allocated PE          25599
  PV UUID               NTnpgJ-ZwLR-Dqx9-J7cY-zCRH-EbTz-cEv3gt

  --- Physical volume ---
  PV Name               /dev/sdh
  VG Name               EV-Datafile-VG
  PV Size               100.00 GiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              25599
  Free PE               0
  Allocated PE          25599
  PV UUID               Sq92JP-hLO9-YdfQ-0a1c-Iew1-fugN-P3JqQ3
[root@ip-172-31-55-62 ec2-user]# vgdisplay
  --- Volume group ---
  VG Name               EV-Datafile-VG
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               199.99 GiB
  PE Size               4.00 MiB
  Total PE              51198
  Alloc PE / Size       0 / 0   
  Free  PE / Size       51198 / 199.99 GiB
  VG UUID               GJw617-s5hP-eVnp-7MCv-VHNS-g0vs-wEjT3u
[root@ip-172-31-55-62 ~]# lvdisplay EV-Datafile-VG
  --- Logical volume ---
  LV Path                /dev/EV-Datafile-VG/EV-Data-LV
  LV Name                EV-Data-LV
  VG Name                EV-Datafile-VG
  LV UUID                KhYS7n-fj5i-oEU3-2EPD-zSi6-2Tta-2XqPwe
  LV Write Access        read/write
  LV Creation host, time ip-172-31-55-62, 2018-06-13 18:22:09 +0000
  LV Status              available
  # open                 0
  LV Size                199.99 GiB
  Current LE             51198
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

データファイルを格納するために、以下のように customdf というディレクトリを作成します。

[root@ip-172-31-55-62 ~]# mkdir -p /u01/app/oracle/oradata/cdb1/pdb1/customdf

論理ボリューム上にファイルシステムを作成し、以下のように /u01/app/oracle/oradata/cdb1/pdb1/customdf/ にマウントします。

[root@ip-172-31-55-62 ec2-user]# mkfs.ext4 /dev/EV-Datafile-VG/EV-Data-LV 
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 52426752 4k blocks and 13107200 inodes
Filesystem UUID: 028021c7-090e-44e3-bad7-f38733aca2c7
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   
[root@ip-172-31-55-62 ec2-user]# mount /dev/EV-Datafile-VG/EV-Data-LV /u01/app/oracle/oradata/cdb1/pdb1/customdf/

注記 : Ext4 および XFS はいずれもインラインでのサイズ変更をサポートしています。この例では、Ext4 がより単純な選択であるため、こちらを使用しています。

ここでは、以下のように SQL*Plus を使用して evtestdf.dbf という 180 GB のデータファイルを持つ EVTestTablespace という大きなファイル表領域を作成します。

SQL> CREATE BIGFILE TABLESPACE EVTestTablespace DATAFILE '/u01/app/oracle/oradata/cdb1/pdb1/customdf/EVTESTDF.dbf' SIZE 180G;
Tablespace created.

次のように、df コマンドを使用して、OS レベルでディスク使用率を確認できます。

[oracle@ip-172-31-55-62 ec2-user]$ df –h
Filesystem                                 Size  Used Avail Use% Mounted on
devtmpfs                                   7.9G   76K  7.9G   1% /dev
tmpfs                                      7.9G     0  7.9G   0% /dev/shm
/dev/xvda1                                  20G  1.3G   19G   7% /
/dev/mapper/dvg-lvol0                       64G   17G   45G  28% /u01
/dev/mapper/EV--Datafile--VG-EV--Data--LV 197G 181G 6.7G 97% /u01/app/oracle/oradata/cdb1/pdb1/customdf 

以下のスクリーンショットに示すように、ここでは新しく作成された表領域のサイズとデータファイルの場所を確認します。

ステップ 2 : ストアドプロシージャを設定する

データベースにプロビジョニングされたストレージを増やしながら、レコードを evtesttab テーブルに挿入するには、evtestproc ストアドプロシージャを開始します。

begin
  evtestproc();  //PLSQL procedure to insert records into the EVTESTTAB table at 10-second intervals
end;

SQL Workbench からテーブルをクエリして、レコードの挿入が開始されていることを確認します。

ステップ 3 : EBS ボリュームのサイズ変更

AWS CLI を使用して、EBS ボリュームのサイズを 200 GiB から 100 GiB へと増やします。

$ aws ec2 modify-volume --region us-east-1 --volume-id vol-0a6cc1b8519d43a69 --size 200
{
    "VolumeModification": {
        "TargetSize": 200,
        "TargetVolumeType": "io1",
        "ModificationState": "modifying",
        "VolumeId": "vol-0a6cc1b8519d43a69",
        "TargetIops": 3000,
        "StartTime": "2018-06-13T21:48:45.000Z",
        "Progress": 0,
        "OriginalVolumeType": "io1",
        "OriginalIops": 3000,
        "OriginalSize": 100
    }
}

$ aws ec2 modify-volume --region us-east-1 --volume-id vol-04d8f75ea8f27c9ee --size 200
{
    "VolumeModification": {
        "TargetSize": 200,
        "TargetVolumeType": "io1",
        "ModificationState": "modifying",
        "VolumeId": "vol-04d8f75ea8f27c9ee",
        "TargetIops": 3000,
        "StartTime": "2018-06-13T21:51:41.000Z",
        "Progress": 0,
        "OriginalVolumeType": "io1",
        "OriginalIops": 3000,
        "OriginalSize": 100
    }
}

しばらくしてから、AWS CLI を使用してボリューム変更要求のステータスを確認します。ボリュームが最適化状態に入ったことがわかります。次のスクリーンショットに示すように、AWS Management Console に新しいサイズが表示されます。

$ aws ec2 describe-volumes-modifications --region us-east-1 --volume-id vol-0a6cc1b8519d43a69
{
    "VolumesModifications": [
        {
            "TargetSize": 200,
            "TargetVolumeType": "io1",
            "ModificationState": "optimizing",
            "VolumeId": "vol-0a6cc1b8519d43a69",
            "TargetIops": 3000,
            "StartTime": "2018-06-13T21:48:45.000Z",
            "Progress": 0,
            "OriginalVolumeType": "io1",
            "OriginalIops": 3000,
            "OriginalSize": 100
        }
    ]
}
$ aws ec2 describe-volumes-modifications --region us-east-1 --volume-id vol-04d8f75ea8f27c9ee
{
    "VolumesModifications": [
        {
            "TargetSize": 200,
            "TargetVolumeType": "io1",
            "ModificationState": "optimizing",
            "VolumeId": "vol-04d8f75ea8f27c9ee",
            "TargetIops": 3000,
            "StartTime": "2018-06-13T21:51:41.000Z",
            "Progress": 0,
            "OriginalVolumeType": "io1",
            "OriginalIops": 3000,
            "OriginalSize": 100
        }
    ]
}

ステップ 4 : 物理ボリューム、論理ボリューム、およびファイルシステムのサイズを変更する

物理ボリュームのサイズを変更するには、pvresize コマンドを使用します。

[root@ip-172-31-55-62 ~]# pvresize /dev/sdg
  Physical volume "/dev/sdg" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

[root@ip-172-31-55-62 ~]# pvresize /dev/sdh
  Physical volume "/dev/sdh" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

pvdisplay コマンドを使用して新しいサイズが反映されていることを確認します。

[root@ip-172-31-55-62 ~]# pvdisplay /dev/sdg
  --- Physical volume ---
  PV Name               /dev/sdg
  VG Name               EV-Datafile-VG
  PV Size 200.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              51199
  Free PE               25600
  Allocated PE          25599
  PV UUID               NTnpgJ-ZwLR-Dqx9-J7cY-zCRH-EbTz-cEv3gt

[root@ip-172-31-55-62 ~]# pvdisplay /dev/sdh 
  --- Physical volume ---
  PV Name               /dev/sdh
  VG Name               EV-Datafile-VG
  PV Size 200.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              51199
  Free PE               25600
  Allocated PE          25599
  PV UUID               Sq92JP-hLO9-YdfQ-0a1c-Iew1-fugN-P3JqQ3

lvresize コマンドを使用して論理ボリュームのサイズを変更します。lvresize コマンドの -l +100%FREEオプションは、新たに追加されたすべての領域を論理ボリュームに割り当てます。

[root@ip-172-31-55-62 ~]# lvresize -l +100%FREE /dev/EV-Datafile-VG/EV-Data-LV
  Size of logical volume EV-Datafile-VG/EV-Data-LV changed from 199.99 GiB (51198 extents) to 399.99 GiB (102398 extents).
  Logical volume EV-Data-LV successfully resized

lvdisplay コマンドを使用して新しいボリュームサイズが表示されることを確認します。

[root@ip-172-31-55-62 ~]# lvdisplay EV-Datafile-VG
  --- Logical volume ---
  LV Path                /dev/EV-Datafile-VG/EV-Data-LV
  LV Name                EV-Data-LV
  VG Name                EV-Datafile-VG
  LV UUID                KhYS7n-fj5i-oEU3-2EPD-zSi6-2Tta-2XqPwe
  LV Write Access        read/write
  LV Creation host, time ip-172-31-55-62, 2018-06-13 18:22:09 +0000
  LV Status              available
  # open                 1
 LV Size 399.99 GiB
  Current LE             102398
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

最後に、resize2fs コマンドを使用するファイルシステム ( ext4 ) のサイズを変更しました。

[root@ip-172-31-55-62 ~]# resize2fs /dev/EV-Datafile-VG/EV-Data-LV 
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/EV-Datafile-VG/EV-Data-LV is mounted on /u01/app/oracle/oradata/cdb1/pdb1/customdf; on-line resizing required
old_desc_blocks = 13, new_desc_blocks = 25
The filesystem on /dev/EV-Datafile-VG/EV-Data-LV is now 104855552 (4k) blocks long.

df コマンドを使用してファイルシステムのサイズが変更されていることを確認します。

[root@ip-172-31-55-62 ~]# df -h
Filesystem                                 Size  Used Avail Use% Mounted on
devtmpfs                                   7.9G   76K  7.9G   1% /dev
tmpfs                                      7.9G     0  7.9G   0% /dev/shm
/dev/xvda1                                  20G  1.3G   19G   7% /
/dev/mapper/dvg-lvol0                       64G   17G   45G  28% /u01
/dev/mapper/EV--Datafile--VG-EV--Data--LV 394G 361G 16G 96% /u01/app/oracle/oradata/cdb1/pdb1/customdf 

ステップ 5 : データベースストレージの増加

以下に示すように、SQL*Plus を使用して大きなファイル表領域を 360 GB にリサイズすることにより、使用可能なデータベースストレージを増やします。

[SQL> ALTER TABLESPACE EVTestTableSpace RESIZE 360G;

Tablespace altered.

次のスクリーンショットに示すように、データベースストレージが 360 GB に増大されました。

ステップ 6 – ストレージサイズの変更中にデータベースのダウンタイムがなかったことを確認する

PL/SQL プロシージャの実行が中断されていないことを確認するために、evtesttab 表にクエリします。次のスクリーンショットに示すように、このクエリーはレコードが 10 秒間隔で挿入されていることを確認します。

この例を使用して、データベースの可用性にいかなる影響をも与えることなく、ストレージ管理に LVM を使用する Oracle データベースに割り当てられたストレージを増やす方法を示します。エラスティックボリュームを使用して、データベースにプロビジョニングされた IOPS を変更したり、また EBS ボリュームタイプ (例えば、 io1 から gp2 など) を変更することも可能です。データベースの可用性やパフォーマンスに影響を与えずに行うことができます。

次の記事では、Oracle Automated Storage Management ( Oracle ASM ) を使用する Oracle データベース用の Amazon EC2 でのストレージレイアウトについて検討します。また、データベースの可用性に影響を与えずにデータベースストレージを拡張する方法を示します。


著者について

Ashok Shanmuga Sundaram 氏は Amazon Web Services のグローバルシステムインテグレータ (GSI) チームのパートナーソリューションアーキテクトです。同氏は GSIs と協同して、エンタープライズクラウドの採用、移行、戦略に関するガイダンスを提供しています。

 

 

 

 

Ejaz Sayyed 氏は、アマゾン ウェブ サービスのグローバルシステムインテグレーター (GSI) チームのパートナーソリューションアーキテクトです。同氏の重点分野は、AWS データベースサービス、そして AWS 上のデータベースとデータウェアハウスの移行です。

 

 

 

 

Nael Haddad 氏は Amazon Web ServicesのElastic Block Store (EBS) チームのシニアプロダクトマネージャーです。同氏は複数の EBS 製品の提供に関連する新機能を推進しています。