2013年1月26日土曜日

KVMでRAC+DataGuadの環境を作ってみよう Part3

まだまだ終わりません。あと、タイトルにRACというキーワード加えました。

(7)共有ディスクの設定

RACはシェアードディスクタイプのクラスタなので、 dg01とdg02で共有するディスクイメージをホストOS上で作成します。サイズは50GBとします。
# dd if=/dev/zero of=/vmdata/ss01.img \
  bs=`expr 1024 \* 1024` count=`expr 50 \* 1024`
仮想OSのローカルディスク用イメージとは異なり、QCOW2形式ではなくRAW形式を用います。よく考えれば当たり前ですが、複数の仮想ゲストで動的割当てファイルを共有することはできないようです(最初は気付かずにGrid Infrastructureのroot.shで失敗しまくりました)。

次に仮想ゲストの起動オプションに共有ディスク設定を追加します。
# /usr/libexec/qemu-kvm -k ja \
  -hda /vmdata/dg01root.img \
  -hdb /vmdata/dg01swap.img \
  -drive file=/vmdata/ss01.img,cache=none \
  -boot c -m 4096 -vnc :1 \
  -net nic,macaddr:=54:52:00:12:01:01,vlan=0 \
  -net tap,ifname=tap0,script=addif.sh,downscript=no,vlan=0 \
  -net nic,macaddr:=54:52:00:12:01:02,vlan=1 \
  -net tap,ifname=tap6,script=addif.sh,downscript=no,vlan=1 \
  -net nic,macaddr:=54:52:00:12:01:03,vlan=2 \
  -net tap,ifname=tap11,script=addif.sh,downscript=no,vlan=2
 今まではディスク指定に-hdXというオプションを使ってきましたが、cache=noneを指定するために-driveオプションを利用しています。この指定がないとやはりroot.shが失敗します。

以上の設定を行い仮想ゲストdg01を起動すると、共有ディスクが/dev/sdcとして認識されます。なので同様にss02.img、ss03.imgを作成し、dg03からdg06に追加してきます。

2度書きますが、共有ディスク用のイメージでは以下の2点が重要です。これを守らなくともOracle Universal Installerによる事前チェックは通ることがあるので要注意です。
  • 動的割当を利用しない
  • cache=noneオプションでキャッシュを無効にする 
 (8)Oracleインストール前のゲストOSの設定

インストール要件をクリアしていくために設定を入れていきますが、ここは簡単に。
  •  必要なRPMパッケージのインストールに関してはOracle Linux 6 Update3のDVDの中にある「oracle-rdbms-server-11gR2-preinstall-1.0-6.el6.x86_64.rpm」をyum経由でインストールすれば自動でインストールされるっぽい。マニュアルに比べるとbcコマンドやXクライアントも追加で入ります。ちなみに、oracleユーザも勝手に作ってくれるけどuid=54321になるのが気に入らないので、後で削除。
  • NTPで時刻合わせ。/etc/sysconfig/ntpdで-xオプションでslewモードにすることを忘れずに(インストーラがチェックしてくれますが)。
  • ユーザ作成とディレクトリ設定は以下を参考に。あとは、パスワード設定とSSH透過ログインの設定を。
groupadd -g 1000 oinstall
groupadd -g 1031 dba
groupadd -g 1020 asmadmin
groupadd -g 1021 asmdba
useradd -u 1100 -g oinstall -G asmadmin,asmdba grid
useradd -u 1101-g oinstall  -G dba,asmdba oracle
mkdir -p /u01/app/grid
mkdir -p /u01/app/11.2.0/grid
chown -R grid:oinstall /u01
mkdir -p /u01/app/oracle
chown oracle:oinstall /u01/app/oracle
chmod -R 775 /u01
  • 共有ディスクのオーナー、パーミッション設定は【こちら】を参考に/etc/udev/rules.d/99-oracle-asmdevicesruleに以下の内容を記述。ちなみにこの設定方法はRHEL6系に固有らしく、後のインストーラによる要件チェックでは正しく設定してもWaringを喰らうようです。
