keepalivedでweight設定が戻らない!! (#`Д´)ゴ---!!

XenServerの罠なのか?自分が悪いのか?わからないです。(#`Д´)ゴ---!!

XenServer5.5(VMはCentOS5.5)で、keepalivedを試し中です。


緑の枠は、ホストサーバの範囲です。
1つのホストサーバ内に6つのVMを立てて実験してみました。


こんな感じの構成で、だいたい思ったような動作をしてくれているのですが・・・

例えば、配下のWebサーバが落ちたり、監視対象パス(check.htmlとか)を削除したりとか、そういう事をするとバランス対象から一旦外れて、復活後にはまた元通りです。

なのですが・・・、

以下の事をすると期待する動作になりません。(#`Д´)ゴ---!!


1)バランサ-1側がMASTER状態の時に「ifdown eth1」を実施。
  ↓
  MASTERがバランサ-2に切り替わる(ここまで問題無し)

2)バランサ-1側にて、「ifup eth1」を実施。
  ↓
  バランサ-1の方のpriorityを高くしているので、MASTERがバランサ-1に戻る
  (ここまでも期待通り)

3)バランサ-1から配下のWebサーバに流れなくなる!!
  ↓
  1)で「ifdown eth1」を実施した時に配下Webサーバに対するWeight値が「0」に
  なるのですが、それが復旧後も直りません。
  ※復旧後にweight値が最初の「1」に戻る事を期待してました。

「ifdown eth0」の実行前:
# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.100:http rr
  -> 10.1.1.110:http              Masq    1      0          10
  -> 10.1.1.120:http              Masq    1      0          11
  -> 10.1.1.130:http              Masq    1      0          11
「ifdown eth0」の実行後:
# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.100:http rr
  -> 10.1.1.110:http              Masq    0      0          10
  -> 10.1.1.120:http              Masq    0      0          11
  -> 10.1.1.130:http              Masq    0      0          11


この状態のまま、バランサ-1がMASTERになるので、クライアントからの接続要求が何処にも行かずに止まってしまいます。(#`Д´)ゴ---!!


これは何かを間違えているのでしょうか????

因みに、XenServerを使わずに物理マシンだけで構成するとこのような状態にはなりませんでした。

keepalived.confの設定は以下の通りです。(・◇・;)

vrrp_sync_group VG {
  group {
    VI_eth0
    VI_eth1
  }
}

vrrp_instance VI_eth0 {

    state MASTER
    interface eth0
    garp_master_delay 5
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass naisho
    }
    virtual_ipaddress {
        192.168.1.100  dev eth0
    }
}

vrrp_instance VI_eth1 {

    state MASTER
    interface eth1
    garp_master_delay 5
    virtual_router_id 52
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass naisho
    }
    virtual_ipaddress {
        10.1.1.100  dev eth1
    }
}


virtual_server_group mtest {
  192.168.1.100 80
}

virtual_server group mtest {

  lvs_sched  wrr
  lvs_method NAT
  protocol   TCP
  virtualhost mhealth

  real_server 10.1.1.110 80 {
    weight 1
    inhibit_on_failure
    HTTP_GET {
      url {
        path        /index.html
        status_code 200
      }
      connect_timeout  3
    }
  }

  real_server 10.1.1.120 80 {
    weight 1
    inhibit_on_failure
    HTTP_GET {
      url {
        path        /index.html
        status_code 200
      }
      connect_timeout  3
    }
  }

  real_server 10.1.1.130 80 {
    weight 1
    inhibit_on_failure
    HTTP_GET {
      url {
        path        /index.html
        status_code 200
      }
      connect_timeout  3
    }
  }

}

