« 2008年1月 | トップページ | 2008年3月 »

2008年2月

2008-02-29

やる夫がapacheのコネクション数を調べるようです。

apacheのコネクションについて

急にアクセス数が増えて、サービス中のサイトが重くなることがあると思います。単にアクティブユーザ数が増えた・・・または、スパムが襲撃してきた等原因は様々ですが、リアルタイムでのapacheの稼動状況を調べる方法があります。

         ____
       /::::::::::  u\  
      /:::::::::⌒ 三. ⌒\    あれ?
    /:::::::::: ( ○)三(○)\       サイトおもくね・・・?
    |::::::::::::::::⌒(__人__)⌒  | ________
     \::::::::::   ` ⌒´   ,/ .| |          |
    ノ::::::::::u         \ | |          |
  /:::::::::::::::::      u       | |          |
 |::::::::::::: l  u             | |          |
 ヽ:::::::::::: -一ー_~、⌒)^),-、   | |_________|
  ヽ::::::::___,ノγ⌒ヽ)ニニ- ̄   | |  |

       ____
     /      \
   /  _ノ  ヽ、_  \
  /  o゚⌒   ⌒゚o  \   こんなときに限って、やらない夫が出張だお!
  |     (__人__)    |  
  \     ` ⌒´     /

やる夫が運用しているサイトで、またトラブルが発生したようです・・・。

        ____
     /⌒三 ⌒\
   /( ○)三(○)\     DBにあたりをつけたけど、いたって健康・・・

  /::::::⌒(__人__)⌒::::: \      APLも挙動しているように見えるお・・・
  |     |r┬-|     |
  \      `ー'´     /

         ____
       /   u \
      /  \    /\    きっと自然復旧するはず・・・。
    /  し (>)  (<) \  
    | ∪    (__人__)  J |  ________
     \  u   `⌒´   / | |          |
    ノ           \ | |          | 
  /´                | |          |

         ____
       /   u \
      /  \    ─\    チラッ
    /  し (>)  (●) \
    | ∪    (__人__)  J |  ________
     \  u   `⌒´   / | |          |
    ノ           \ | |          | 
  /´                | |          | 

         ____
       /::::::::::  u\  
      /:::::::::⌒ 三. ⌒\    全く使えなくなってる・・・。
    /:::::::::: ( ○)三(○)\ 
    |::::::::::::::::⌒(__人__)⌒  | ________
     \::::::::::   ` ⌒´   ,/ .| |          |
    ノ::::::::::u         \ | |          |
  /:::::::::::::::::      u       | |          |

そうかんたんに自然復旧することは、あんまないです。やる夫が、ちょっと大変なことになっています。DBは正常でAPLリソースも問題ないようです。何が原因なんでしょうか?こういうときはアプリ側で、口を絞っていることが考えられます。apacehのMaxClientsが足りないと予想できます。

ココでapacheのMaxClients数を増やすと、アプリサーバとDBサーバの負荷が懸念されます。今回は、apacheのコネクション数を枯渇した原因を、スパム等のアタックとします。

すると対応としては、特定のIPアドレスを指定して、フィルタでIPを絞るか、apacheでACL設定を追加する必要があります。

      ____
      /_ノ ヽ、_ \
   o゚((●)) ((●))゚o   MaxClientsを70→100に変更してみたら
  /::::::⌒(__人__)⌒::::::\      なんとか復活したようだお!
  |       |r┬-|     |
  \     `ー'´     /

mod_status 設定方法

apaceh2.0から”mod_status”モジュールがインストール時の設定で利用できるようです。

# ./configure
# make
# make install
# vi /usr/local/apache2/conf/httpd.conf
-----
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 192.168.2.0/24
</Location>
-----

  • インターネットに晒すのもあれなので、ACL設定しちゃいましょう。

mod_status 確認方法

http://yaruo.neet.com/server-status へアクセスすればよいです。

対象ホストからの参照方法は・・・。

# wget http://yaruo.neet.com/server-status
# grep "requests currently being processed" server-status
<dt>82 requests currently being processed, 18 idle workers</dt>

この例だと、MaxClientsは100でコネクションが82消費していることになります。当初のMaxClientsは70だったので、口が間に合わなかったようですね。


       ____
     /      \
   /  _ノ  ヽ、_  \    なんとかたすかったお・・・
  /  o゚⌒   ⌒゚o  \     やっぱりやる夫はやればできるおだお
  |     (__人__)    |
  \     ` ⌒´     /