KERNEL=="sdc"、SUBSYSTEM=="block"、ENV{DEVTYPE}=="disk", NAME+="oracleasm/disk1", OWNER="grid", GROUP="asmadmin", MODE="0660"
  •  ネットワークでは/etc/hostsとデフォルトゲートウェイの設定を。今回はSCAN用にDNSは利用しないのでSCAN用IPアドレスは1つのみ指定します。
  • /etc/sysctl.confと/etc/security/limits.confの設定は、今回はインストーラが作成する修正スクリプトに任せます(lmits.confの設定はログインし直さないと有効にならないので、本来は修正スクリプトに頼らず、事前設定が良いみたいですが)。
以上の設定を6台全部に行います。実際は、1台で設定した後に前回記述した方法で仮想ゲストをクローニングしています。

ASMLibやhanguptimer、MTUなど設定すべき項目はまだまだありますが、今回は無視します。

(9) Oracleのインストール・DBの作成

環境が正しく整えば、インストール&DB作成は楽勝ですね。dg01&dg02にRAC環境を作ります。
  • Grid Infrastructureの拡張インストール(クラスタ名:cluster01)
  • Databaseのソフトウェアのみのインストール
  • Examplesのインストール(自分の趣味です)
  • RACデータベースの作成(DB名:ora11ga、インスタンス名:ora11ga1/ora11ga2)

今回はここまでです。次回はフィジカルスタンバイデータベースを作成していきます。もうKVMの話は出てこないかもです。

2013年1月10日木曜日

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

冬休みは終わりましたが続きますorz

 (4) 仮想マシンイメージの作成とゲストOSのインストール

まずは仮想マシンイメージファイルを以下のコマンドで作成します。今回はハードディスク容量が400GB弱しかないのに6仮想ゲスト+3DBを作成する必要があるため、容量節約のため動的割り当てファイルを使います。また、Oracleインストールにはある程度のスワップ領域が必要ですが、実際は使わないため、スワップ単体でファイルを作成し、もしサイズが大きくなってしまっても再作成できるようにしておきたいと思います。

# qemu-img create -f qcow2 /vmdata/dg01root.img 15G
# qeme-img create -f qcow2 /vmdata/dg01swap.img 4GB

VirtualBoxがvmdk形式のファイルもいけたので、KVMもいけるかと思い試してみましたが駄目でした (そりゃそうか) 。

仮想ファイル作成後は、仮想ゲストを起動して、OSインストールイメージからOSをインストールします。起動コマンドは以下になるようです (一部実際に利用したのと違うのですが、後述します)。

# /usr/libexec/qemu-kvm -k ja \
                        -hda /vmdata/dg01root.img \
                        -hdb /vmdata/dg01swap.img \
                        -cdrom /root/V33411.iso -boot d \
                        -m 4096 -vnc :1

ここで重要なのが、「-k ja」というオプションです。単に日本語キーボードを使いますよということを指定しているだけなのですが、これがないとデフォルトは英語キーボードとみなされるようですが、コロンとセミコロンのキーを押してもセミコロンになりコロンが入力できない、Shift-^がEscになるなど困ったことになります。特にviで設定ファイルを編集しようとすると保存するときに詰みます。

(実は始めはこのオプションに気付かなかったために、設定ファイルの編集でedやcatを使うという面倒くさいことをやっていました。ちなみに「KVM vnc コロン」とかでGooglingするとsetxkbmapの話ばかりが上位に来ていますが、そもそもX-Window-System絡んでいないのにどう関係しているんでしょうね。)

 あと、「-vnc :1」 でコンソール画面をVNC経由で操作できるようになるのですが、このような表記をするとVNCサーバは127.0.0.1でリッスンするため、ローカルからの接続しか出来ません。今回はSSH転送を利用したので問題ないですが、リモートから繋ぎたい場合は「-vnc dg01:1」のようにホスト名 (リッスンするホスト名orIPアドレス)を明記する必要があるようです。

上述のコマンドを実行した後は、UltraVNC Viewerなどで接続すればOSインストール画面が表示され、OSインストールを行うことが出来ます。ちなみに最初はRealVNC Viewerで接続していたのですが、接続直後にコネクションが切断されるという事象が発生していました。そのためUlraVNCViewerを使っています。

(5) 仮想ゲストのクローニング

今回は仮想ゲストが6台必要ですが、OSインストールを6回繰り返すのは面倒なので、1つインストールしたところで仮想ゲストのイメージをコピーすることで手間を省きたいと思います。

