NICの冗長化しちゃおうぜ?
いま現在ネットワーク関連の業務を進めています。
冗長化構成へのリプレイスに向け、ansibleのplaybook検証などを進めておます。
最近ネットワークのお頭からポートトランキングの設定を纏めておいて
との事で依頼を受けました。
ポートトランキング...?
という事で、やってみました!
ポートトランキング!
目次
1.ポートトランキングについて
2.ボンディングの設定(ココらへんから設定開始)
2-1.Bondingモジュールの設定ファイルの作成
2-2.NICの設定
2-3.マスターとなるNICの設定
2-4.ネットワークの再起動
2-5.bond0の確認方法
2-6.冗長化の確認
2-7.eth0をdownさせた状態
ポートトランキング
まずポートトランキングについてですが
ネットワーク機器において、複数の物理ポートを束ねて使用すること。ポートトランキングを使用することで、複数の物理ポートが論理的に1本として扱われ、 帯域幅を増やすと同時に、物理リンクの何本かに障害が発生しても残りのリンクによって通信することができる。VLANからも単一ポートとして認識される。
ポートトランキングとは- IT単語帳 - IT、IT製品の情報なら【キーマンズネット】
メーカーさんなどにより
ボンディングであったり、チーミングであったり、トランキングであったりと
名称は違うみたいですが意味合いなどは同じ感じですかね。
こちらのブログを参考にしました!
今回の目的としては
サーバ側のNICの冗長化でしたので、ボンディングになりますね!
別のボンディングの用途としては、
スループットの増強にも使えるようです。
なんとなく理解は出来ましたが、イメージしにくいので画像がありました。
参考画像元
意外と知らない?NICを冗長化するボンディング(bonding) - うさぎ文学日記
これならイメージがしやすいかと!
サーバ側のeth0とeth1をlinuxのBondingモジュールにより
ひとつのNICとして認識させ、スイッチからの通信を冗長化してる感じですね!
ボンディングの設定を行う
実際に設定を行っていきます。
まずはBondingモジュールの設定から
■使用OS
CentOS6.6
Bondingモジュールの設定ファイルの作成
ここで気を付けるのが 「mode=x」です。
設定値を適宜入れるのですが
Mode No. | Mode Name | description |
0 | balance-rr | 耐障害性とロードバランシングのためラウンドロビンポリシーを設定します。利用可能な第 1 のインターフェースからそれぞれのボンディングされたスレーブインターフェースで送受信が順次行われます。 |
1 | active-backup | 耐障害性のためアクティブなバックアップポリシーを設定します。利用可能な第 1 のボンディングされたスレーブインターフェースにより送受信が行われます。別のボンディングされたスレーブインターフェースは、アクティブなボンディング されたスレーブインターフェースが失敗した場合にのみ使用されます。 |
2 | balance-xor | 耐障害性とロードバランシングのため XOR (排他的論理和) ポリシーを設定します。この方法を使用すると、インターフェースによって受信要求の MAC アドレスとスレーブ NIC の 1 つの MAC アドレスが一致します。このリンクが確立すると、利用可能な第 1 のインターフェースから送信が順次行われます。 |
3 | broadcast | 耐障害性のためブロードキャストポリシーを設定します。すべての送信は、すべてのスレーブインターフェースで行われます。 |
4 | 802.3ad | IEEE 802.3ad 動的リンクアグリゲーションのポリシーを設定します。同一の速度とデュプレックス設定を共有するアグリゲーショングループを作成します。アクティブなアグ リゲーターのすべてのスレーブで送受信を行います。802.3ad に対応するスイッチが必要です。 |
5 | balance-tlb | 耐障害性とロードバランシングのため送信ロードバランシング (TLB) ポリシーを設定します。発信トラフィックは、各スレーブインターフェースの現在の負荷に従って分散されます。受信トラフィックは、現在のスレーブにより受 信されます。受信しているスレーブが失敗すると、別のスレーブが失敗したスレーブの MAC アドレスを引き継ぎます。 |
6 | balance-alb | 耐障害性とロードバランシングのためアクティブロードバランシング (ALB) ポリシーを設定します。IPV4 トラフィック用の送受信ロードバランシングが含まれます。ARP ネゴシエーションにより、受信ロードバランシングが可能です。 |
http://ja.community.dell.com/techcenter/b/weblog/archive/2014/05/16/linux-bonding-mode-0
自分の設定する意図に合わせて、設定値を決めてください。
今回は冗長化ですので、「mode=1」としました。
NICの設定
次はサーバのNICの設定をします。
「ifcfg-eth0」と「ifcfg-eth1」それぞれスレーブ化させる設定をします。
the ifcfg-eth0 and ifcfg-eth1 file is edit
マスターとなるNICの設定
「ifcfg-eth0」と「ifcfg-eth1」をスレーブ化させたので
お次はマスター的な設定ファイルを作成します。
ネットワークの再起動
設定ファイルの作成などが完了したので、再起動をかけます。
bond0の確認方法
再起動後に設定を確認します。
設定は問題なさそうです。
冗長化の確認
では、冗長化出来ているかどうかを確認していきます。
確認方法は色々あります。
実際にLANを抜き差しして、pingを打って確認したり
eth0とeth1を交互にdownさせてみたり。
その作業の中で状態を確認するのが以下のコマンド
eth0をdownさせた状態
逆にeth1をdownさせてもpingは通りました。
次はこれを複数台に設定するために
ansibleを使用してplaybookでやってみます。
社内の勉強会で趣味に走った(Arduino工作)
毎週ある社内勉強会のお当番だったので、なににしようか悩んでいた時に・・・
ふとこの腕時計を見て思いつきました!
ウェアラブルデバイスじゃね!?
と、いうことでslideshareにもアップしてみました!
結果的には面白かったです!
高校が工業系の学校だったので、学生時代を思い出しました!
ただ、社内での私のキャラ上あまり
喋るのもうまくはないので、盛り上がりに欠ける部分があったのは改善の必要あり。
次回はなにをしようかなー?
名前ベースのバーチャルホストで複数のSSLを扱う(SNI使用)
1台のサーバで複数のドメインを使用する事になり、SSLで対応する事になりました。
調べ始めると、ポートを別々にしないと無理!
などが書いてあり、これはめんどくさいな~
とか思っていたのですが!!
深く調べるとどうやらSNIという便利拡張機能があるらしいのでそちらで対応してみます!
SNI:Server Name Indication
この拡張機能により名前ベースのバーチャルホストでもSSLが使用可能になりました。
ちなみにバージョンにより使用できないので、注意を!
Apache | 2.2.12以降 |
OpenSSL | 0.9.8j以降 |
※ブラウザでも対応してないバージョンがあるのでご注意を!
では、実際に設定します!
vi /etc/httpd/conf.d/ssl.conf
#追加
NameVirtualHost:443
#offに設定
SSLStrictSNIVHostCheck off
<VirtualHost *:443>
ServerName lamp-sv
DocumentRoot "/var/www/lamp-sv"
<Directory "/var/www/lamp-sv">
Options MultiViews
AllowOverride None
</Directory>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLInsecureRenegotiation on
#「lamp-sv」用のサーバ秘密鍵と証明書
SSLCertificateFile /etc/pki/tls/certs/lamp-sv.crt
SSLCertificateKeyFile /etc/pki/tls/certs/lamp-sv.key
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)|(js)$" nolog
ErrorLog logs/lamp-sv_error_log
CustomLog logs/lamp-sv_access_log combined env=!nolog
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
<VirtualHost *:443>
ServerName virtual-sv
DocumentRoot "/var/www/virtual-sv"
<Directory "/var/www/virtual-sv">
Options MultiViews
AllowOverride None
</Directory>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLInsecureRenegotiation on
#「virtual-sv」用のサーバ秘密鍵と証明書
SSLCertificateFile /etc/pki/tls/certs/virtual-sv.crt
SSLCertificateKeyFile /etc/pki/tls/certs/virtual-sv.key
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)|(js)$" nolog
ErrorLog logs/virtual-sv_error_log
CustomLog logs/virtual-sv_access_log combined env=!nolog
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
といった感じに設定すればOKです!
僕の場合は3ドメインあったので3つ設定しました。
SNIに未対応のブラウザ用に「SSLStrictSNIVHostCheck」デレクティブを off にしておきます。
SNIの仕組み
SNIではSSL/TLSのやりとりの中で、暗号化していないホスト名をサーバに伝えてくれるので、指定したバーチャルホストを表示することができます。
設定が楽になったので技術の進歩はすごいですね!
ありがとうございました!