2013年1月6日日曜日

KVMでDataGuard環境を作ってみよう Part1

(0) 前置き

Oracle DatabaseにはReal Application Clusters(RAC)以外にも可用性を高める仕組みとしてData Guardと呼ばれる機能があります。ざっくり言うと、マスタDBへのデータ変更をスタンバイDBに適用するレプリケーションタイプの冗長構成になります。

仕事柄、RACを組むことは時々あります(最近は若い人に任せっきりですが)。しかし、今までData Guardは組んだことがないので冬休みを機に挑戦してみたいと思います。ただ、冗長構成ということで台数が必要ですが、そんなに物理マシンが手元にあるわけではないので、KVMを利用して仮想マシンを複数台用意して、 その上で構築したいと思います。

目指すのは以下のような環境です。

dg01~dg06が今回作成する仮想マシンです。dg01&dg02、dg03&dg04、dg05&dg06の組でそれぞれRACデータベースを作成し、それぞれプライマリDB、スタンバイDB(物理)、スタンバイDB(論理)とします。RACなのでDB接続を受けるパブリックネットワーク以外に、インターコネクトネットワークも必要になります(今回は異なるDB間のインターコネクト通信は出来ないものとしました)。加えて、適用すべきデータ変更の情報を転送するためのネットワークを別に用意します。

今回利用する物理ハードのスペックは以下になります(借り物です)。
  • CPU:Xeon 5430 2.66GHz(4コア)×2ソケット
  • メモリ:32GB
  • HDD:146GB×4 (RAID5)、実施 400GB
また、仮想化ソフトについては私は普段はVirtualBox使いなのですが、今回は今までに使ったことがないという理由でKVMを採用してみようと思います。OSはなぜかOracleLinux6.3を使います。あと、KVMでは最近libvirtと呼ばれるフロントエンドを利用することが前提のようですが、KVMのコマンドを直接叩いてみたいのでlibvirtは使いません(既に後悔していますが)。

以下、簡単に顛末を書いていきますが、厳密な手順書でない点、不明・不具合がある点、Data Guardとは関係ないメモも含まれる点、そもそも書き始めた時点でData Guardの構築が完了していないため致命的な間違いがあるかもしれない点はご了承ください。

(1) 物理ホストのOSインストール

物理ホストへのOSインストールは特に変わったことをせずに、Minimal構成でインストールします(昔は最小構成でインストールするとその後のrpmインストールが大変でしたが、最近はDVD自体がyumのリポジトリになっているので、最小構成インストールも怖くないですね)。

一点、パーティション構成だけは以下のようにしました。
  • /boot:200MB
  • /:15GB
  • スワップ:1GB
仮想OSのイメージなどを置くパーティションはOSインストール後に作成します。

 (2) 物理ホストOSインストール後の基本設定

OSインストール後にはいくつか追加の設定を入れていきます。
  • ネットワーク設定(最小構成ではインストール時にホスト名しか設定されない)
  • IPv6無効化
  • SELinux無効化
  • 不要なサービス停止
  • 必要なrpmインストール
  • パーティション作成
必要なrpmパッケージについては先に述べたとおりDVDがyumリポジトリになっているので、/etc/yum.repo.d/以下に、baseurl=file:/media/dvd、gpgcheck=0、enabled=1のエントリを作ってあげれば、普通にyum installで依存関係を自動解決するインストールが使えるようになります(/media/dvdはDVDのマウント先)。今回は以下のパッケージをインストールしました(依存するrpmパッケージは記載していないです)。
  • bridge-utils
  • qemu-kvm
  • qemu-kvm-tools
  • openssh-clients:SCPサーバとして動作させるため
  • telnet:ポート疎通確認用
  • bind-utils:dig/nslookupが使いたいため
  • mlocate:locateコマンドが使いたいため
  • sysstat:sarやiostatが使いたいため
あと、ディスク容量の空きを利用して390GB程度の仮想ホストイメージ用のパーティションを作成します。ただ、fdiskでパーティションを表示すると「パーティション?は、シリンダ境界で終わっていません。」というエラーが表示されます。パーティションの作成・マウントは正常に出来るみたいです。Webの情報を見るとfdiskのバグで実際は正常らしいですが、もう少し確認が必要でしょう。

