#author("2016-12-05T02:26:01+09:00","default:nowsky","nowsky")
*bonding [#x6e2d97e]
#author("2016-12-05T03:20:54+09:00","default:nowsky","nowsky")
*bonding [#bef1a23d]
複数のNICを束ねる事で、耐障害性向上・トラフィック負荷分散を図る技術。
目的に応じて複数の分散方法から最適な物を選択する必要がある。
 
様々な別名があり、Bonding(ボンディング)以外には、チーミング(Teaming)、
CiscoだとPortChannel(リンクアグリゲーション)と呼ぶ事もある。
~
* [#oec96b83]



ここではLinuxの&font(b){ソフトウェアRAID};を取り扱う
ソフトウェアRAIDの場合、違う型番のHDDを使ったり柔軟な構成を組める。
しかし、ソフトウェアRAIDのバグ=RAIDアレイ崩壊の可能性もある点に注意する。
~
*ステータス表示 [#vb3034b2]
RAID同期ステータスの確認方法
*参考サイト [#m73805f7]

 # cat /proc/mdstat
-[[RHEL6 チャンネルボンディングの使用:+https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Using_Channel_Bonding.html]]

~
*RAIDアレイ再構築 [#i0d169fb]
HDDが故障した時にRAIDアレイ(RAID-1など)を再構築するには、mdadmコマンドを利用する。
説明に使う各HDDのステータスは下記の通りとする。
*冗長化アルゴリズム [#z3e53e31]
&font(b){モードを何も指定しない場合は、&color(#ff0000){balance-rr};};が自動的に選択される。
bondingインターフェースの&font(b){対向L2SWでLACPを設定出来る場合、&color(#ff0000){802.3ad};を選択する};のが汎用性が高い。
 
&font(b){blance-rr};はラウンドロビン方式となる為、対向L2SWがスタック構成の場合は、
パケット送信元のMACアドレスが都度変化する事となり、&font(b){稀に&color(#ff0000){接続断が発生};};する。
これは、Linux・UNIXのOSを使っているアプライアンス(SANディスク装置、負荷分散装置、ファイアウォール)全般に当てはまる事が多い。
その為、blance-rrは基本的に使用しない事を推奨する。
どうしても使用する場合は、対向L2SWが1台である事を前提に設計する必要がある。
 
#region(&color(#ff0000){アルゴリズム一覧};)
| mode | 別名          | 説明                                                                                                                                                                                                                                                                                                                                 |
| 0    | balance-rr    | 耐障害性とロードバランシングのためラウンドロビンポリシーを設定します。&br;利用可能な第1のインターフェースからそれぞれのボンディングされた、&br;スレーブインターフェースで送受信が順次行われます。                                                                                                                                    |
| 1    | active-backup | 耐障害性のためアクティブなバックアップポリシーを設定します。&br;利用可能な第1のボンディングされたスレーブインターフェースにより送受信が行われます。&br;別のボンディングされたスレーブインターフェースは、&br;アクティブなボンディングされたスレーブインターフェースが失敗した場合にのみ使用されます。                                |
| 2    | balance-xor   | 耐障害性とロードバランシングのためXOR(排他的論理和)ポリシーを設定します。&br;この方法を使用すると、インターフェースによって受信要求のMACアドレスと、&br;スレーブNICの1つのMACアドレスが一致します。&br;このリンクが確立すると、利用可能な第1のインターフェースから送信が順次行われます。                                             |
| 3    | broadcast     | 耐障害性のためブロードキャストポリシーを設定します。&br;すべての送信は、すべてのスレーブインターフェースで行われます。                                                                                                                                                                                                               |
| 4    | 802.3ad       | IEEE802.3ad動的リンクアグリゲーションのポリシーを設定します。&br;同一の速度とデュプレックス設定を共有するアグリゲーショングループを作成します。&br;アクティブなアグリゲーターのすべてのスレーブで送受信を行います。&br;802.3adに対応するスイッチが必要です。                                                                         |
| 5    | balance-tlb   | 耐障害性とロードバランシングのため送信ロードバランシング(TLB)ポリシーを設定します。&br;発信トラフィックは、各スレーブインターフェースの現在の負荷に従って分散されます。&br;受信トラフィックは、現在のスレーブにより受信されます。&br;受信しているスレーブが失敗すると、別のスレーブが失敗したスレーブの MAC アドレスを引き継ぎます。 |
| 6    | balance-alb   | 耐障害性とロードバランシングのためアクティブロードバランシング(ALB)ポリシーを設定します。&br;IPV4トラフィック用の送受信ロードバランシングが含まれます。&br;ARPネゴシエーションにより、受信ロードバランシングが可能です。                                                                                                             |
#endregion

|          | ステータス | /dev/md0  | /dev/md1  |
| /dev/sda | 稼働       | /dev/sda1 | /dev/sda2 |
| /dev/sdb | 故障       | /dev/sdb1 | /dev/sdb2 |

-/dev/sdb1と/dev/sdb2にFフラグを付ける。拒否されたら直接RAIDアレイから取り除く
 # mdadm /dev/md0 -f /dev/sdb1
 # mdadm /dev/md1 -f /dev/sdb2
 # cat /proc/mdstat

-故障したHDDをRAIDアレイから取り除く
 # mdadm /dev/md0 -r /dev/sdb1
 # mdadm /dev/md1 -r /dev/sdb2

-故障HDD入れ替え後にパーティション作成
 # fdisk -l /dev/sda
 # fdisk /dev/sdb
 : w
 ---
 稼働中のHDDと同じパーティション(Start-End)を作成する
 パーティション情報をそのままダンプする場合は↓のコマンドを打つ
 ===
 # sfdisk -d /dev/sda | sfdisk /dev/sdb –force

-パーティションIDの変更
 # fdis /dev/sdb
 : t
 : fd
   Changed System type of partition 1 to fd (Linux raid autodetect)
 : w

-新しいHDDをRAIDアレイに参加させる
 # mdadm /dev/md0 --add /dev/sdb1
 # mdadm /dev/md1 --add /dev/sdb2

-RAID-1アレイの構成情報を確認
 # cat /proc/mdstat
 # mdadm --detail /dev/md0
 # mdadm --detail /dev/md1

~
*GRUB手動インストール [#qe693733]
kernelのアップデート・再インストール、RAID-1アレイの再構築後は、
RAID-1で冗長化している2台のHDDそれぞれにgrubを入れ直す必要がある。
今回は、/dev/sdaと/dev/sdbでRAID-1を組んでいる事とする。
-[[ブートディスクをソフトウェア RAID1に構成する際の注意:+https://users.miraclelinux.com/technet/faq/data/00080.html]]
-[[RAID構成ハードディスク交換:+https://centossrv.com/centos5-raid-3.shtml]]

grubのデバイス指定はLinuxのデバイス指定とリンクしていないので、
明示的に設定を行う必要がある。
例えば、rootデバイスが/dev/sdaの場合、カンマの後の指定は下記のようになる。

| /dev/sda  | grub> device (hd0) /dev/sda |
| /dev/sda1 | grub> root (hd0,0)          |
| /dev/sda2 | grub> root (hd0,1)          |
| /dev/sdb3 | grub> root (hd0,2)          |

*送信ポリシー [#w3b321a6]
bondingには負荷分散アルゴリズムとは別に、パケット送信ポリシーが存在する。
L2~L4で分散方式に重み付けをする事で、bondingしているのに1インターフェースに偏るのを解消する事が出来る。
 
grubを手動インストールする際は、デバイスIDが大きい&font(b){サブ側(/dev/sdb)へ先にインストール};し、
その後にデバイスIDが小さい&font(b){メイン側(/dev/sda)へインストール};する
何も設定しない場合は、&font(b){&color(#ff0000){L2};(MACアドレス)};ベースでの負荷分散になる。
送信元のLinuxサーバが仮想化している場合パケット送信元が全て同じMACアドレスとなる為、L2制御では偏りが発生する。
このような場合は&font(b){&color(#ff0000){L2+L3};(MACアドレスとIPアドレスのハッシュ)};で分散を行う方が良い。
 
#region(&color(#ff0000){ポリシ一覧};)
| policy | 別名          | 802.3ad      | 説明                                                                                                                                                                                       |
| 0      | Layer2        | 対応している | ハードウェアMACアドレスのXORを使用してハッシュを生成します。&br;すべてのトラフィックを同じスレーブの特定のネットワークピアに割り振ります。                                                 |
| 1      | Layer3+Layer4 | 対応してない | 上位レイヤープロトコルの情報を使用して、ハッシュを生成します。&br;断片化されたTCPまたはUDPパケットと他の全IPプロトコルトラフィックについては、&br;送信元及び宛先ポート情報が省略されます。 |
| 2      | Layer2+Layer3 | 対応している | Layer2及びLayer3プロトコル情報の組み合わせを使用して、ハッシュを生成します。&br;すべてのトラフィックを同じスレーブの特定のネットワークピアに割り振ります。                                 |
#endregion

 # grub
 ---
 > root (hd1,0)
 > setup (hd1)
 > root (hd0,0)
 > setup (hd0)
 > quit
~
*設定方法 [#uda6492c]
CentOS4、CentOS5~7でパラメータの指定方法が変化する。
CentOS以外のディストリビューションを使っている場合は、それぞれに合わせて設定を作成する。