cenos6.4(64bit)でのchef-solo環境構築 2013 年 4 月 20 日 No Comments

■ selinuxはオフに
# vim /etc/sysconfig/selinux
SELINUX=disabled

サーバ再起動
# shutdown -r now

■yumを最新に
# yum install yum-fastestmirror
# yum update

■ホスト名を統一
# vim /etc/sysconfig/network
HOSTNAME=example1

# vim /etc/hosts
127.0.0.1 example1 localhost localhost.localdomain

設定後にhostnameコマンドで確認
# hostname
example1

■chefsoloグループとユーザ作成
groupadd -g 1000 chefsolo
useradd -g chefsolo -u 1001 chefsolo
chmod 755 /home/chefsolo

■sudoユーザ
# visudo
%chefsolo ALL=(ALL) ALL

■SSH設定
# mkdir -p /home/***/.ssh/
scpなどで、id_rsa.pubを転送
authorized_keys作成
# touch authorized_keys
# cat id_rsa.pub >> authorized_keys

# chmod 700 /home/***/.ssh/
# chmod 600 /home/***/.ssh/*

# vim /etc/ssh/sshd_config
PubkeyAuthentication yes ←コメントアウト
AuthorizedKeysFile .ssh/authorized_keys ←コメントアウト
PasswordAuthentication no
UsePAM no

再起動
# /etc/init.d/sshd restart

※SSHの設定が反映されて、鍵認証+パスワードを入力しなくてもログインできるようになる。
接続元の.sshにconfigで定義しておくとホスト名でログインできる。
# vim /home/example1/.ssh/config
Host example1
HostName 192.168.58.***
port 22

# ssh example1
で、ログインできればOK。

■rubyインストール
# yum install http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

# yum install patch git gcc-c++ readline-devel zlib-devel libyaml-devel libffi-devel openssl-devel make autoconf automake libtool bison libxml2-devel libxslt-devel libyaml-devel

# curl -L https://get.rvm.io | sudo bash -s stable

# rvm install 1.9.3

# use 1.9.3 –default

# ruby -v