| | コメント (0) | トラックバック (0)

2008-02-28

Linuxでやる夫

Linuxでやる夫について

主にビギナー向けのサーバ構築関連の、解説をしていきます。やる夫を起用しているのは、単に僕がやる夫が好きなだけです。忘れないようにメモした感じの内容になっています。

  • この通りやったら変になったって言っても保証できないっす。自己責任で・・・。

登場人物紹介

やる夫

       ____
    /      \
   /  ─    ─\      
 /    (●) (●) \ 
 |       (__人__)    |    
 \     ` ⌒´   /      
,,.....イ.ヽヽ、___ ーーノ゙-、.
:   |  '; \_____ ノ.| ヽ i
    |  \/゙(__)\,|  i |
    >   ヽ. ハ  |   ||

最近ニートやめて、IT関連の会社に勤め始めました。自己解決能力が高く、応用力もあります。好きなコマンドは”vmstat”です。トラブル時に”vmstat”を使うと、今監視してるぜ雰囲気がでるようです。やる夫が、なぜこの会社に入社出来たのかは謎です。

やらない夫

            / ̄ ̄\
          /   _ノ  \
          |    ( ●)(●)
          |     (__人__)  
             |     ` ⌒´ノ 
              |         } 
              ヽ        }
            ヽ、.,__ __ノ
   _, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、
  /;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_
 丿;;;;;;;;;;;:::::i::::::::::::::/:::::::\゙'' ゙||i l\>::::゙'ー、
. i;;;;;;;;;;;;;;;;;;;;;;|::::::::::::::\::::::::::\ .||||i|::::ヽ::::::|:::!
/;;;;;;;;;;;;;;;;;;;;;;;;!:::::::::::::::::::\:::::::::ヽ|||||:::::/::::::::i:::|

やる夫の先輩(年齢はやる夫と同じ)。結構いい大学でて、なかなか良い会社に勤めています。やる夫が困ると時々アドバイスをくれたりします。主に仕様調整等の業務をしています。やる夫にかまってやる暇があまりないです。たまに眼鏡かけたりします。気合が入っている時です。

| | コメント (0) | トラックバック (0)

[mysql] やる夫がselect結果の量に困っているようです。

select結果の制限

