AB Lab

abgata20000 blog.

Unicornのインストール

Gedでユニコーンをインストールすろ

1
2
3
gem install unicorn-rails

gem install unicorn

ユニコーンの設定ファイルを作成

1
vim RAILS_ROOT/config/unicorn.rb
RAILS_ROOT/config/unicorn.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
APP_PATH = "/var/www/ruby/rss"

worker_processes 2

working_directory "/var/www/ruby/rss"

listen 3000

pid APP_PATH + "/tmp/pids/unicorn.pid"
stderr_path APP_PATH + "/log/unicorn.log"
stdout_path APP_PATH + "/log/unicorn.log"


preload_app true

ユニコーンでRailsを起動

1
bundle exec unicorn_rails -E development -c config/unicorn.rb

Nginxの設定ファイルを作成

1
vim /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
upstream abgata.org {
    #server 127.0.0.1:3000;
  server unix:/var/tmp/rss.sock;
}

server {
    listen 80;
    server_name abgata.org;

    root /var/www/ruby/rss/public;

    access_log /var/log/rss_access.log;
    error_log  /var/log/rss_error.log;

    location / {
      if (-f $request_filename) {
        break;
      }

      proxy_set_header X-Real-IP  $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_pass http://abgata.org;
    }

    location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
      # expires 1y;
    }
}

ヴァーチャルホストの設定

1
sudo vim /etc/nginx/sites-avalable/default
/etc/nginx/sites-avalable/default
1
2
3
4
5
server {
        listen 80 default_server;
        server_name _;
        deny all;
}

設定を反映させるファイルのシンボリックリンクを作成

1
sudo ln -s /etc/nginx/sites-avalable/default /etc/nginx/sites-enabled/

Nginxを再起動して設定を反映

1
2
3
4
5
chkconfig nginx on

service nginx start

service nginx reload

Select_for_updateについて(並列処理の運用)

参考サイト

サンプル

1
2
3
4
5
6
begin;

select * from t_sample where id > 1 AND flg = 0 order by id asc limit1 for update;

commit;
# コミットするまでは、同一のレコードへ処理(select文を含む)をロックする

注意点

  • トランザクションの効くストレージエンジン(innodb)でのみ有効
  • for update をつけていないクエリはロックされない
  • 同一のレコードへの処理をロックするため別条件で別レコードへの処理はロックされない
1
where id = 1

1
where id = 2

であればロックされない

1
where id > 1

1
where id = 2

であればロックされる

ActiveRecordでの利用方法

1
2
3
4
5
6
7
8
9
Sample.transaction do
  # select * from table where flg = 0 limit 1 for update
  @target = Sample.where("flg = 0 ").lock(true).first

  @target['flg'] = 1
  @target.save

end

Rubyでmongodbを使う

gemにてライブラリをインストール

1
2
3
gem install mongo
gem install mongoid
gem install bson_ext

そのまま使うとactiverecordとの併用の際に衝突するので、 activerecordのバージョンを3.2.14に落とす ※2013/9/17時点

1
2
3
gem uninstall activerecord activesupport activemodel

gem install activerecord -v 3.2.14

Rmagickのインストール

参考

Yumでインストール

1
sudo yum install ImageMagick ImageMagick-devel -y

gemでライブラリをインストール

1
gem install rmagick

※sudoじゃなきゃだめかも

ライブラリ名が異なる??らしくRubyやRailsから呼び出す際には、

1
require 'RMagick'

やら

1
gem 'rmagick', :require => 'RMagick'

のような書き方が必要

Nginxとapacheの共存

参考URL:

nginxでリバースプロキシした際にIP情報を正しく取れるようにモジュールを追加

1
2
3
4
5
6
7
sudo yum install httpd-devel

cd /root/tmp
wget http://www.openinfo.co.uk/apache/extract_forwarded-2.0.2.tar.gz
tar zxf extract_forwarded-2.0.2.tar.gz
cd extract_forwarded
apxs -i -c -a mod_extract_forwarded.c

apacheの実行ユーザーとポートを変更

1
vim /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Listen 8080

#####
User nginx
Group nginx
#####
ServerName sample.jp:8080

# 最終行に追加
MEForder refuse,accept
MEFrefuse all
# Nginx(リバースプロキシ)のIPアドレス
MEFaccept 127.0.0.1