■chefインストール
※ruby1.9.3だとlibyamlが無いと警告が出るので
/usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/yaml.rb:56:in `‘:
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.

psychをインストールしてから
# gem install psych

chefのインストール
# gem install chef

バージョン確認
# chef-solo -v

knife-soloをインストール
# gem install knife-solo

knife-soloバージョン確認
# gem list | grep knife-solo
knife-solo (0.2.0)

—————————
ここから一般ユーザでの作業
■chef-soloでhello world
リポジトリの作成
# git clone git://github.com/opscode/chef-repo.git

■knife-soloインストール
# gem install knife-solo

knife-solo 0.3.0を使う
# git clone git://github.com/matschaffer/knife-solo.git
# cd knife-solo
# rake install

vim /home/***/.chef/knife.rb
knife[:solo_path] = ‘/tmp/chef-solo’ ←最下部に追加

■gitを最新に
http://d.hatena.ne.jp/torutk/20130128/p1

———————
クライアントへのSSHログイン設定
http://www-net.nifs.ac.jp/nifscc/manual/man-sshrsa.html
■ホストで鍵を作る
# ssh-keygen -t rsa
Enter file in which to save the key (/home/mukaeakihiro/.ssh/id_rsa): id_rsa

鍵指定でログイン
ssh -i id_rsa ホスト名

■knife-soloで環境構築(ホスト)
# knife solo init chef-repo
# cd chef-repo

■knife-soloでクライアントサーバの環境構築
# knife solo prepare

■作成したリポジトリをgitコミット
# git init
# git add .
# git commit -m ‘first commit’

■cookbook作成
# knife cookbook create hello -o site-cookbooks

td-agent,fluent 2013 年 2 月 12 日 No Comments

Webサーバの台数が多くなってくると、いつの間にかエラーを吐いていたりして状態を管理するのが難しくなってくる。(1台1台SSHでログインして、確認するにも限界がある。)

そこで複数のWebサーバ(apacheやnginx)のアクセスログやエラーログを一箇所に集めることで、効率的にプログラムがエラーをはいているのを管理することが可能になるfluentdを導入することに。

各Webサーバにfluentdをインストールして、ログ収集するサーバにはmongodbを用意。mongodbにデータが入るようにする。

複数のWEBサーバからのログが、収集するサーバ1台に集まってくるので、ハードディスクの容量とiowaitが発生しないよう書き込み速度・量に気をつける必要がある。
※mongodbのcapped設定が推奨されている。cappedとは?指定サイズに達したら、古いものから自動的に消されていく。

■インストール
http://help.treasure-data.com/kb/installing-td-agent-daemon/installing-td-agent-for-redhat-and-centos

vim /etc/yum.repos.d/td.repo
[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/redhat/$basearch
gpgcheck=0

$ yum update
$ yum install td-agent
$ /etc/init.d/td-agent start

mkdir /var/log/fluent
chown td-agent:td-agent /var/log/fluent
chmod +x /var/log/httpd


type tail
format apache
path /var/log/httpd/access_log tag apache.access
pos_file /var/log/fluent/access.log.pos


type tail
format apache
format /^\[(?


type file
path /var/log/fluent/error_log

Fluentd tail plugin のお話 (pos_file の指定はお忘れなく)
http://colopl.co.jp/tech/blog/2012/05/1808/

http://d.hatena.ne.jp/fat47/20120426/1335428063
http://blog.glidenote.com/blog/2012/05/21/fluentd-nginx-mongodb/
http://ameblo.jp/nidbooks/entry-11240865520.html
http://dev.classmethod.jp/server-side/node-fluentd-mongodb/

hadoop 2013 年 2 月 4 日 No Comments

■javaSDKインストール
http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-1902814.html
dk-6u39-linux-x64.binをダウンロード

実行権限
chmod +x jdk-6u39-linux-x64.bin

インストール
./jdk-6u39-linux-x64-rpm.bin

alternatives –install /usr/bin/java java /root/jdk1.6.0_39/bin/java 20000

環境変数の指定
vim /etc/profile
export JAVA_HOME=/root/jdk1.6.0_39
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile

CDH3インストール
wget http://archive.cloudera.com/redhat/6/x86_64/cdh/cdh3-repository-1.0-1.noarch.rpm

yum –nogpgcheck localinstall cdh3-repository-1.0-1.noarch.rpm

yum install yum-utils createrepo

reposync -r cloudera-cdh3

yum install -y httpd.x86_64 httpd-devel.x86_64

/etc/init.d/httpd start

chkconfig httpd on

chkconfig –list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

mkdir -p /var/www/html/cdh/3

cp -rf cloudera-cdh3/RPMS /var/www/html/cdh/3/.

cd /var/www/html/cdh

chmod a+w 3

cd 3

createrepo .

rpm –import http://archive.cloudera.com/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera

vim /etc/yum.repos.d/cloudera-cdh3.repo
#baseurl=http://archive.cloudera.com/redhat/6/x86_64/cdh/3/
baseurl=http://localhost/cdh/3/

yum clean

————————————————
■hadoop CDH3をインストール
yum install hadoop-0.20

ファイルを確認する
rpm -ql hadoop-0.20

設定ファイル
cp -fr /etc/hadoop/conf.empty /etc/hadoop/conf.mycluster

優先順位を最優先に
alternatives –install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.mycluster 60

install確認

nginx+php-fpm 2013 年 1 月 21 日 No Comments

php-fpmをyumではなく、ソースからインストールしてみるテスト。
とりあえずphpのHello Worldであるphpinfo();の出力までいければと思い、手を出してみたがはまった。

phpファイルを置く場所や実行権限など見なおしてみても
以下のエラーがでて、どうにも手詰まり。
FastCGI sent in stderr: “Primary script unknown” while reading response header from upstream

/etc/nginx/conf.d/default.conf
35行目の/scriptsを$document_rootに変えさえすればいいのだろうと思っていたが、ブラウザ
でphpファイルをリクエストしてもfile not foundを返すばかり。
35 #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
36 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

ぐぐって、以下にたどり着く
http://www.nullpop.net/?p=215

以下31行目のroot html;の記述が悪い。
よくよく同じファイル(/etc/nginx/conf.d/default.conf)の9行目を比較するとわかる。
root htmlなんてなってなくて、/usr/share/nginx/htmlに指定されている。
phpファイルもそこに置いて試そうとしていたので。。
8 location / {
9 root /usr/share/nginx/html;
10 index index.php index.html index.htm;
11 }

/etc/nginx/conf.d/default.conf
で、php-fpmを動作させるためにコメントアウトする箇所があるが、
30 location ~ \.php$ {
31 #root html;
32 root /usr/share/nginx/html;
33 fastcgi_pass 127.0.0.1:9000;
34 fastcgi_index index.php;
35 #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
36 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
37 include fastcgi_params;
38 }

結局、32行目のように指定すれば、
root /usr/share/nginx/html;

ブラウザからphpinfo();が実行できた。

これは、また環境作るときにハマリそうなのでメモ。

logroate 2012 年 12 月 29 日 No Comments

■/etc/logrotate.d/

各ログファイルの設定は、/etc/logrotate.d 以下に各サービスごとに別ファイルに記述される。

# ls /etc/logrotate.d/
acpid httpd munin-node psacct syslog yum
conman mgetty named rpm vsftpd.log
cups munin ppp snmpd wpa_supplicant

zendエクセプション系のログも肥大化するので、ローテーションさせる。
/etc/logrotate.d/zend
というファイルを作り(もしくはhttpdからコピー)して、設定する
# vim /etc/logrotate.d/zend
1 /var/log/httpd/*log {

1 /home/<プロジェクト名など>/log/*log {

■ログローテートの実行
# /usr/sbin/logrotate /etc/logrotate.conf
# cat /var/lib/logrotate.status
“/home/<プロジェクト名など>/log/tp.log” 2012-12-28
“/home/<プロジェクト名など>/log/tp_trace.log” 2012-12-28

■テスト
/var/lib/logrotate.status を編集して実行前の状態にしておきます。

# vim /var/lib/logrotate.status
“/home/<プロジェクト名など>/log/tp.log” 2012-12-27
“/home/<プロジェクト名など>/log/tp_trace.log” 2012-12-27

ログローテートの再実行
# /usr/sbin/logrotate /etc/logrotate.conf

■cron による定期実行
# cat /etc/cron.daily/logrotate
/usr/sbin/logrotate /etc/logrotate.conf

※参考 http://linux.kororo.jp/cont/server/logrotate.php

nfs No Comments

■クライアント側
portmapを起動する
# /etc/rc.d/init.d/portmap start

nfsを起動する
# /etc/rc.d/init.d/nfs start

mount -t nfs 172.16.2.***:/mnt/data/***/public/image /home/***/image/img1

■サーバー側
現在のエクスポートリストを表示
# exportfs -v

vim /etc/exports

# exportfs -ra

apache 2012 年 12 月 19 日 No Comments

psコマンでは、出力結果のVSZとRSS列の値に注目する。
VSZはプロセスの仮想メモリサイズ
RSSはプロセスが使用している物理メモリサイズ
※単位はKバイト
# ps aux | grep httpd
root 11579 0.0 0.4 473588 9824 ? Ss Dec16 0:10 /usr/sbin/httpd
root 11587 0.0 0.4 474236 10208 ? S Dec16 0:00 /usr/sbin/httpd

top
VIRTとRESの値に注目
VIRTはプロセスが使用している仮想メモリサイズ
RESはプロセスが使用している物理メモリサイズ

top - 01:01:22 up 128 days, 6:46, 1 user, load average: 0.02, 0.02, 0.00
Tasks: 120 total, 1 running, 119 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.1%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2054692k total, 1437012k used, 617680k free, 193928k buffers
Swap: 2097144k total, 0k used, 2097144k free, 950592k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1244 mongod 20 0 1966m 81m 51m S 0.7 4.0 1250:59 mongod
17 root 20 0 0 0 0 S 0.3 0.0 74:35.76 events/2
1 root 20 0 19224 1528 1240 S 0.0 0.1 0:55.75 init

ulimit -a
起動可能なプロセス数の上限を確認
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15900
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 15900
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

MUNINインストール(centos) 2012 年 12 月 13 日 No Comments

■環境の確認
# cat /etc/redhat-release
CentOS release 6.3 (Final)

# uname -a
Linux ****.jp 2.6.32-279.1.1.el6.x86_64 #1 SMP Tue Jul 10 13:47:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

CentOS6.3にMUNINを導入するにはEPELリポジトリを追加する必要があります。
以下のページにアクセスし、「Packages」の下にあるepel-release-6-7.noarchのリンクURLをコピーする。
http://ftp.riken.jp/Linux/fedora/epel/6/i386/repoview/epel-release.html

サーバに保存
wget http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-7.noarch.rpm

インストール
rpm -ivh epel-release-6-7.noarch.rpm

EPELを追加したら有効にしてmuninとmunin-nodeをインストールします。

yum –enablerepo=epel -y install munin munin-node

インストールしたら/etc/munin/munin.conf と/etc/munin/munin-node.conf
を設定します。

vim /etc/munin/munin.conf
99行目
[ホスト名]

vim /etc/munin/munin-node.conf

28行目
host_name ホスト名

次にディレクトリの設定を行います。今回はLAN内からのみアクセス可能にします。
vim /etc/httpd/conf.d/munin.conf

Order Deny,Allow
Deny from all
Allow from 127.0.0.1 192.168.1.0/24

ベーシック認証の設定
cd /etc/munin/
htpasswd -c munin-htpasswd 任意のユーザー名
New password: 任意のパスワード
Re-type new password: 任意のパスワード
Adding password for user 任意のユーザー名

/etc/init.d/httpd restart

/etc/init.d/munin-node start

chkconfig munin-node on

youtube API 2012 年 10 月 21 日 No Comments

youtube動画のIDがわかっていて、IDを元に動画が公開しているのか、非公開なのかを調べる。

■単独の動画情報の取得
https://developers.google.com/youtube/2.0/developers_guide_protocol_video_entries?hl=ja

■Data API プロトコル – アップロードされた動画のステータス確認
https://developers.google.com/youtube/2.0/developers_guide_protocol_checking_video_status?hl=ja#Check_Upload_Status

php5.4 centos5.8 configureオプション 2012 年 6 月 25 日 No Comments

./configure –prefix=/usr/local/php –with-apxs2=/usr/sbin/apxs –with-zlib –enable-mbstring –enable-mbregex -with-gettext –with-openssl –with-curl –with-iconv –enable-soap –with-config-file-path=/usr/local/php –with-pear=/usr/local/php/pear –with-mcrypt –with-gd –with-jpeg-dir=/usr/lib –with-libdir=lib64 –with-readline –enable-shared=yes