データ数がすくなければ特に問題ないのですが、10万件とか膨大なデータをあつかっているDBで、安易に”select * from [table_name]”でも打とうものなら・・・。ぁああああってなりますね。そんなときに、”limit”が役立ちます。

         ____
       /::::::::::  u\  
      /:::::::::⌒ 三. ⌒\     ・・・っちょ・・・・おま・・・
    /:::::::::: ( ○)三(○)\          とまらないお・・・
    |::::::::::::::::⌒(__人__)⌒  | ________
     \::::::::::   ` ⌒´   ,/ .| |          |
    ノ::::::::::u         \ | |          |
  /:::::::::::::::::      u       | |          |
 |::::::::::::: l  u             | |          |
 ヽ:::::::::::: -一ー_~、⌒)^),-、   | |_________|
  ヽ::::::::___,ノγ⌒ヽ)ニニ- ̄   | |  |

やる夫が、”select * from yauro_table”を叩いたようです。

      / ̄ ̄\   
    /ノ( _ノ  \    DBあつかうときは慎重にやれっていってんべ!
    | ⌒(( ●)(●)
    .|     (__人__) /⌒l
     |     ` ⌒´ノ |`'''|
    / ⌒ヽ     }  |  |              
   /  へ  \   }__/ /             / ̄ ̄\   データが多・・・
 / / |      ノ   ノ           / ●)) ((●\’, ・ 
( _ ノ    |      \´       _    (   (_人_)’∴ ),  ’
       |       \_,, -‐ ''"   ̄ ゙̄''―---└'´ ̄`ヽ   て
       .|                  ______ ノ    (
       ヽ           _,, -‐ ''"  ノ       ヽ   r'" ̄
         \       , '´        し/..     | J
          \     (           /      |
            \    \         し-  '^`-J

            / ̄ ̄\
          /   _ノ  \
          |    ( ●)(●)
          |     (__人__)  
             |     ` ⌒´ノ   limit くらい使っとけよ・・・
              |         }       ほらサンプルSQLやるよ・・・
              ヽ        }
            ヽ、.,__ __ノ
   _, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、
  /;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_
 丿;;;;;;;;;;;:::::i::::::::::::::/:::::::\゙'' ゙||i l\>::::゙'ー、
. i;;;;;;;;;;;;;;;;;;;;;;|::::::::::::::\::::::::::\ .||||i|::::ヽ::::::|:::!
/;;;;;;;;;;;;;;;;;;;;;;;;!:::::::::::::::::::\:::::::::ヽ|||||:::::/::::::::i:::|

# myql
mysql> select [column_name] from [table_name] limit 10;

  • limit [n] でデータ出力数を指定できます。上記例だと上から10行まで出力されます。

         ____
       /      \  
     /  _ノ  ヽ、_  \   テキストにSQLをメモッてコピペするお・・・。
    / o゚((●)) ((●))゚o \  
    |     (__人__)    |  
    \     ` ⌒´     /
   /´           `\
  /  /          l  l   .___
__l  l_¶______/_/__/     ヽ
  \, ´-'ヽ  ̄| ̄ ̄ ̄ ̄|   l二二二二l
    ヾ_ノ   | '''' '   |   l二二二二l
   | 9=ε-8. | '''..--  |   l二二二二l:::..
   |   ..''  |  ''-.  ,|

ちょっと応用

下記例では、”neet_id”と”neet_name”を出力するようにして、先頭に”y”が付くものを、ソートしかつ10件まで表示するというSQLサンプルです。

  • 同でも良いが、会員数200万以上って、すごいシステムだな・・・。

# mysql
mysql> select neet_id, neet_name from yaruo_tb where neet_name like 'y%' order by neet_name limit 10;
+----------+------------------+
| neet_id  | neet_name        |
+----------+------------------+
|  2410554 | yaranaio         |
|   208231 | yarumi           |
|  3216603 | yaruo            |
|   121868 | yaruo_test       |
|   822554 | yaruo_test01     |
|  2158770 | yen              |
|     2382 | yneet            |
|   896892 | yne              |
|    71881 | yyy              |
|    54640 | yz_neet          |
+----------+------------------+
10 rows in set (0.04 sec)

  • like ワイルドカード(っと思っている)
  • order by ソート
  • limit 出力制限

正直抑えておいた方がよいです。延々とSQLの出力結果がトレースされてるとちょっとだけかっこ悪いです。

----------------------------------------
現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (0)

やる夫がサーバのアドレスを変更するようです。

アドレス変更について

そんなに発生しない作業だと思うのですが・・・。スイッチの変更や、古いアドレス帯のリプレイス時にするかと思います。ではそのネットワークを管理している、箇所で対処してよって思うけど、簡単なのでやっとけってくることもあります。

            / ̄ ̄\
          /   _ノ  \
          |     -□-□)
          |     (__人__) 
             |     ` ⌒´ノ   ネットワークの阿部さんから
              |         }    192.168.1.0/24アドレスリプレイスするから
              ヽ        }    結線変更と該当サーバのIPアドレス変更しといて
            ヽ、.,__ __ノ
   _, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、    (サーバ室寒いからやる夫でいいだろ・・・
  /;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_                 常識的に考えて・・・。)
 丿;;;;;;;;;;;:::::i::::::::::::::/:::::::\゙'' ゙||i l\>::::゙'ー、
