【退職ブログ】新聞社を退職しました

3月末日をもって、退職&転職をしました。
4月1日から、クラウドサービスのサポートを行う仕事に就いています。

こんな場末のブログなんて誰も見ていないと思いますが、
新聞社のエンジニアが転職する、なんてことは非常に稀だと思うので、今の状況とか書き起こしてみたいと思います。
社名を出さずとも身内には即バレすると思いますが。。

経緯

AWSを使うプロジェクトに実務者としてアサインされたのが1年前。
データセンタの仕事やサーバ構築の仕事の延長だと思っていたのだけれど、実はそうでなく、クラウドというのをこのとき思い知りました。
そこからAWSのセールスの方とも仲良くなったり、JAWS-UGというコミュニティの影響で、AWS関係なく様々な勉強会に顔を出すようになりました。
一番大きな違いは、スピード感と会社の質ですね。
色々な人や会社に少しずつコネクションができると、やっぱり成長したくなるし、日本って狭いと感じますよね。
家族がいるから・・・とか、持家のローンが・・・とか、そんなのは甘えです。と自分を奮い立たせて転職しました。

会社の違い

新聞社について

当たり前ですがユーザ企業なので、SIに頼む案件がほとんどです。
私のような社内エンジニアの役割は、社内の企画者の意向を受けてSIと打ち合わせすることなどなど。
プロジェクトは要件定義〜運用までを数人で見ることが多いのではないかと。
記者が一番ヒエラルキー的に上なので、色々な要望を受けて、SIの人間に恨みを買うポジションですね。
最後の方は社内開発にアサインしてもらったりとかありましたけど、スピード感が足りないですよね。
エンジニアが頑張っても認められず・・・ってパターンもあるし、そもそも責任論になって、妥協点に落ちることが多いと感じました。

外資企業の文化

外資企業って、オーナシップを持つことに対する意識が強いと感じますね。
自分みたいな人間が入ってしまっていいのかなという感じ。
責任を取れる人間が集まっている感じ。

待遇とか

家族がいたり子供がいたり持家だったりすると、非常に非常に大事なことなので、少しだけ書きます。
あまり細かく言えませんが、新聞社の給与って、とっても優遇されてます。
外資系では転職者それぞれで違う額だったりするし、まぁざっくり言うと私の場合は、待遇は転職前後で大きくは変わりませんでした。

#抗議が来たら消すかもー。

【続】wordpressのupdateが失敗したお話

前回の続きです。
wordpressで使うphpのupdateを(別マシンで)実施していて、違う壁にぶつかったお話。

ちなみに、CentOS6.4とかで普通にyum install phpでインストールすると、php5.3.3が入ると思います。

今回はphp 5.5.9が最新stableということで、これにアップデートしようとしたお話。

インストール時は、1.repositoryの追加、2.yum updateの手順に従ったのですが。。。

こんなエラーが出た


...
Total size: 8.7 M
Total download size: 452 k
Is this ok [y/N]: y
Downloading Packages:
Setting up and reading Presto delta metadata
Processing delta metadata
Package(s) data still to download: 452 k
libxslt-1.1.26-2.el6_3.1.x86_64.rpm | 452 kB 00:01
warning: rpmts_HdrFromFdno: Header V3 DSA/SHA1 Signature, key ID 00f97f56: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi


