[CentOS] ボンディングを構成する

2008/12/01PC::Linux/BSD

09/04/16 大幅に修正

複数のネットワークインターフェイスを束ねて冗長性や負荷分散を行う技術を、Linuxではボンディングと呼ばれるドライバにより実現しています。CentOSでボンディングを構成したときのメモ。
CentOS 5.2にてテストしましたがRed Hat系のディストリビューションであれば適用できるかと思われます。

環境

  • CentOS 5.2 on VMware Server 1.0.6
  • 仮想NIC × 2
  • ホストマシン搭載物理NIC数: 3

構成してみる

ここで、eth0, eth1のようにネットワークデバイスがすでに利用できる状況になっていることが前提となります。

eth0とeth1をボンディングし、ネットワークデバイスbond0を、eth2とeth3をボンディングしネットワークデバイスbond1を生成する場合の手順は以下の通り。

1. /etc/modprobe.d/bonding を作成

以下の要領でボンディングインターフェイスの数だけ定義する。

alias bond0 bonding
alias bond1 bonding

ボンディングインターフェイスが1つ、もしくは複数のボンディングインターフェイスにて同一の設定を行う場合は次のようになる。

alias bond0 bonding
alias bond1 bonding
    options bonding mode=[N] miimon=100
# この場合、bond0, bond1にて設定されるmode, miimonの値は同一となる
# 設定パラメータについては後述

2. /etc/sysconfig/network-scripts/ifcfg-eth[0-3] を編集

マスターデバイスの指定とスレーブデバイスであることを設定する。HWADDRの値はMACアドレスとモジュールのエイリアスを固定する為にも必ず設定することを推奨

DEVICE=eth[0-3]
HWADDR=xx:xx:xx:xx:xx:xx
BOOTPROTO=none
USERCTL=no
ONBOOT=no
MASTER=bond[0|1]
SLAVE=yes

3. /etc/sysconfig/network-scripts/ifcfg-bond[0|1] を編集

通常eth0などに記載する内容をここに記載する。

DEVICE=bond[0|1]
IPADDR=xxx.xxx.xxx.xxx
NETMASK=xxx.xxx.xxx.xxx
NETWORK=xxx.xxx.xxx.xxx
BROADCAST=xxx.xxx.xxx.xxx
GATEWAY=xxx.xxx.xxx.xxx
ONBOOT=yes
USERCTL=no
# /etc/modprobe.d/bondingでoptionsを設定指定しない場合、
# 以下にボンディングポリシーを記載する
BONDING_OPTS="mode=[N] primary=ethX miimon=100 updelay=500"
# 設定パラメータについては後述

4. ネットワークの再起動

# service network restart

bondingモジュール設定パラメータ

mode: ボンディングポリシー

modeに設定可能な値と機能・制約について述べる

0: balance-rr

障害耐性とロードバランシングに対するラウンドロビンポリシー

制約
Ether ChannelなどのTrunkingをサポートするネットワークスイッチと接続する必要がある

-送信時: 1パケットごとにスレーブされたインターフェイスが順に使用される。

  • 受信時: ネットワークスイッチ側の判断で使用されるスレーブインターフェイスが決定する
1: active-backup

障害耐性に対するアクティブ バックアップ ポリシー
ネットワークの障害耐性を最大限に高めたい場合に適用

制約
ネットワークスイッチに特別な機能は必要ない

-1つのアクティブインターフェイスのみ使用し、アクティブインターフェイスの障害時にはスレーブされた他のインターフェイスに切り替わる

2: balance-xor

障害耐性とロードバランシングに対するXORポリシー

制約
Ether ChannelなどのTruningをサポートするネットワークスイッチと接続する必要がある

-送信アダプター: 送信先のMACアドレスをキーとするハッシュで選択される

  • 受信アダプター: ネットワークスイッチ側の判断で選択される
3: broadcast

障害耐性用のブロードキャストポリシー

  • 全てのアダプターからパケットを送出する。
  • 特殊なネットワーク構成において使用するもので通常の環境では使用できない。
4: 802.3ad

IEEE 802.3ad ダイナミック リンクアグリゲーションポリシー

制約
IEEE 802.3adに対応したネットワークスイッチが必要