. i;;;;;;;;;;;;;;;;;;;;;;|::::::::::::::\::::::::::\ .||||i|::::ヽ::::::|:::!
/;;;;;;;;;;;;;;;;;;;;;;;;!:::::::::::::::::::\:::::::::ヽ|||||:::::/::::::::i:::|
;;;;;;;;;;;;;;;;;;;;;;;;;;|;;;;:::::::::::::::::::::::\:::::゙、|||:::/::::::::::|:::

        ノ L____
       ⌒ \ / \
      / (○) (○)\
     /    (__人__)   \   リプレイスするなら
     |       |::::::|     |       サーバの面倒もその部署でやるお!
     \       l;;;;;;l    /l!| !
     /     `ー'    \ |i
   /          ヽ !l ヽi
   (   丶- 、       しE |そ  ドンッ!!
    `ー、_ノ       ∑ l、E ノ <
               レY^V^ヽl  

            / ̄ ̄\
          /   _ノ  \
          |     -□-□)
          |     (__人__) 
             |     ` ⌒´ノ   まぁ該当サーバ2台だし
              |         }       自分たちでやった方が連絡とか楽だろ・・・
              ヽ        }  
            ヽ、.,__ __ノ
   _, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、   
  /;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_    
 丿;;;;;;;;;;;:::::i::::::::::::::/:::::::\゙'' ゙||i l\>::::゙'ー、
. i;;;;;;;;;;;;;;;;;;;;;;|::::::::::::::\::::::::::\ .||||i|::::ヽ::::::|:::!
/;;;;;;;;;;;;;;;;;;;;;;;;!:::::::::::::::::::\:::::::::ヽ|||||:::::/::::::::i:::|
;;;;;;;;;;;;;;;;;;;;;;;;;;|;;;;:::::::::::::::::::::::\:::::゙、|||:::/::::::::::|:::

       ____
     /      \
   /  _ノ  ヽ、_  \ 
  / o゚((●)) ((●))゚o \   サーバ室は寒いお・・・
  |     (__人__)    |   結線変更も埃まみれになるお・・・
  \     ` ⌒´     /   

結線変更は結構メンドクサイ、床はがしたりしなきゃならないし、何より埃まみれになる。1年に一回はやっている気がする・・・。

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
-----
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.2.255
IPADDR=192.168.2.20
NETMASK=255.255.252.0
ONBOOT=yes
-----
/etc/init.d/network restart

  • アドレスが変更されたかは”/sbin/ifconfig”を参照して下さい。

オプション

DEVICE デバイス名
BOOTPROTO ブート時などに使用するプロトコル
BROADCAST ブロードキャストアドレス
HWADDR MAC アドレス
IPADDR IP アドレス
NETMASK ネットマスク
NETWORK ネットワークアドレス
ONBOOT ブート時に有効にするか否か
TYPE インターフェイスの種類

| | コメント (0) | トラックバック (0)

2008-02-21

[shell] やる夫がshell実行中に対話させたいようです。

shell実行中に値をプロンプト入力するには

単純なサンプルshellです。shell実行中に、プロンプト表示してキーボードから値を入力するには、”read -p”を利用すればよいようです。

スクリプト

# vi yaruo.sh
-----
#! /bin/sh

yaruo="y"

while [ $yaruo = "y" ];
do

    read -p "input:" yaranaio

    if [ $yaranaio = "quit" ]; then

        yaruo="$yaranaio"

    fi

        #プログラム処理
        echo "$yaranaioと入力しました。"
        echo "quit でプログラム終了。"

done
-----

実行結果

shellの実行結果は下記になります。”quit”を入力するまで、shellが起動し続けます。”Ctrl+C”でも終了できますが・・・。

# ./yaruo.sh
input:vipper <--"vipperと入力してみます。"
vipperと入力しました。
quit でプログラム終了。
input:quit
#

----------------------------------------

UNIX C SHELLフィールドガイド
G アンダーソン P. アンダーソン 落水 浩一郎 大木 敦雄
パーソナルメディアパーソナルメディアパーソナルメディア
定価 : ¥ 3,675
1987-10
amazonで詳しく見る

| | コメント (0) | トラックバック (0)

2008-02-14

やる夫がアカウント管理をするようです。

アカウント管理について

プロジェクトリソースの入れ替え時期になると、アカウント管理をよくやると思います。基本的なことなので、先輩方は”ちょっとやっといて”って感じでお願いしてきます。

            / ̄ ̄\
          /   _ノ  \
          |     -□-□)
          |     (__人__)   新メンバーが加わったので
             |     ` ⌒´ノ       アカウント作成しておいてくれない?
              |         }
              ヽ        }    (アカウント作成くらいできるだろ・・・
            ヽ、.,__ __ノ                  常識的に考えて・・・)
   _, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、
  /;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_
 丿;;;;;;;;;;;:::::i::::::::::::::/:::::::\゙'' ゙||i l\>::::゙'ー、
. i;;;;;;;;;;;;;;;;;;;;;;|::::::::::::::\::::::::::\ .||||i|::::ヽ::::::|:::!
/;;;;;;;;;;;;;;;;;;;;;;;;!:::::::::::::::::::\:::::::::ヽ|||||:::::/::::::::i:::|
;;;;;;;;;;;;;;;;;;;;;;;;;;|;;;;:::::::::::::::::::::::\:::::゙、|||:::/::::::::::|:::

         ___
       /::::::::::  u\
      /:::::::::⌒ 三. ⌒\   
    /:::::::::: ( ○)三(○)\ 
    |::::::::::::::::⌒(__人__)⌒  |   了解したお・・・。
     \::::::::::   ` ⌒´   ,/ 
    ノ::::::::::u         \ 
    /:::::::::::::::::      u      