puttyとscreenとvimと・・・ (#`Д´)ゴ---!!

自分の開発環境が、putty+screen+vimな感じなのですが、
screenでちょっとだけ昔の表示が見たいなんて時にマウスホイールが使えず
(#`Д´)ゴ---!!となる事がチョイチョイです。

まあ、screenの仕様っていうか、vimもそうですが、基本マウスは使うなって
事かと思い、修行を積んで居たのですが・・・。

別件でscreenネタを調査している時に偶然発見です。イイ(・∀・)!!

putty+screenでマウスホイールを有効にする方法!!

putty側の設定になります。

Putty設定変更メニューより・・・

端末⇒高度な設定⇒Alternate端末画面への切り替えを無効にする

これで、screen使ってても、ちょいとマウスホイールでスクロールが出来るように
なりました。イイ(・∀・)!!イイ(・∀・)!!イイ(・∀・)!!



そしてもう1件のネタ。

putty+screen+vimでのマウスホイールを有効にする方法!!

vimrcに設定を加えて下さい。

set mouse=a
set ttymouse=xterm2 ←screenの場合、こいつがキモらしいです。(・◇・)


これでまた出社が楽しく成りました。イイ(・∀・)!!


ちょっと追記(4/20)

putty+screenで、Ctrl+矢印キーで移動する方法!!

やっと見つけたよ。

bindkey "^[OC" next
bindkey "^[OD" prev
termcapinfo xterm "ks=\E[?1l\E:ku=\E[A:kd=\E[B:kl=\E[D:kr=\E[C:kh=\E[5~:kH=\E[F"

※termcapinfoの行も必要です。僕はこれを書かないでハマリました。(#`Д´)ゴ---!!

VMのコピーでネットワークが認識出来ない!! (#`Д´)

かなりの小ネタですが、とりあえず・・・。(・◇・)

仮想化という事でXenServerを使っているのですが、仮想化って凄いですね。
今更ながら感動してます。

で、感動の1つに、VMのコピーという機能があります。イイ(・∀・)!!
1つの雛形を作ってしまえば、後はそれをコピーするだけで量産可能という凄いやつです。

おまけに、あっという間で出来上がります。
凄いなぁ〜

と、浮かれてVMをコピーしたのは良いのですが、ネットワークに繋がらないじゃないですか(#`Д´)ゴ---!!

原因は、ちょっと調べたら判りました・・・。

要は、VMコピー後には新規VMに対して新しいMACアドレスが振られるのですが、
ネットワークの設定ファイルは古いVMMACアドレスがそのままだからでした・・・・。

※僕の環境は、CentOSです。

cd /etc/sysconfig/network-scripts

vi ifcfg-eth0
vi ifcfg-eth1
vi ifcfg-eth2

この辺りのファイルの情報にあるMACアドレスが古いVMのままだったのが原因でした。

[,H200]

[,H200]

という事なので、XenCenterとかでコピー後のMACアドレスを確認して、
該当ファイルを更新後に、

service network restart

これでOK。の筈です。(・◇・)

因みに、コピー元のいろんなモノがそのままなので、(当たり前か)
デフォルトゲートウェイとか・・・。その辺りのチェックも大事です。

というワケでVMのコピーは、かなり イイ(・∀・)!! です。

PPPoEのマルチセッションとルーティング イイ(・∀・)!!

前々回のエントリーの続きです。
PPPoEでマルチセッションを張るにあたっての構成で考えられるのは、
以下の2パターンかと思います。

1)ethポートを2つ使う場合:

 

2)ethポートを共有する場合:

 

これらの設定は、pppoe.conf内や、ifcfg-pppX内の該当箇所を変更するだけです。(・◇・)

ところで、どちらにしても2回線以上のセッションが張られている場合で、

ping google.co.jp

を実行した場合は、どちらの回線から外に出て行くのか分かります?
これを制御する為の設定がlinuxのルーティング設定(ipコマンド)になります。

どっちの回線から出力されるのか?

自分も最初これが分からなかったです。
マルチセッションを張ったものの、出力先回線の振り分けってどうなっているの?って。
マルチセッションが出来て、外側からそれぞれのIP宛にsshしたりして、繋がった繋がったと
喜んでいたのですが、ふと内部からtracerouteを掛けてみた所、何回やっても片方からしか出て行かず。
(#`Д´)ゴ---!!

そこで分かったのが、defaultルート設定されている側のpppからしか、外へ出て行かないという事でした。
当たり前と言えばそうですが、これでは出力時は片方からしか出て行きません!!
幸い?defaultルート設定を切り替えるコマンドは知っていたので、以下のようにしてました。

ip route replace default via X.X.X.X   ←回線1から出す場合
ip route replace default via Y.Y.Y.Y   ←回線2から出す場合

ただこれだと静的な設定なので、あまり役に立ちません。
出来れば、何処そこ行きのデータは回線1を使うとかを自動で切り替えて欲しいです。
また、例えばルータとして使う場合などは、配下のサーバ1から来たパケットは回線1を・・・とか。

ルーティングの設定

これらの事をしてくれるのが、linuxのルーティング設定コマンドになります。
自分も最初はよく分からなかったのですが、イロイロ弄っているうちになんとなく分かって来ました。(・◇・)

  • ip route ⇒ 現在のルーティング情報を表示(最後の行でdefaultルートが分かる)
# ip route
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.31
169.254.0.0/16 dev eth1  scope link
10.0.0.0/8 dev eth1  proto kernel  scope link  src 10.0.0.50
default via 192.168.1.1 dev eth0

とりあえずこんな感じです。
pppセッションが張られてたり、ethポートが複数あるともっと表示が違ってきます。

  • ip rule ⇒ 現在設定されているルーティングの優先順位を表示
# ip rule
0:      from all lookup 255
32766:  from all lookup main
32767:  from all lookup default

どちらかと言えばコチラの方がミソです。
右端の「255」や「main」や「default」は、ルーティングが設定されているtableと呼ばれるものです。
その各tableが左側に書かれている数字の順番事に評価され、実行されていくという感じの動作です。

次のコマンドで、これらのテーブルの定義が分かります。

  • ip rule show table table名 ⇒ 現在設定されているルーティングテーブルの中身を表示
# ip route show table 255
broadcast 192.168.1.0 dev eth0  proto kernel  scope link  src 192.168.1.31
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1
broadcast 10.0.0.0 dev eth1  proto kernel  scope link  src 10.0.0.50
local 10.0.0.50 dev eth1  proto kernel  scope host  src 10.0.0.50
broadcast 192.168.1.255 dev eth0  proto kernel  scope link  src 192.168.1.31
broadcast 10.255.255.255 dev eth1  proto kernel  scope link  src 10.0.0.50
local 192.168.1.31 dev eth0  proto kernel  scope host  src 192.168.1.31
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1

いろいろあって分かりにくいですが、要はどこから来たパケットを何処へ出すか(どう処理するか)
といった感じの定義がずらずらっと書いてあります。(・◇・)

でもって、このテーブルを増やしたり、編集したりする事で、ルーティングの制御が可能になります。
以下に、覚書き的に羅列します。

  • ipコマンド覚書

■デフォルトルート関連

・今あるやつの置き換え

#ip route replace default via 192.168.1.100

・削除してから追加

#ip route del default ←最初これで設定済みのやつを削除しておく。

追加は、以下のどれでもOK
#ip route add default via 192.168.1.100
#ip route add 0/0 via 192.168.1.100
#ip route add via 192.168.1.100
#ip route add default dev ppp0 ←IP指定じゃなく、pppインタフェースも指定可能。

#ip route show table main ←これで確認。

■ルーティング関連

・既存テーブルを編集(追加とか削除とか)

既存tableは、255とmainとdefaultがありますが、基本的にはmainをイジル感じです。
ってゆーか、テーブルを指定しないとmainになるみたいです。
上の、デフォルトルートのやつもmainテーブルの中身が書き換わる感じです。

192.168.0.0/24からのやつは、192.168.0.100から出ろ!!
#ip route add 192.168.0.0/24 via 192.168.0.100 ←これでmainテーブルに追加
#ip route del 192.168.0.0/24          ←これでmainテーブルから削除

#ip route show table main ←確認


・新規テーブルを作ってしまう方法

192.168.0.0/24からのやつは、192.168.0.100から出ろ!!
#ip route add 0/0 via 192.168.0.100 table 1     ←1というテーブルを新規生成
#ip rule add from 192.168.0.0/24 table 1 pref 34000 ←新規追加したテーブルをruleに反映

#ip rule ←これで確認。
0:      from all lookup 255
32766:  from all lookup main
32767:  from all lookup default
34000:  from 192.168.0.0/24 1   ←ここに追加される。

■キャッシュのクリア

ルーティングの設定を更新しても反映されない時は、キャッシュの仕業なので、これでクリア。

ip route flush cache

取りあえずこんな感じで、なんとかやりたい事は出来るようになりました。イイ(・∀・)!!

vimの対応する括弧表示が制御出来ない!! (#`Д´)ゴ---!!

vimで編集する時に、対応する括弧がハイライトされるのは、
ありがたい場合もあるけど、実際結構うざかったりもします。(・◇・;)

そんな時は、

:set showmatch
:set noshowmatch

とかで、その機能を有効・無効にしてたんですが。(vimrc設定)
vimのバージョンが上がってから、なんだかこれが効きません。(#`Д´)ゴ---!!

常に煩わしくて、見にくい感じで対応括弧がハイライトされてます。

で、イロイロ調べたら対応策が2つ。

1)ハイライト表示の色を制御して見やすく!!
hi MatchParen term=standout ctermbg=LightGrey ctermfg=Black guibg=LightGrey guifg=Black
2)対応する括弧のハイライト表示をしない!!
let loaded_matchparen = 1


自分はコッチで。

対応する括弧は、vim中に「Shift+5(%記号)」で確認出来るので、それで事足ります。イイ(・∀・)!!

PPPoEのマルチセッション!! イイ(・∀・)!!

linuxのルータ構築で、PPPoEのマルチセッションについて調べたメモです。
最初は戸惑いましたが、分かってみたらとても簡単でした。

CentOS 5.3です。(・◇・)

linuxでPPPoEセッションを張るときは、adsl-setupかpppoe-setupのどちらかで
作っていくと思います。今回はとりあえず1回線分は張れている事を前提とします。

adsl-setupの場合(設定)

/etc/sysconfig/network-scripts/ifcfg-ppp0
/etc/ppp/chap-secrets
/etc/ppp/pap-secrets

上記ファイルがあるはずです。
ここからマルチに持っていくのはとても簡単です。

#cd /etc/sysconfig/network-scripts
#cp ifcfg-ppp0 ifcfg-ppp1

とりあえず、ifcfg-pppをコピーにより増やします。
そして中身をちょっと編集します。

USERCTL=yes
BOOTPROTO=dialup
NAME=DSLppp1  ←ppp1に変更!!
DEVICE=ppp1  ←ppp1に変更!!
TYPE=xDSL
ONBOOT=no
PIDFILE=/var/run/pppoe-adsl.pid2  ←被らない名前に変更!!
FIREWALL=NONE
PING=.
PPPOE_TIMEOUT=80
LCP_FAILURE=3
LCP_INTERVAL=20
CLAMPMSS=1412
CONNECT_POLL=6
CONNECT_TIMEOUT=60
DEFROUTE=yes    ←yesでもnoでも構わない(どういうマルチ接続にするか次第)
SYNCHRONOUS=no
ETH=eth0      ←ppp0と同じでも、違えても構わない。
PROVIDER=DSLppp1  ←ppp1に変更!!
USER=XXXXXXXXXXXX  ←もう1つの回線の契約者IDに変更!!
PEERDNS=no
DEMAND=no

次は、chap-secretsとpapsecretsの方も編集します。
ってゆーか、このファイルにはIDとパスワードのセットが入っているだけなので、
増やしたい回線のそれを1行追加すればOKです。

#cd /etc/ppp
#vi chap-secrets ←開いて1行追加するだけ。
#vi pap-secrets   ←開いて1行追加するだけ。

これでセットアップは完了です。

adsl-setupの場合(起動と終了とステータス)

ファイルを指定してコマンドを実行するだけです。

これで2回線分のセッションが腫れます。

adsl-start /etc/sysconfig/network-scripts/ifcfg-ppp0
adsl-start /etc/sysconfig/network-scripts/ifcfg-ppp1

終了もファイル指定です。

adsl-stop /etc/sysconfig/network-scripts/ifcfg-ppp0
adsl-stop /etc/sysconfig/network-scripts/ifcfg-ppp1

ステータス確認も同様

adsl-status /etc/sysconfig/network-scripts/ifcfg-ppp0
adsl-status /etc/sysconfig/network-scripts/ifcfg-ppp1

pppoe-setupの場合(設定)

/etc/ppp/pppoe.conf
/etc/ppp/chap-secrets
/etc/ppp/pap-secrets

上記ファイルがあるはずです。
因みにpppoe-setupで作ると、ifcfg-pppのファイルは無いです。(・◇・)

ここからマルチに持っていくのは簡単です。
お察しの通り、pppoe.confファイルをコピーで増やして中身をちょっと修正するだけです。
因みにコピー後のファイル名は何でも良いです。
但し、使う使わないはともかく「pppoe.conf」という名前のファイルが無いと、次回pppoe-setupを
実行しようとした時に怒られるので注意です。

#cd /etc/ppp
#cp pppoe.conf pppoe1
#cp pppoe.conf pppoe2

こんな感じで、pppoe1とpppoe2を作り、pppoe2の中身の方を修正しました。
※pppoe.confは以降触らないでそっとしておく。(・◇・)

修正の中身は・・・、ファイルを開けば判ると思います。

pppoe-setupの場合(起動と終了とステータス)

こっちも、ファイルを指定してコマンドを実行するだけです。

これで2回線分のセッションが腫れます。

pppoe-start /etc/ppp/pppoe1
pppoe-start /etc/ppp/pppoe2

終了もファイル指定です。

pppoe-stop /etc/ppp/pppoe1
pppoe-stop /etc/ppp/pppoe2

ステータス確認も同様

pppoe-status /etc/ppp/pppoe1
pppoe-status /etc/ppp/pppoe2

補足事項

  • 設定ファイルと「ppp0」「ppp1」の関連

 セッションを張った後にifconfigコマンドで確認が出来ますが、ここでの「ppp0」「ppp1」は、
 ifcfg-ppp0がppp0に(pppoe1がppp0に)対応しているのかと思いきやそうでは無いです。

 セッションを張った順番に「ppp0」「ppp1」って感じになるだけです。
 ちょっとややこしいので注意です。

  • デフォルトルートの指定

 設定ファイルifcfg-pppXやpppoeXの中に、「DEFROUTE=yes」の指定がありますが、
 これが「yes」だと、そのファイルで起動を掛けた時に、そのpppがデフォルトルートに為る
 というものです。
 なので全部の設定ファイルが「DEFROUTE=yes」だったとしたら、一番最後のやつがデフォルトルート
 になります。

 但し、/etc/sysconfig/networkファイル内の「GATEWAY」が指定してあると、常にそこが有効らしく、
 PPPoEでセッションを張っても、期待するゲートウェイになってくれなかったです。

 なので自分は、/etc/sysconfig/networkの方はコメントアウトにしました。

 常にどこか1箇所からしか出力しないのでは、マルチセッションの意味が半減です。
 出力先に合わせて動的にゲートウェイを変更するには、ipコマンドによるルーティングの設定が
 必要になります。

 これに関しては、次回に持ち越します。(・◇・)ノ
 取りあえず今回はPPPoEのマルチセッションの方法までとします。<(;_ _)>

XenServerの追加が出来ない!! (#`Д´)ゴ---!!

XenCenterをイロイロいじっている内に、以下のようなエラーが!!

今まで大丈夫だったのに、突然何???
暫く原因が全く判らず、困って居たのですが・・・、

単にXenCenterとXenServerとをつなぐ「管理用インタフェース」の設定を
変更してしまっただけという、間抜けな原因でした。_| ̄|●


XenServer本体マシンでのメニュー画面の上から2番目の「Network and Management Interface」
から入って設定するやつです。メニューやタイトルを良く読まずに、「Network」の部分だけを見て、
ここでeth0とeth1のIPの設定をいじれるのだとばかり思ってました。


同じのが、XenServerのインストール途中でも出てきますが、そこも同様で、
とにかく「管理用インタフェース」の設定だけです。


自分は、eth1を管理用に、eth0をストレージ用にそれぞれ別ネットワークのIPで設定したくて、
このあたりのメニューを使ってゴニョゴニョやっていたのですが、元々が管理用インタフェースを
設定する為のメニューなので・・・

1)eth1にIPを設定して保存
2)eth0にIPを設定して保存

という順序で設定したら、最後に設定した方が有効になってしまうので、
意図しないIP(ストレージ用のやつ)が管理用インタフェースになってしまいました。_| ̄|●
※自分はこれで、ethの設定をするものだとばかり思ってました。


そりゃつながらないです。


因みに、管理用インタフェース以外のIP設定は、xeコマンドでやるそうです。
直接/etc/sysconfig/network-scripts/ifcfg-XXXとかを編集してはNGです。(自分はCentOS

xe pif-reconfigure-ipコマンドだそうです。(・◇・)


CLI以外では、XenCenterで、該当サーバにフォーカスして右クリック!!
「管理インタフェース・・・」を選択


そこで、「新規インタフェース」ボタンを押して追加!!
XenCenterを使う場合は、こっちが王道のようです。(・◇・」)