ただ、RedHat系のLinuxではいくつかの設定ファイルでハードウェアの識別IDが直書きされるため、そのままコピーしても上手く起動しなかったり、認識したとおりのデバイス名にならないなどの問題があります。なので、それらの設定を消しこんでから、ホストOS上でcpコマンドでコピーします。
  • /etc/sysconfig/network-scripts/ifcfg-*  (MACアドレス指定)
  •  /etc/udev/rules.d/70-persistent-net.rules  (MACアドレス指定)
  • /etc/fstab  (パーティションUUID指定)
  • /boot/grub/grub.conf  (パーティションUUID指定)
 ここではまず、dg01~dg03のネットワーク通信の確認をしたいので、この3ゲストだけ先に作ってしまいます。(本当はOracleインストールに必要な設定&rpmインストールを終えてからコピーしたいのですが、ネットワーク確認を優先させます。)
# cp /vmdata/dg01root.img /vmdata/dg02root.img
# cp /vmdata/dg01root.img /vmdata/dg03root.img
# cp /vmdata/dg01swap.img /vmdata/dg02swap.img
# cp /vmdata/dg01swap.img /vmdata/dg03swap.img
(よくよく考えればcpするだけならパーティションのUUIDは変わらないはずなので、/etc/fstabと/boot/grub/grub.confの修正は必要なかったのかも知れません。)

(6) 複数の仮想ゲスト起動とネットワーク疎通確認

仮想ホストが3つ出来たところで、ネットワーク設定含め仮想ホストを起動します(前回作成したaddif.shと同じディレクトリで実行します)

  • dg01
# /usr/libexec/qemu-kvm -k ja \
  -hda /vmdata/dg01root.img \
  -hdb /vmdata/dg01swap.img \
  -boot c -m 4096 -vnc :1 \
  -net nic,macaddr:=54:52:00:12:01:01,vlan=0 \
  -net tap,ifname=tap0,script=addif.sh,downscript=no,vlan=0 \
  -net nic,macaddr:=54:52:00:
12:01:02,vlan=1 \
  -net tap,ifname=tap6,script=addif.sh,downscript=no,vlan=1 \
  -net nic,macaddr:=54:52:00:
12:01:03,vlan=2 \
  -net tap,ifname=tap11,script=addif.sh,downscript=no,vlan=2
  • dg02
# /usr/libexec/qemu-kvm -k ja \
  -hda /vmdata/dg02root.img \
  -hdb /vmdata/dg02swap.img \
  -boot c -m 4096 -vnc :2 \
  -net nic,macaddr:=54:52:00:
12:02:01,vlan=0 \
  -net tap,ifname=tap1,script=addif.sh,downscript=no,vlan=0 \
  -net nic,macaddr:=54:52:00:
12:02:02,vlan=1 \
  -net tap,ifname=tap7,script=addif.sh,downscript=no,vlan=1 \
  -net nic,macaddr:=54:52:00:
12:02:03,vlan=2 \
  -net tap,ifname=tap12,script=addif.sh,downscript=no,vlan=2

  • dg03
# /usr/libexec/qemu-kvm -k ja \
  -hda /vmdata/dg03root.img \
  -hdb /vmdata/dg03swap.img \
  -boot c -m 4096 -vnc :3 \
  -net nic,macaddr:=54:52:00:
12:03:01,vlan=0 \
  -net tap,ifname=tap2,script=addif.sh,downscript=no,vlan=0 \
  -net nic,macaddr:=54:52:00:
12:03:02,vlan=1 \
  -net tap,ifname=tap8,script=addif.sh,downscript=no,vlan=1 \
  -net nic,macaddr:=54:52:00:
12:03:03,vlan=2 \
  -net tap,ifname=tap13,script=addif.sh,downscript=no,vlan=2
-netオプションが1仮想ホストにつき6つ出てきますが、2つ1組で1つの仮想NICの設定に対応します。これで仮想OSを起動した後に、VNC経由でコンソールに接続し、IPアドレスやホスト名などのネットワーク設定を入れていきます。

仮想ホスト起動コマンドのオプションについていくつか補足を。