っと言っては見たものの、頻繁に入れ替えのあるプロジェクトだと、まぁ覚えているのですが、たまにやる作業だと、うっかり忘れてしまうことが良くあると思います。また、ユーザ作成コマンド”useradd”のオプションは数多くあるので、結局どうすればよいか・・・(この作り方は正しいのか?)等色々あると思います。下記に必要最小限にまとめて見ました。

useradd コマンド

ユーザを新規に作成するコマンドです。コマンド実行時に、新規ユーザーのホームディレクトリや、グループなどを指定する事もできます。

下記例では、”yaruo”というグループを作成して、新規に”yaruo”というユーザを”yaruo”というユーザグループで、作成しています。また”yaruo”ユーザ作成時にホームディレクトリやログインシェルの指定をしています。セキュリティ上、”yaruo”ユーザにパスワード設定もしてしまいましょう。

グループ作成

# /usr/sbin/groupadd -g 502 yauro

  • -g オプションは、新規グループIDを指定します。

アカウント作成

# /usr/sbin/useradd -u 502 -g 502 -d /home/yaruo -s /bin/bash -m yaruo
# passwd yaruo
Changing password for user yaruo.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

  • -u オプションは、ユーザIDを指定します。
  • -g オプションは、グループを指定します。先に”502”でグループ作成してますね。
  • -d オプションは、ホームディレクトリを指定します(勝手に作ってくれます)。
  • -s オプションは、ログイン時のシェルを指定します。
  • -m オプションで、作成するユーザ名を指定(”-m”を付けなくても良い)。

既存ユーザIDの確認

ユーザIDは同じものを利用してしまうと”useradd”コマンド実行時に起こられてしまいます。デフォルトで0~99までは、ほぼ予約されているようです。重複さえしなければよいので、管理しやすいID番号を付与すればよいかと思います。既存ユーザIDの確認は、下記で確認できます。

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
yaranaio:x:501:501::/home/yaruo:/bin/bash   
yaruo:x:502:502::/home/yaruo:/bin/bash

”yaruo”が追加されていますね。

userdel コマンド

アカウントを一旦作っては見たものの、失敗した・・・とかあったら、削除してしまえばよいです。”yaruo”アカウントを削除してみます。使わないアカウントは削除してしまった方が良いかもしれません。

# /usr/sbin/userdel -r yauro

  • -r オプションは、削除するユーザのホームディレクトリも削除します。

sudo 権限付与

ついでなのでユーザに対してsudo権限を付与する方法も記載致します。下記では”yaruo”ユーザにsudo権限を追加しています。”/usr/sbin/visudo”を実行すると”vi”操作で編集できます。

# /usr/sbin/visudo
-----
  # User privilege specification   
  root    ALL=(ALL) ALL
+ yaruo   ALL=(ALL) ALL
-----

  • ”+” は追加を意味しています。実際に記述はしません。

”visudo”コマンドは、”/etc/sudoers”を編集するツールで、構文チェックを編集時に実行します。大抵デフォルトでインストールされている筈ですが、ないときもあるようです。その場合は下記で対応できます。

# vi /etc/sudoers
-----
  # User privilege specification   
  root    ALL=(ALL) ALL
+ yaruo   ALL=(ALL) ALL
-----

----------------------------------------

Red Hat Enterprise Linux Standard Plus (ES v.4 for Intel x86、AMD64、and Intel EM64T)
レッドハットレッドハットレッドハット
定価 : ¥ 104,790
2005-07-01
amazonで詳しく見る

| | コメント (1) | トラックバック (0)

« 2008年1月 | トップページ | 2008年3月 »