GPG key retrieval failed: [Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
[root@hostname ~/]#

wordpress+staticpressでbugに当たったお話

業務上でwordpress+staticpressの環境が必要になったのだが、
バグに当たったりして大変だったので覚え書き。

まずは

CentOS6のEC2をAWSで立てます。
試験環境なので、これでよし。

ハマり始める。

・何度かテストしていると、コンテンツがS3に反映されない
  → どうやら、サーバローカルのstatic指定フォルダを見ているようなので、S3に同期する前にstaticフォルダを綺麗に削除すると同期できた
・サイトレイアウトが全然違う
  → phpが組み込まれているようなテーマを回避した
CSSが機能せず、画面が崩れる
  → 結論:PHPのバグでした。以下に備忘録として対応を記す。

環境

CentOS6.3
PHP5.3.3

バグについて

CSSファイルのmime-typeをphpで出力すると、こうなっている。
なので、S3へ転送したときに「text/x-c」で出力してMeta-Dataを設定しているのでおかしくなっている。


[root@ip-10-2-18-219 nocss]# php mime.php
text/x-c; charset=us-ascii
[root@ip-10-2-18-219 nocss]#
mime.phpはここを参考にした → PHP: finfo_open - Manual

やった対策

yum update php

PHPをアップデート
yum updateでPHPを5.3から5.4にアップデート
php5.3.3 -> 5.4.24


[root@ip-10-2-18-219 nocss]# yum --enablerepo=epel,remi,rpmforge info php
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
* base: mirror.nus.edu.sg
* epel: kartolo.sby.datautama.net.id
* extras: mirror.nus.edu.sg
* remi: mirror.smartmedia.net.id
* rpmforge: mirror.oscc.org.my
* updates: mirror.nus.edu.sg
remi | 2.9 kB 00:00
remi/primary_db | 654 kB 00:00
Installed Packages
Name : php
Arch : x86_64
Version : 5.3.3
Release : 27.el6_5
Size : 3.5 M
Repo : installed
From repo : updates
Summary : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
License : PHP
Description : PHP is an HTML-embedded scripting language. PHP attempts to make
: it easy for developers to write dynamically generated webpages.
: PHP also offers built-in database integration for several
: commercial and non-commercial database management systems, so
: writing a database-enabled webpage with PHP is fairly simple. The
: most common use of PHP coding is probably as a replacement for CGI
: scripts.
:
: The php package contains the module which adds support for the PHP
: language to Apache HTTP Server.

Available Packages
Name : php
Arch : x86_64
Version : 5.4.24
Release : 1.el6.remi
Size : 2.7 M
Repo : remi
Summary : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
License : PHP and Zend and BSD
Description : PHP is an HTML-embedded scripting language. PHP attempts to make
: it easy for developers to write dynamically generated web pages.
: PHP also offers built-in database integration for several
: commercial and non-commercial database management systems, so
: writing a database-enabled webpage with PHP is fairly simple. The
: most common use of PHP coding is probably as a replacement for CGI
: scripts.
:
: The php package contains the module (often referred to as mod_php)
: which adds support for the PHP language to Apache HTTP Server.

yumで詰まる


[root@ip-10-2-18-219 nocss]# yum --enablerepo=epel,remi,rpmforge update php
...
...
Is this ok [y/N]: y
Downloading Packages:
warning: rpmts_HdrFromFdno: Header V3 DSA/SHA1 Signature, key ID 00f97f56: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
Importing GPG key 0x00F97F56:
Userid : Remi Collet
Package: remi-release-6.4-1.el6.remi.noarch (installed)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
Killed
[root@ip-10-2-18-219 nocss]# yum --enablerepo=epel,remi,rpmforge update php

yum cleanもNG


[root@ip-10-2-18-219 nocss]# yum clean all
rpmdb: Thread/process 11771/140081896781568 failed: Thread died in Berkeley DB l ibrary
error: db3 error(-30974) from dbenv->failchk: DB_RUNRECOVERY: Fatal error, run d atabase recovery
error: cannot open Packages index using db3 - (-30974)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:

Error: rpmdb open failed
[root@ip-10-2-18-219 nocss]#

対処

yumのエラーと言うことで、google先生に聞いた。yumやrpmコマンド実行時にエラーが出たときの対処 | Pocketstudio.jp log3を参考にした。


[root@ip-10-2-18-219 nocss]# cd /var/lib/rpm
[root@ip-10-2-18-219 rpm]# ll *db.00*

  • rw-r--r--. 1 root root 24576 Feb 10 01:44 __db.001
  • rw-r--r--. 1 root root 229376 Feb 10 01:44 __db.002
  • rw-r--r--. 1 root root 1318912 Feb 10 01:44 __db.003
  • rw-r--r--. 1 root root 753664 Feb 10 01:44 __db.004

[root@ip-10-2-18-219 rpm]# mv *db.00* /var/tmp
[root@ip-10-2-18-219 rpm]# yum clean all
Loaded plugins: fastestmirror, presto
Cleaning repos: base epel extras rpmforge updates
Cleaning up Everything
Cleaning up list of fastest mirrors
1 delta-package files removed, by presto
[root@ip-10-2-18-219 rpm]#

 → updateがやっぱりNG

色々やってみた

結論: httpdとmysqldのプロセスをstopした上でyum updateする → OK


service httpd stop
service mysqld stop
yum --enablerepo=epel,remi,rpmforge update php
service httpd start
service mysqld start

update後


[root@ip-10-2-18-219 nocss]# php mime.php
text/plain; charset=us-ascii
[root@ip-10-2-18-219 static]# php --version
PHP 5.4.24 (cli) (built: Jan 9 2014 07:32:12)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
[root@ip-10-2-18-219 static]#

サバフェスに参加した際の取り組みまとめ

一応、作業ログを取りつつ進めたので、一部をご紹介したいと思います。
理由は後輩と一緒に出場したからで、99%作業は私がやったのだけれど、後から説明するために作ったメモから。

構成の検討

・最初は nginx(LB+cache)x1 -> webx3 -> DBx1 を考えていた。
・次に nginx(LB+cache)+DBx1 <-> webx4 とした。
  ⇒ トラブルのせいで、比較のための性能試験をやる暇がなく、後者の案で固定した。
mysqlレプリケーションしてwebに載せる案って、今回は実現性あったのでしょうかね??

サーバ構築(詳細は割愛)

・インストール
nginx, mysql, php-fpmは最新stable versionを導入。
APCを入れました。他にも高速なキャッシュ系があったとのことで、調査不足でした。。


参考: 
http://d.hatena.ne.jp/yoshi-ken/20120205
http://b-index.jp/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E6%A7%8B%E7%AF%89-v02-centos6-4%E3%81%ABmysql5-6%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/
http://cross.hvn.to/?p=1874
・new relicを導入
初めて使いましたが、大成功でした。監視を自分で入れる必要が無くなり、トランザクションの確認もできたり、すごく高機能でした。
惜しむらくは、それを使いこなすだけの技術が全く不足していたことです。

参考:
webサーバ:
http://www.slideshare.net/HiroyukiYamaoka/new-relic-night-27288003

mysql
http://qiita.com/polidog/items/548031ad12d24e7c8f55

nginxについて

・同一URLへのGET時に複数リクエストが飛ばないようにする(大事!)


参考:
http://labo.samuraistyle.org/blog/archives/tag/nginx
http://blog.serverworks.co.jp/tech/2012/09/21/nginx-03/

mysqlについて

・書き込み重視なので、InnoDBに変更


参考:
http://nippondanji.blogspot.jp/2010/03/innodb-plugin.html
http://dbstudy.info/files/20130729/mysql56_parameters_r2.pdf
http://open-groove.net/mysql/seek-mysql-memory/
mysql tunerを使い、my.cnfとか弄るときの参考にしました。

参考:
http://www.e-agency.co.jp/column/20121220.html

php-fpmについて

色々、素人ながらチューニングの真似事をやってみました。
が、恥ずかしいので出せません。


参考:
http://blog.kubox.info/2011/07/nginxphp-fpm.html

その他取り組み

・ログを見やすくする。IPを出したり、nginx(LB)で振り分け先を出したり。
・webサーバは4台あったので、my.cnfやphp-fpm.confなどは、一台からscpで全台に反映できるようなスクリプトを作った
・計5Gのディスクが使えたので、mysqlサーバでRAID5やRAID0を試して見ようとしたら、再起動で上がらなくなることが何度もあって断念。設定が悪かったのだと思いますが。。


参考:
http://www.maruko2.com/mw/CentOS%E3%81%A7%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2RAID%E3%81%AE%E6%A7%8B%E7%AF%89
http://www.idcf.jp/blog/cloud/rootdisk/
・仕方ないので、mysqlのディスク部分を起動時にRAM領域にコピーすることでRAMをディスクとしてmysqlを起動させ、暫定的に高速化した。
 ⇒ 本当は汚い手段なのでやりたくなかったのだけれど、苦肉の策でした。
負荷試験はabでやりました。ab -n 3000 -c 1000 のPOSTで10秒とか時間がかかってしまっているところは、最後まで何ともなりませんでした。残念。

感想

やっぱり最後はデスマーチでした。
でも、非常に楽しかったです。またやりたい。

読みづらい。

はてなのタグって、何でこう分かりづらいんでしょう??
月1ぐらいの更新ペースなので、直感的に使いやすいと嬉しいのに。
後でもう少し読みやすいようにしたいと思います。

いざ検証

【構成】
・CentOS6.4のサーバ2台(仮想サーバを構築。IPはそれぞれ割り当て)
・仮想用のIPとして、別なIPを用意

keeapalivedのインストール


yum install keepalived
・・・便利ですね。これで一発です。

設定ファイル

場所は、/etc/keepalived/keepalived.conf にconfがあると思います。
これを修正します。

今回は、redisの構成に利用する目的だったので、以下の記事を参考にしました。
というか、丸ごとコピーして、VIPだけを修正して検証しました。とりあえずです、とりあえず。
http://d.hatena.ne.jp/sfujiwara/20120802/1343880266:RedisをKeepalivedでフェイルオーバーする構成案

設定で注意すべき点

つまらないところで引っかかったりします。要注意。
CentOSがデフォルトだとiptablesが上がってます。必要なければ停止、必要ならば設定を適切に変更しましょう。
 今回はネットワークのセキュリティは考慮不要なので、停止させます。


service iptables stop
keepalived用のスクリプトでは、実行権限やパスに注意。
 スクリプトで「./redis-check.sh」とか書いても、パスが通ってないとNGですよ?と。



以上。