まず、netオプション内でMACアドレスを指定していますが、複数仮想ホストを扱う場合は必須の設定になります。Webの情報では最近のKVMはMACアドレスは重複しないように自動採番されると記載されていることが多いです。確かに、指定しなかった場合、1番目のNICは54:52:00:12:34:56なら2番目のNICは54:52:0:12:34:57と+1されて重複しません。しかし、重複回避は1仮想ホスト内での話であり、2番目の仮想ホストではしっかりと1番目の仮想ホストと同じMACアドレスを割当てようとします。つまり指定しないとdg01のeth0とdg2のeth0でMACアドレスが被ります。

ifnameで仮想NICに接続するTAPインターフェース名を指定します。実際にTAPインターフェースは仮想ホスト起動時に作成されますが、ネットワーク(ブリッジ) に接続する処理は前回作成したaddif.shが担います。そのスクリプトファイルはscript=...で指定します。仮想ホスト終了時にTAPインターフェースは自動削除されますが、その際に実行するスクリプトはdownscript=...で指定します。今回は何もしないのでnoを指定しています。

最後ですが、なぜかVLANの設定が必要です。パブリックネットワークにはVLAN ID=0を、インターコネクトネットワークにはVLAN ID=1を、データ変更転送用ネットワークにはVLAN ID=2を割当てています。これがないと、仮想OSを1つ起動させた状態では、VNC経由のコンソール画面がログインプロンプト表示後にグレーアウトするという不具合が、仮想OSを2つ以上起動させた状態では、qemu-kvmプロセスがCPUコアを100%使い果たしてしまうという問題に遭遇しています。前者の原因は分かりません。後者はスパニングツリー(L2レベルでのループ)によるブロードキャストストームが原因ですが、何処がループになっているのかは理解できていません。 (試しにvlan指定を取り払い、br0~br4に対してSTPを有効にすると問題なく動作します。本来はこっちが本筋な設定なのかも知れません。)

色々問題ありましたが、ここまでくれば、dg01~dg03はパブリックネットワークとデータ転送用ネットワークを通して互いに通信できますし、dg01とdg02はインターコネクトネットワーク経由で通信できますが、dg03は通信できないという想定通りの挙動が得られます。


今回はここまでです。次回はOracleインストール用に仮想OSの設定を行い、RACをインストールします。 

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ホストの複製、ネットワークの疎通確認を記載します。

2012年8月13日月曜日

MySQL EE + WSFCってどうなんだろう(価格だけ)

別にこの記事の件でお金貰っているわけではないですが(そもそも貰えない)、日本オラクルとパートナ関係にある会社に勤めてる人間が書いているので、中立かと言うと疑問も残るので、その辺あしからず。

MySQLの高可用性オプションとしてクラスタソフトによるHA構成はよくある話で、RHEL+LifeKeeper(もしくはClusterProなど)+MySQL Standard Editionといった構成は良く聞きます。しかし、最近MySQL Enterprise EditionならWindows Server Failover Clusterがサポートされるって話を知りました。
MySQL Enterprise High Availability http://www-jp.mysql.com/products/enterprise/high_availability.html
だったら、MySQLのエディションをSEからEEにすることによる費用増加がクラスタソフトの値段を超えなければ得なんじゃないかと言う疑問が出てきたので、ちょこっと計算してみたいと思います。

IAサーバ2ソケット2台の構成で概算します。値段は2台分、ライセンス費用は初期費用に、年間サブスクリプション&保守は年間コストにつけています。RHELは3年サブスクリプションがありますがここでは無視して単年サブスクリプションで計算しています。あと定価です(ここ重要)。
 
MySQL SE+LifeKeeperの場合

No 製品 初期費用 年間コスト
1 Red Hat Enterprise Linux Server Standard(最大仮想化ゲスト数:1)
203,280
2 LifeKeeper for Linux & MySQL ARK 1,216,000 304,000
3 My SQL SE
434,782

合計 1,216,000 942,062
 
MySQL EE+WSFCの場合

No 製品 初期費用 年間コスト
1 Windows Server 2008 Enterprise 日本語版(25 CAL付) 1,440,000
2 My SQL EE
1,086,958

合計 1,440,000 1,086,958

