このセクションでは、ストレージ管理に LVM を使用する Oracle データベース向けの Amazon EC2 のストレージレイアウトについて簡潔に検討します。次に、プロビジョニングされたストレージを増やしたり、またプロビジョニングされた IOPS を変更するなど、 Oracle データベースストレージの変更が、エラスティックボリュームの導入前にどのように行われたかについて検討します。また、関連する課題についても取り扱います。最後に、エラスティックボリュームでこれら課題のうちのいくつかを解決する方法について例を挙げて示します。
データベースストレージ用に複数の EBS ボリュームが必要な大規模なデータベースの場合、LVM を使用してストレージを管理できます。このシナリオでは、ボリュームグループを作成し、ボリュームグループに EBS ボリュームを追加します。そして、ボリュームグループから論理ボリュームを作成し、論理ボリュームの上にファイルシステムを作成します。次の図は、LVM を使ったデータベースストレージレイアウトを示しています。
複数の EBS ボリュームとストレージ管理用の LVM を使用するシステム用にプロビジョニングされたストレージまたは IOPS を増やすために、新しい EBS ボリュームを作成します。そして、次の手順で新しい EBS ボリュームをボリュームグループに追加します。
新しい EBS ボリュームを追加した結果、総ストレージ容量と使用できる IOPS が増加しますが、データは EBS ボリューム全体へ均等に分散されません。この不均一さはホットスポットを生じさせる可能性があります。データ (Oracle データファイル) を EBS ボリューム全体に手動で再度バランスの調整または分散する必要があります。
EBS ボリュームのサイズまたは IOPS を変更すると、データは複数のバックエンドデバイスへ自動的に拡張されます。このアプローチは、ホットスポットを回避を助け、プロビジョニングされた IOPS の確保を保証します。
このセクションでは、ダウンタイムなしに、ストレージ管理に LVM を使用する Oracle データベース用のプロビジョニングされたストレージを増やす方法を示します。このデモンストレーションで、ストレージ管理に LVM を使用する Amazon Linux 上で動作する Oracle 12c データベースを使用します。それぞれ 100 GiB のストレージを持つ 2 つの EBS ボリュームが、物理ボリュームとして LVM に提示されます。これらのボリュームから、論理ボリューム 200 GiB が Oracle データベースストレージ用に作成されます。このデモンストレーションでは、ダウンタイムなしで 200 GiB から 400 GiB にデータベースへプロビジョニングされたストレージを増やしています。
[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.
図示のように、pvdisplay
、vgdisplay
、および 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 製品の提供に関連する新機能を推進しています。