また、ext4からはデフォルトでバリア機能が有効になっているので/etc/fstabでマウントオプションにnobarrierを忘れず書いておきます。以前にバリア機能の有効/無効でどれだけ差が出るか確認したことがありますが、MySQLのデータロードで1.5倍程度性能差が出るので、nobarrierは性能が求められるところでは必須だと認識しています(代わりに何を失うのかはよく理解する必要がありますが)。

  (3) 仮想ホスト用のネットワーク設定

少し本題に近づいていますが、仮想ホスト用にブリッジの設定を入れます。

今回は、パブリックネットワーク×1、インターコネクトネットワーク×3、データ変更転送用ネットワーク×1のため、合計5つのブリッジを作成します。また、パブリックネットワークは物理NICを通して外部と通信できるように設定します。具体的には/etc/sysconfig/network-scripts/に以下の設定を入れます。

  •  ifcfg-br0 (パブリックネットワーク用、IPADDRは物理ホストのIPアドレス、HWADDRは物理NICのMACアドレス)
DEVICE=br0
BOOTPROTO=static
HWADDR=00:23:7D:EE:80:1A
IPADDR=192.168.79.162
NETMASK=255.255255224
NM_CONTROL=yes
ONBOOT=yes 
TYPE=Bridge
  • ifcfg-br1~ifcfgbr3 (インターコネクト用)
DEVICE=brN (N=1..3)
BOOTPROTO=static
ONBOOT=yes 
TYPE=Bridge
  •  ifcfg-br4 (データ変更転送用)
DEVICE=br4
BOOTPROTO=static
ONBOOT=yes 
TYPE=Bridge
  •  ifcfg-eth0 (物理NIC)
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:23:7D:EE:80:1A
NM_CONTROL=yes
ONBOOT=yes
TYPE=Ethernet
BRIDGE=br0
ポイントとしては、ネットワークの数だけブリッジを作成し、外部NIC経由で通信できるブリッジに関しては、IPアドレス設定をそのブリッジに移して、物理NICではそのブリッジに接続するという設定を残してIPアドレス設定を消すことでしょうか。(なぜブリッジにIPアドレスを設定するとホストOSと通信できるようになるのかはよく理解していません。ブリッジはデフォルトでホストOSと接続されているのでしょうか?)

ブリッジを作成したところで、KVMゲストはこれらのブリッジとTAPインターフェースを通して接続されます(他にもuser/vde/socketと3つ手段があるようですがよく理解していません)。TAPインターフェース自体はKVMゲスト起動時に自動的に作成されますが、どのブリッジに接続するかは管理者側で設定する必要があります。設定方法の1つとして、TAPインターフェース名を渡すとブリッジに接続するコマンド(brctl addif)を実行するスクリプトを用意しておく方法があるようです。

今回はパブリックネットワークにtap0~tap5、プライベートネットワークにtap6~tap11、データ変更転送用ネットワークにtap12~tap17のそれぞれのTAPインターフェースを利用することとします。すると、上記のスクリプトは以下のようになります(実行ファイルとTAP-ブリッジの関連の情報ファイルを分離しています)。

  • addif.sh
#!/bin/sh

LIST_FILE=tap.list

ifname=$1
brname=`grep "${ifname}," ${LIST_FILE} | cut -d, -f2`
 
ifconfig ${ifname} up
brctl addif ${brname} ${ifname}
  •  tap.list
tap0,br0
tap1,br0
tap2,br0
tap3,br0
tap4,br0
tap5,br0
tap6,br1
tap7,br1
tap8,br2
tap9,br2
tap10,br3
tap11,br3
tap12,br4
tap13,br4
tap14,br4
tap15,br4
tap16,br4
tap17,br4
このスクリプトはKVMゲストを起動させるときに利用します。


今回はここまでです。次回はKVMゲストへのOSインストール、KVMホストの複製、ネットワークの疎通確認を記載します。

0 件のコメント:

コメントを投稿