というわけで、結論は安くなりませんでした
  • WSFCはWindows ServerのEnterpriseでしか使えないのが結構利いている気もします。
  • RHELでStandardを選んでいることに根拠はないです。Premiumを選ぶと、年間コスト+14万で、前者・後者の年間コストはほぼトントンになります。
  • 初期+20万&年間15万でMySQLをSEからEEに替えられるなら安いと見る向きもあるかもしれません。(個人的にはお客様を納得させるには苦しい言い訳のような気がしますが)
  • あとWindowsに縛られるのが嫌だと言うお客さんだと、そもそも後者は選択肢にないですね。
  • 加えて、ここでは考慮してませんがユーザ数が増えた場合にWindows ServerのCALをどうするかという話が残っています。
  • そもそもでいえば、前者は実績が比較的豊富で安心感があるっていうのも事実かもしれません。
  • 後者を薦める場合は、Windowsによる管理のし易さを何処まで訴求できるかかなぁ。(確かにSQL Server+WSFCは簡単だからなぁ)
何回も言いますが、これらの価格は値段です。製品によっては仕切率が数十%という製品やボリュームライセンスなどあるので、購入する際は必ずベンダーさんから正式な見積を取って判断してください。このページはMySQL EE+WSFCなんてあるんだ程度に捉えてください。
(個人的には定価と実売値の二重価格は何とかならんもんかと思いますが、代理店経由販売とかベンダ間の情報戦などがあり解決はされないのでしょう。)

でも、技術者としてはMySQL + WSFCは一度は組んでみたいなぁ。

最後に今回の価格の情報源は以下です。










2012年8月4日土曜日

ZFS Storage Appliance SimulatorでOracle11gのハイブリッド列圧縮は使えるか?

【前回】は下調べせずに撃沈したが、今回は【こちら】で事前に可能だという情報を得た上でのトライ。
結果としては、以下の通りOK。

SQL> CREATE TABLE sales_qh COMPRESS FOR QUERY HIGH AS SELECT * FROM sh.sales WHERE 1 = 0;

表が作成されました。

経過: 00:00:00.82
SQL> INSERT /* APPEND */ INTO sales_qh SELECT * FROM sh.sales;

918843行が作成されました。

経過: 00:00:12.90
SQL> SELECT compression, compress_for FROM user_tables WHERE table_name = 'SALES_QH';

COMPRESS COMPRESS_FOR
-------- ------------
ENABLED  QUERY HIGH

経過: 00:00:00.05
SQL> SELECT segment_name, sum(bytes) / 1024 / 1024 mb FROM dba_extents
2 WHERE segment_name IN ('SALES', 'SALES_QH')
3 GROUP BY segment_name;

SEGMENT_NAME         MB
--------------- -------
SALES               128
SALES_QH             32

経過: 00:00:46.97
SQL>
圧縮率に関しては、データが少なすぎてあまりHCCの効果が。。。
構築の注意点・問題点をいくつか。
  • Solaris x86-64 Oracle11.2.0.3、ZSA Simulator共にメモリ1GBで動作可能。ただし、DBインストール&作成時や後に述べるパッチ適用時は一時的に2GBに増強することが好ましい。(今回は1GBでパッチ適用してしまいスワップストリームに嵌ることにorz)
  •  ZSA Simulator上のフォルダにno_root_squash設定したかったんだけど、設定箇所が見つからずchownできなかった(単に調査不足)。そのためフォルダ作成時にユーザ、グループにoracleユーザのuid、dbaグループのgidを指定して回避。
  • DBサーバ上のmountオプションは以下。このストレージはnointrなのね。あと、なぜ未だにバージョン3しばり?
rw,bg,hard,nointr,rsize=32768,wsize=32768,proto=tcp,vers=3,actimeo=0
  •  11.2.0.3.0でZSAをNFSマウントしてHCC使う場合は、DBソフトにパッチが必要(サポート情報なので詳細はMOSを検索してください)。おそらくPillarをASMグリッドディスクに使う場合は同じパッチをGrid Infrastructureに適用することになると思う。11.2.0.3.1ならパッチは要らないと思う。
  • DirectNFSの設定必要。とはいっても、Oracle停止&NFSアンマウント状態で以下を実行するだけですが。
$ cd $ORACLE_HOME/lib
$ mv libodm11.so libodm11.so_orig
$ ln -s libnfsodm11.so libodm11.so
HCCには関係ないけど、ZSAの管理画面はWebブラウザでリアルタイムでCPU使用率やネットワーク利用状況が表示されて面白い。あのアプリがどんなライブラリを使っているか興味あるなぁ。