# ヴァーチャルホスト使っている場合はヴァーチャルホストのポートも変更

apacheを再起動して設定を反映

1
service httpd restart

nginxでの転送設定

1
2
cd /etc/nginx/conf.d
vim default.conf
default.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#デフォルトサーバー
server {
    listen       80;
    server_name  backend;

    # このサーバへの全てのアクセスを転送
    location / {
            proxy_pass http://127.0.0.1:8080;
            proxy_redirect                         off;

            # この設定がなくても.htaccessでの制限は可能。
            # ただし、cgi等から参照した際にNginxのIPアドレスになる。
            proxy_set_header Host                   $host;

            proxy_set_header X-Real-IP              $remote_addr;

            # 以下は、cgi等で明示的に利用していなければ、有効にする必要なし。
            proxy_set_header X-Forwarded-Host      $host;
            proxy_set_header X-Forwarded-Server    $host;

            # この設定がなくてもcgi等から正しいIPを確認可能。
            # ただし、.htaccessでの制限は不可。
            proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
    }
}

最初に↓入れたほうがいいかも??

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# キャッシュ関連設定
proxy_cache_path  /var/cache/nginx levels=1:2 keys_zone=czone:4m max_size=50m inactive=120m;
proxy_temp_path   /var/tmp/nginx;
proxy_cache_key   "$scheme://$host$request_uri";
proxy_set_header  Host               $host;
proxy_set_header  X-Real-IP          $remote_addr;
proxy_set_header  X-Forwarded-Host   $host;
proxy_set_header  X-Forwarded-Server $host;
proxy_set_header  X-Forwarded-For    $proxy_add_x_forwarded_for;

# バックエンドサーバ−(Apache)設定
upstream backend {
    # ip_hash;
    server 127.0.0.1:8080;
}

nginxを再起動して設定を反映

1
service nginx restart

Nginxのインストール

1
vim /etc/yum.repos.d/nginx.repo
/etc/yum.repos.d/nginx.repo
1
2
3
4
5
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sudo yum install -y nginx

cd /etc/nginx
sudo mkdir sites-avalable
sudo mkdir sites-enabled
# sudo rm -f conf.d/*.conf

cd conf.d
cp default.conf default.conf.org
cp example_ssl.conf example_ssl.conf.org


cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.org

sudo vim /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
1
2
3
# 下から二行目に追加