-IEEE 802.3ad Link Aggrigationの規格による接続(同じスピードとデュプレックス設定を共有するアグリゲーションを作成し、アクティブなアグリゲーション内全てのスレーブインターフェイス上で送受信を行う)

5: balance-tlb

障害耐性とロードバランシング用の送信ロードバランシング(TLB)ポリシー

制約
ネットワークスイッチに特別な機能は必要ない

-送信: アダプターの速度、負荷に応じて選択される

  • 受信: 1つのアクティブアダプターのみを選択し、障害時には他のアダプターに切り替えられる
6: balance-alb

障害耐性とロードバランシング用のアクティブロードバランシング(ALB)ポリシー

制約
ネットワークスイッチに特別な機能は必要ない

-送信: アダプターの速度、負荷に応じて選択される

  • 受信: アダプターの速度、負荷に応じて選択される。ただし、通信相手のIPアドレスに応じて固定したアダプターを使用する(通信相手のARPテーブルに登録されるMACアドレスを変更することで受信アダプターを選択する(ARPネゴシエーション)ため、ルータ越しの通信の場合、常に同じアダプターが使用される)
スイッチの冗長構成を取る場合

active-backupポリシーが最適かと思われるが、balance-tlb, balance-albでもいけそう(未検証)。

primary: プライマリアダプター

mode=1 (Active-Backup)モードにて、起動時に優先的にアクティブアダプターとして使用するアダプタのエイリアス(eth0など)を指定。

miimon: MII(Media Independent Interface)リンク監視

MII規格のリンク情報を利用する。つまり、MIIのリンクダウンイベントのみを見ているので物理アダプタのドライバモジュールが検知できない障害(ネットワークスイッチより先の接続障害)は検知できない。デフォルトは100(ms)。

updelay: MII管理リンクアップ遅延時間

MIIリンク監視によるリンクアップを検知後、対象のアダプタをアクティブにするまでの遅延時間を指定する。miimonの整数倍の値にする必要がある

参考

[Ubuntu/Kubuntu] パッケージをアップグレードしたらVMware Server Consoleが動かなくなった場合の対処

2008/11/28PC::VMware

Kubuntu 8.04を導入しているメインマシンに導入されているVMware Server Consoleが先日のKernel 2.6.24-21から2.6.24-22へのパッケージアップグレードを機に動作しなくなった。その際に再びVMware Server Consoleが動作するように対処したときのメモ。

環境

VMware Server ホスト

  • Debian GNU/Linux 4.0(etch)/i386
  • VMware Server 1.0.6

VMware Server クライアント

  • Kubuntu 8.04.1 日本語ローカライズド(i386)
  • VMware Server Console 1.0.6

現象

VMware Server ConsoleがKatapultから起動させることが出来なくなった。で、vmware-server-console-distribに含まれているインストールスクリプトを叩いて再インストールしても立ち上がらず。直接VMware Server Consoleを叩くと以下のようなエラーを吐いていることを確認。

kaede@reika:/usr/local/bin/vmware-server-console-distrib$ vmware-server-console
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/libstdc++.so.6)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/libstdc++.so.6)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/libstdc++.so.6)

対処法

VMware Serverクライアントに導入されているGCCは4.2.4 (Ubuntu 4.2.4-1ubuntu3)。要求されているGCCは3.4または4.2.0。このあたりの整合性の問題でエラーを吐いて起動しないと考えられる。
いろいろ調べた結果、以下のファイルをリネームすればいいらしい。

$ cd /usr/lib/vmware-server-console/lib
$ sudo mv libpng12.so.0/libpng12.so.0{,.bak}
$ sudo mv libgcc_s.so.1/libgcc_s.so.1{,.bak}

他にもwrapper-gtk24.shにパッチを当てる方法でも対処できるらしい。参考にしたWebサイトにてその方法も紹介されています。

おそらく

対象のlibgcc_sライブラリについて調べてみたらvmware-server-consoleにて用意されたものの他に導入されていた。

$ find /usr -name "libgcc_s*"
/usr/lib/gcc/i486-linux-gnu/4.2/libgcc_s.so
/usr/lib/vmware-server-console/lib/libgcc_s.so.1
/usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1.bak