2012年7月29日日曜日

Solaris11とZFSでOracleDBのハイブリッド列圧縮は使えるか?

Oracleのハイブリッド列圧縮(Hybrid Columnar Compression=HCC)についてマニュアルに以下の記載があります。
Requires Exadata, ZFS, or Pillar Axiom 600 storage
ExadataやPillarはハードウェア製品なので個人ではとても気楽に試せませんが、ZFSならSolaris使えば楽勝じゃね? と思い特に下調べせずに(チョットマテ)突撃してみました。

 試した環境は以下。(サーバはノートPC上のVirtualBox仮想マシンです)

  • Solaris 11 11/11 x86 (関係ないけど1並び!)
  • Oracle11g Database 11.2.0.3.0 x86-64

で、試してみた結果が以下。

 11:54:11 SQL> CREATE TABLE sales_qh COMPRESS FOR QUERY HIGH AS SELECT * FROM sh.sales WHERE 1 =0;
CREATE TABLE sales_qh COMPRESS FOR QUERY HIGH AS SELECT * FROM sh.sales WHERE 1 =0
                                                                  *
行1でエラーが発生しました。:
ORA-64307:
ハイブリッド・コラム圧縮は、Exadataストレージに存在する表領域でのみサポートされています


経過: 00:00:00.76
11:57:12 SQL>

結局駄目なのか? ZFS storageってZFS Storage Applianceのことなのか? もうちょっと調べたほうが良いかな。

## 追記 ##
ORACLE社のプレスリリースにはしっかり以下のように書いてあった。残念。
Oracle today announced Hybrid Columnar Compression, pioneered in Oracle Exadata , is now supported on Oracle’s Sun ZFS Storage Appliances and Pillar Axiom Storage Systems.

ちなみに細かい構築手順は載せませんが、いくつか注意点を。

  • OracleDBのSolaris11サポートは11.2.0.3.0からです。11.2.0.2では未サポートです。
  • インストールマニュアルには「No special kernel parameters, packages, or patches are required at the time of this release for Oracle Solaris 11.」と記載がありますが、カーネルパラメータの設定はSolaris11でも必須です。設定しないと「ORA-27102 out of memory」でDB作成に失敗します。(インストーラの要件チェックにも引っ掛かりません)
  • シェル制限でNOFILESは4096という記載がありますが、正しくは65536です。(これはインストーラの要件チェックにも引っ掛かります)
  • 後はほぼマニュアル通りですが、【こちら】も参照ください。

2012年6月16日土曜日

CentOS6.2における本当のIPv6無効化設定は?

べき論はともかく、LinixでIPv6を無効化したい人は多いらしく、そのための設定内容を記したブログの記事も多い。CentOS6の場合は大体以下の内容になっている。

  1. ファイル/etc/sysconfig/networkに「NETWORKING_IPV6=no」を追記(場合によっては「IPV6INIT=no」も
  2. ファイル /etc/modprobe.d/disable-ipv6.confを作成し「options ipv6 disable=1」を記述(/etc/modprobe.d直下ならファイル名不問、「alias ipv6 off」と「alias net-pf-10 off」を追記する場合も)
  3. サービス ip6tables の停止
ただ、私のCentOS6.2on VirtualBoxの環境では、上述の設定でIPv6は無効にならず、 ifconfigの結果にinet6が表示されていた。lsmodで確認してもipv6がロードされている。ナゼ???
(ちなみに「install ipv6 /sbin/modprobe -n -i ipv6」も試してみたけど駄目だった)



そこで以前、Ubuntuを使っていた時に調べた、Ubuntu 10.04 LTSにおけるIPv6無効化方法(ファイル/etc/sysctl.confに以下を追記)をCentOSに試したらifconfigからinet6の記述は消えた。
  • net.ipv6.conf.all.disable_ipv6 = 1
  • net.ipv6.conf.default.disable_ipv6 = 1
ただ、これで問題がないかというとそうは問屋が卸さなくて、lsmodで確認するとipv6はロード済みになっている。

いったい本当の設定は何なんだろう。 

追記
最近、さくらのVPSを新たに借りたので、設定してみたら何の問題もなく無効化出来た。VirtualBox固有の問題らしい。。。