2008年3月28日
KLab 株式会社
Kラボラトリー
ひろせ まさあき
DSASのやりくり
MATRIXの秘密と
効率的なシステム管理の関係
第
4回 KLab 勉強会
http://dsas.blog.klab.org
自己紹介
z
ひろせ まさあき (
id:hirose31)
z
KLab株式会社 (くらぶ かぶしきがいしゃ)
z
Kラボラトリー所属 (研究開発部門)
z
DSAS – ネットワーク・サーバインフラ
z
スケーラブル
Webシステム工房
z
『
WEB+DB PRESS』 Vol.38∼43で連載
z
書籍執筆中 『サーバ
24時』(仮)
z
KLab+はてな
サーバ管理者の悩み
サーバ管理者の悩み (のひとつ)
z
サーバが増えると
...
z
運用管理がめんどうくさくなる
z
なにするにしても手間がかかる
z
オペレーションミスが起こりやすくなる
具体なお悩み例とその解決法
DSASでの実例を3つ+おまけ2
今日は
今日のアジェンダ
アジェンダ
z
運用管理のお悩み
z
【お悩み1】
z
【お悩み2】
z
【お悩み3】
z
解決法
- DSASでの事例
z
MATRIXについて
z
【1の解決】
z
【2の解決】
z
【3の解決】
z
【おまけ1】
z
【おまけ2】
【お悩み1】
XXXサーバってどれだっけ?
z
サーバの役割
z
Web、DB、Storage、Log、lvs、
lls...
z
サーバの状態
z
WARN、STOP...
core
sw1
core
sw2
lvs
lvs
Master
sw3
Web
sw4
DB
DB
Web
sw5
lls
sw6
Storage
Log
lls
上位ルータ
サーバ台数×役割×状態
=多過ぎて覚えられません><
お悩み
【お悩み2】
XXXに対してXXXしたい!
z
XXXに対して
z
すべてのサーバに対して
z
Webサーバに対して
z
DBサーバに対して
z
XXXしたい!
z
コマンドを実行したい!
z
ファイルをコピーしたい!
z
ファイルの同一性を確認したい!
for i in web1 web2 web3 we (ry...web99;do
echo $i; ssh $i ‘/usr/bin/ふがふが’; done
=コマンド打つのがめんどうです><
【お悩み3】設定ファイルが長すぎる ><
z
あいのりサイトが増えると
z
Apache – httpd.conf
z
VirtualHostがたくさん
z
サーバが増えると
z
keepalived – keepalived.conf (ロードバランサ)
z
リアルサーバの定義がたくさん
設定ファイルの肥大化
=ちょっと手では編集できません><
お悩み
今日のアジェンダ
z
運用管理のお悩み
z
【お悩み1】
XXXサーバってどれだっけ?
z
【お悩み2】
XXXに対してXXXしたい!
z
【お悩み3】設定ファイルが長すぎる ><
z
解決法
- DSASでの事例
z
MATRIXについて
z
【1の解決】
z
【2の解決】
z
【3の解決】
z
【おまけ1】
z
【おまけ2】
アジェンダ
やるおー
解決法
解決法
– DSASでの事例
z
一元管理
z
サーバの役割情報など
z
それを元に、
z
情報の取得
z
生成
MATRIXについて
z
MATRIXとは:
z
サーバの一覧表
z
サーバの役割定義
z
サーバの状態管理 (故障中、調子悪い)
z
形式:
z
テキスト
MATRIXについて
z
MATRIXとは:
z
サーバの一覧表
z
サーバの役割定義
z
サーバの状態管理 (故障中、調子悪い)
z
形式:
z
テキスト
w101: usagi
w102: usagi kame saru
w103: [NANDEMOYA]
w104: kame
w105: kame
w106: (lv1)
w107: (lv2)
w108: (ll1)
w109: (ll2)
w110: (db101) (db100)
w111: (db102)
w112: [FREE] usagi kame saru
w113: usagi saru [WARN]
w101: usagi
w102: usagi kame saru
w103: [NANDEMOYA]
w104: kame
w105: kame
w106: (lv1)
w107: (lv2)
w108: (ll1)
w109: (ll2)
w110: (db101) (db100)
w111: (db102)
w112: [FREE] usagi kame saru
w113: usagi saru [WARN]
MATRIXについて
z
MATRIXとは:
z
サーバの一覧表
z
サーバの役割定義
z
サーバの状態管理 (故障中、調子悪い)
z
形式:
z
テキスト
w101: usagi
w102: usagi kame saru
w103: [NANDEMOYA]
w104: kame
w105: kame
w106: (lv1)
w107: (lv2)
w108: (ll1)
w109: (ll2)
w110: (db101) (db100)
w111: (db102)
w112: [FREE] usagi kame saru
w113: usagi saru [WARN]
w101: usagi
w102: usagi kame saru
w103: [NANDEMOYA]
w104: kame
w105: kame
w106: (lv1)
w107: (lv2)
w108: (ll1)
w109: (ll2)
w110: (db101) (db100)
w111: (db102)
w112: [FREE] usagi kame saru
w113: usagi saru [WARN]
MATRIXについて
z
MATRIXとは:
z
サーバの一覧表
z
サーバの役割定義
z
サーバの状態管理 (故障中、調子悪い)
z
形式:
z
テキスト
w101: usagi
w102: usagi kame saru
w103: [NANDEMOYA]
w104: kame
w105: kame
w106: (lv1)
w107: (lv2)
w108: (ll1)
w109: (ll2)
w110: (db101) (db100)
w111: (db102)
w112: [FREE] usagi kame saru
w113: usagi saru [WARN]
w101: usagi
w102: usagi kame saru
w103: [NANDEMOYA]
w104: kame
w105: kame
w106: (lv1)
w107: (lv2)
w108: (ll1)
w109: (ll2)
w110: (db101) (db100)
w111: (db102)
w112: [FREE] usagi kame saru
w113: usagi saru [WARN]
サーバ名
MATRIXについて
z
MATRIXとは:
z
サーバの一覧表
z
サーバの役割定義
z
サーバの状態管理 (故障中、調子悪い)
z
形式:
z
テキスト
w101: usagi
w102: usagi kame saru
w103: [NANDEMOYA]
w104: kame
w105: kame
w106: (lv1)
w107: (lv2)
w108: (ll1)
w109: (ll2)
w110: (db101) (db100)
w111: (db102)
w112: [FREE] usagi kame saru
w113: usagi saru [WARN]
w101: usagi
w102: usagi kame saru
w103: [NANDEMOYA]
w104: kame
w105: kame
w106: (lv1)
w107: (lv2)
w108: (ll1)
w109: (ll2)
w110: (db101) (db100)
w111: (db102)
w112: [FREE] usagi kame saru
w113: usagi saru [WARN]
サーバ名
サイト名
[XXX]
役割定義
MATRIXについて
z
MATRIXとは:
z
サーバの一覧表
z
サーバの役割定義
z
サーバの状態管理 (故障中、調子悪い)
z
形式:
z
テキスト
w101: usagi
w102: usagi kame saru
w103: [NANDEMOYA]
w104: kame
w105: kame
w106: (lv1)
w107: (lv2)
w108: (ll1)
w109: (ll2)
w110: (db101) (db100)
w111: (db102)
w112: [FREE] usagi kame saru
w113: usagi saru [WARN]
w101: usagi
w102: usagi kame saru
w103: [NANDEMOYA]
w104: kame
w105: kame
w106: (lv1)
w107: (lv2)
w108: (ll1)
w109: (ll2)
w110: (db101) (db100)
w111: (db102)
w112: [FREE] usagi kame saru
w113: usagi saru [WARN]
サーバ名
サイト名
[XXX]
役割定義
(XXX)
特殊サーバ
今日のアジェンダ
アジェンダ
z
運用管理のお悩み
z
【お悩み1】
XXXサーバってどれだっけ?
z
【お悩み2】
XXXに対してXXXしたい!
z
【お悩み3】設定ファイルが長すぎる ><
z
解決法
- DSASでの事例
z
MATRIXについて
z
【1の解決】
z
【2の解決】
z
【3の解決】
z
【おまけ1】
z
【おまけ2】
【1の解決】
XXXサーバってどれだっけ?
z
source /etc/dsas.conf
z
MATRIXのshバインディング
z
シェル変数
XXX_SERVERS を定義
DB_SERVERS=(db100 db101 db102)
LL_SERVERS=(ll1 ll2)
LV_SERVERS=(lv1 lv2)
LB_SERVERS=(w101 w102 w104 w105 w112)
NR_SERVERS=(w103)
STOP_SERVERS=(w114)
WARN_SERVERS=(w113)
SYNC_SERVERS=(${NR_SERVERS[@]} ${LB_SERVERS[@]})
【2の解決】
XXXに対してXXXしたい!
z
XXXに対して
z
dsas.confのXXX_SERVERSを利用
z
XXXしたい!
z
sh関数
z
alias
z
スクリプト
【2の解決】
XXXに対してXXXしたい!
z
FORALL –
全サーバに対して
XXX
したい!
z
alias
z
汎用的な用途
z
すべてのサーバでコマンドを実行する
z
すべてのサーバにファイルをコピーする
alias FORALL=’
for i in ${ALL_SERVERS[@]};do
’
FORALL
echo $i; ssh $i /usr/bin/date; done
【2の解決】
XXXに対してXXXしたい!
z
SYNCALL –
全サーバに対してコピーしたい!
z
rsyncでファイルをコピー
z
もっとも頻度が高いオペレーション
z
ミスをなくすために
FORALL rsync –avR /foo/bar /baz/qux $i:/; done
【2の解決】
XXXに対してXXXしたい!
z
DIFFALL –
全サーバ
に対して
同一性を確認
したい!
z
サーバ間のファイルの同一性の確認
$
DIFFALL
/usr/klab/MATRIX
/usr/klab/MATRIX
LOCAL 2d4c0225065831595e433f692466a427
w101 2d4c0225065831595e433f692466a427
w102 5ba0e2e4bc0f305e2ff85d0fd8654b12
diff -u /usr/klab/MATRIX <(ssh w102 cat /usr/klab/MATRIX)
w103 2d4c0225065831595e433f692466a427
w103 2d4c0225065831595e433f692466a427
: : : : :
【3の解決】設定ファイルが長すぎる ><
z
matrix-reflection
z
MATRIXを変更したら実行するスクリプト
z
その中で、
httpd.confの生成もしている
z
lvs-config
z
lvs (keepalived)の設定ファイルを生成している
ServerRoot ... User ...
Group ...cat <<MSGEND # kame <VirtualHost *:80> ServerAdmin webmaster ServerName usagi.example.jp DocumentRoot $DSAS_HOME/contents/usagi/htdocs ErrorLog ... CustomLog ... JkMount /s/* local <LocationMatch "^/"> Order Deny,Allow Deny from all
Include conf/allow/dsas Include conf/allow/docomo Include conf/allow/au_ez Include conf/allow/vodafone </LocationMatch> </VirtualHost> MSGEND
matrix-reflection
matrix-reflection
w101: usagi w102: usagi kame w103: [NANDEMOYA] w104: kame w105: kame w106: (lv1) w107: (lv2) w108: (ll1) w109: (ll2) w110: (db101) (db100) w111: (db102)w112: [FREE] usagi kame w101: usagi w102: usagi kame w103: [NANDEMOYA] w104: kame w105: kame w106: (lv1) w107: (lv2) w108: (ll1) w109: (ll2) w110: (db101) (db100) w111: (db102)
w112: [FREE] usagi kame
MATRIX
MATRIX
cat <<MSGEND # usagi <VirtualHost *:80> ServerAdmin webmaster ServerName usagi.example.jp DocumentRoot $DSAS_HOME/contents/usagi/htdocs ErrorLog ... CustomLog ... JkMount /s/* local <LocationMatch "^/"> Order Deny,Allow Deny from allInclude conf/allow/dsas Include conf/allow/docomo Include conf/allow/au_ez Include conf/allow/vodafone </LocationMatch> </VirtualHost> MSGEND
ファイル片
ファイル片
ServerRoot ... User ... Group ... MaxClient ... LoadModule ... # usagi <VirtualHost *:80> ServerAdmin webmaster ServerName usagi. DocumentRoot $DSAS_ ErrorLog ... CustomLog ... JkMount /s/* local <LocationMatch "^/"> Order Deny,Allow Deny from all Include conf/allow/ Include conf/allow/ Include conf/allow/ Include conf/allow/ </LocationMatch> </VirtualHost>httpd.conf
httpd.conf
lvs-config
lvs-config
w101: usagi w102: usagi kame w103: [NANDEMOYA] w104: kame w105: kame w106: (lv1) w107: (lv2) w108: (ll1) w109: (ll2) w110: (db101) (db100) w111: (db102)w112: [FREE] usagi kame w101: usagi w102: usagi kame w103: [NANDEMOYA] w104: kame w105: kame w106: (lv1) w107: (lv2) w108: (ll1) w109: (ll2) w110: (db101) (db100) w111: (db102)
w112: [FREE] usagi kame