おそらくVMware Server Consoleにて用意されているライブラリを優先的に参照し、GCCのバージョン不整合によりエラーが発生しているものと考えられる。一方、GCCのバージョンと整合性が取れているものは/usr/lib/gcc/i486-linux-gnu/4.2/以下に導入されていると考えられる。
問題のファイルをリネームすることで、優先順位が低く設定されているVMware Server Consoleにて用意されている方ではないlibgcc_sが利用させるようになり、エラーが解消されるのであろう。

参考

[W2k3] ライセンス認証に失敗し、「メッセージ番号:32777」が表示される場合の対処法

2008/11/07PC::Tips

Windows Server 2003のライセンス認証を行った際に、メッセージ番号:32777が表示され認証手続きを行うことができない場合の対処法のメモ。

環境

  • Windows Server 2003 Standard Edition R2 SP2 (32bit) 評価版
  • VMware Workstation 6.0 仮想マシン環境
  • Windows Updateなどは実行可能

対処方法

IEの詳細設定から「サーバー証明書の取り消しを確認する(再起動が必要)」のチェックボックスをオフにすれば認証を行うことができる。
ただし、この証明書の取り消しを無効にすることは推奨されないため、認証が通った後は元に戻すことをお勧めします。

ちなみに

インストール時の14日間のライセンス認証猶予期間を過ぎた状態ではIEの設定を弄る事ができません。このため、上記対処方法は利用できず電話でのライセンス認証を行うしかなくなってしまいます。*1

*1 : 電話をかけるのが面倒なので再インストールしましたが(苦笑

参考

Microsoft KB:816897 インターネット経由でWindows Server 2003のライセンス認証の手続きを行うと "メッセージ番号: 32777"のエラーメッセージが表示される

SDカードが正しい容量を認識しなくなったときの対処

2008/10/12PC::Tips

microSDの2GBをデジカメでフォーマットしたら1GBの容量でフォーマットされてしまい、PCなどで再フォーマットをかけようとしても1GBでしか認識しなくなりました。何とか元の2GBの容量に再フォーマットすべく試行錯誤したときのメモ。

環境

SDカード
Transcend microSD 2GB(MM8GR02GUACY-NA)
デジカメ
CASIO EXILIM EX-Z4A
Linux PC
Kubuntu 8.04.1日本語ローカライズド
SD R/W on Linux PC
ELECOM MULTICARD READER MR-DU2A7SV
Windows PC
Windows XP Professional SP3
SD R/W on Windows
IBM ThinkPad X41 内蔵SD R/W
SDフォーマットツール
Panasonic SDFormatter V2.0.0.3

復旧手順

1. SDFormatterでの復旧

SDFormatterの概要はこちら。このツールを使えばSDカードとして最も正しくフォーマットされるはずだが、復旧を試みるも1GBのSDカードとしてしか認識せず。

2. Linux環境下での操作

とりあえずローレベルフォーマットを行うべく、ddでゼロフィルしてみることにする。
ちなみに、fdiskを走らせているのはデバイスの容量及びパーティション構成を調べる為。パーティションだけが1GBで切られていると思いきや、デバイス自体が1GBの容量として認識されていたのは意外(汗

kaede@reika:~$ sudo fdisk /dev/sdg

このディスクのシリンダ数は 7788 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): p

Disk /dev/sdg: 1020 MB, 1020788736 bytes
8 heads, 32 sectors/track, 7788 cylinders
Units = シリンダ数 of 256 * 512 = 131072 bytes
Disk identifier: 0x00000000

デバイス Boot      Start         End      Blocks   Id  System
/dev/sdg1   *           1        7788      996836+   6  FAT16

コマンド (m でヘルプ): q

kaede@reika:~$ sudo dd if=/dev/zero of=/dev/sdg
dd: writing to `/dev/sdg': No space left on device
1993729+0 records in
1993728+0 records out
1020788736 bytes (1.0 GB) copied, 671.545 s, 1.5 MB/s

これでとりあえずMBRも含め不正な情報は初期化されたはず。

3. 再度SDFormatterでフォーマットしてみる

ローレベルフォーマット済みのSDカードを再度SDFormatterで認識させると、無事に2GBのSDカードとして認識するようになりました。

#large: is not allow

今回はネイティブ環境のLinuxを利用しましたが、SDカードが認識出来ればどんなディストリビューションでもいけるはずです。困っている場合はお試しあれ。