include /etc/nginx/sites-enabled/*;

自動起動をON

1
2
3
service nginx start

chkconfig nginx on

MySQLのレプリケーション設定

マスター側設定

レプリケーション用のユーザーを作成

1
GRANT REPLICATION SLAVE ON *.* TO repl@% IDENTIFIED BY 'password';

my.cnf(winの場合はmy.ini)を修正(追加)

1
2
3
[mysqld]
log-bin = mysql-bin
server-id = 1001

mysqlを再起動

1
service mysqld restart

mysqlのスナップショットを作成

mysqlにて

1
2
3
4
5
6
7
# DBロック
FLUSH TABLES WITH READ LOCK;

# 現在のバイナリポジションを取得
SHOW MASTER STATUS;

# File、Positionはスレーブ側の設定に必要なので控えておく

別ターミナル等でDBのバックアップを取る(mysqldumpを利用)

1
mysqldump -u user -p --all-databases --lock-all-tables > snapshot.db

DBロックを解除

mysqlにて

1
UNLOCK TABLES;

スレーブ側設定

my.cnfを修正(追加)

1
2
3
4
[mysqld]
log-bin=mysql-bin
log_slave_updates #このスレーブを他のマスターとして使いたい場合追加
server-id=1002

マスタで作成したスナップショットを復元

1
mysql -u user -p  < snapshot.db

mysqlを再起動

1
service mysqld restart

マスタ情報を登録

1
2
3
4
5
6
CHANGE MASTER TO
MASTER_HOST='sample.com',
MASTER_USER='rep-user',
MASTER_PASSWORD='passwd',
MASTER_LOG_FILE='mysql-bin.000001', #マスターのFIle
MASTER_LOG_POS=98; #マスターのPosition

スレーブをスタート

1
2
START SLAVE;
# STOP SLAVE;RESTART SLAVE;RESET SLAVE;

起動確認

1
SHOW SLAVE STATUS\G

Mysqlサーバーの設定(mroonga)

参考URL:

1
2
3
4
5
6
7
8
9
rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
# --sorceで強制的に上書き
yum makecache
yum -y update

yum -y install mysql-server
# version5.1.67を指定しないとだめかも

yum install -y groonga groonga-devel groonga-tokenizer-mecab mecab-ipadic mecab-jumandic

MySQLの設定

1
2
cp /etc/my.cnf /etc/my.cnf.org
vim /etc/my.cnf

MySQLの初期設定

1
mysql_secure_installation

MySQLを起動

1
2
3
4
5
service mysqld start
yum -y install mysql-groonga
service mysqld restart
chkconfig mysqld on
mysql -u root -p

利用可能なストレージエンジンを確認

1
mysql> SHOW ENGINES \G

MySQLのバックアップを自動化

1
2
3
4
5
6
cd

mkdir backup
mkdir backup/mysql

vim mysql_backup.sh
mysql_backup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/sh

# バックアップファイルを何日分残しておくか
period=1
# バックアップファイルを保存するディレクトリ
dirpath='/root/backup/mysql'
cd $dirpath

#mysql_password
mysqlpassword="passwd"

# ファイル名を定義(※ファイル名で日付がわかるようにしておきます)
mydate=`date +%y%m%d%H%M%S`
filename="mysql_$mydate.sql"
zipfilename="mysql_$mydate.sql.tar.gz"
# スレーブ停止
mysql -uroot -p$mysqlpassword -e "flush tables;"
mysql -uroot -p$mysqlpassword -e "stop slave;"

# mysqldump実行
mysqldump -uroot -p$mysqlpassword -A -E > $filename

# スレーブ開始
mysql -uroot -p$mysqlpassword -e "start slave;"

#backup実行
tar -zcvf $zipfilename $filename

# 圧縮前のファイルを削除
rm -f $filename

# パーミッション変更
chmod 700 $zipfilename

# 古いバックアップファイルを削除
find $dirpath -type f -daystart -mtime +3 -exec rm {} \;

実行権限を付与

1
chmod 700 mysql_backup.sh

cronをインストール

1
2
3
4
5
6
7
yum install cronie-anacron
# cron.dailyをランダム実行したくない場合は yum -y install cronie-noanacron

chkconfig --level 2345 crond on
chkconfig --list crond  

crontab -e
1
0 3 * * * bash /path/to/mysql_backup.sh

設定済みのクーロンを確認

1
crontab -l

Mongodbの設定手順

参考URL

※2ヶ月ほど前と内容が少し変わっていたので、毎回確認したほうがいいかもしれないです。

yumでインストールできるようにリポジトリを追加

1
sudo vim /etc/yum.repos.d/mongodb.repo
/etc/yum.repos.d/mongodb.repo
1
2
3
4
5
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1

yumでmongodbをインストール

1
2
sudo yum update -y
sudo yum install mongodb-org -y

mongodbを起動

1
service mongod start

起動時に自動起動設定

1
chkconfig mongod on

バージョンを確認

1
mongo --version

シェルを起動

1
mongo

シェルを終了

1
exit

ユーザー認証をONにする

※mongod起動時にオプション指定でも可能ですが、毎回指定するの面倒なので設定ファイルを変更しています。

設定ファイルをバックアップ

1
cp /etc/mongod.conf /etc/mongod.conf.org

設定ファイルを変更

1
sudo vim /etc/mongod.conf
/etc/mongod.conf
1
auth = ture

mongodbを再起動

1
service mongod restart

管理者ユーザーの作成

1
2
use admin
db.addUser("admin","master_passpass")

ユーザー認証

1
db.auth("admin","master_passpass")

管理者ユーザーの確認

1
db.system.users.find()

DBの切り替え

1
use test

ユーザーの作成

1
db.addUser("test_user","test_passpass")

ユーザーの確認

1
db.system.users.find()

ユーザーの削除

1
db.system.users.remove({user:"test"})

ユーザー認証

1
db.auth("test_user","test_passpass")

テストデータの登録

1
db.test.save( { a: 1 } )

テストデータの閲覧

1
db.test.find()