Webサービス・サーバーの無停止化を試行(2)

Webサービス・サーバーの無停止化を試行(2)

前回に続いて、今回は「Webサービス・サーバーの無停止化を試行」について作業内容を書いていきたいと思います。

作業

設定

fluentdのインストールは省きます。
先にnginxにてlog_formatを以下のようにしました。

デフォルトの半角スペース区切りだったのでパースしやすいようにタブ区切りに変更してます。
また、なんのデータなのかわかるようにもなりました。

次にflunetdの設定

source箇所でアクセスログをチェックしていて設定項目は既存のものだけだと思います。
match箇所で実際の処理を行っていて以下になります。

※本当はもっとスマートにまとまるんだと思いますが、不慣れなのでこんな感じになってしまった。

作成

phpとpluginの作成になります。

phpの改修
単純に空だが今は確認用に文字列を出している

旧:index.php

 ※〜は記述を省略してます

新:index_new.php

plugin作成
rubyはよくわかってないが既存のpluginを参考にすればさくっと出来ると思ってたけど、
思ったより時間がかかってしまった。。。

out_xml.rb

common_hbasepost.rb ※抜粋
タイプは大きく分けると2パターン
1.サービスは異なっても通知先のPHPが共通している
2.サービス間でURL形式に差がある
※2番がネックでいろいろ用意するハメになった。。。

内部の処理は簡単に以下

  • 初期化
  • クエリパース
  • XML作成
  • XML通知

確認

確認方法としてはいくつかURLパターンを抜粋して新旧で実行し、
DB上のデータに差異がないことを確認した。

データフロー(サンプル)
1〜4の流れで4番のデータを新旧で差分確認。
 ※timestampに関しては実行時間で違いがでるので大きくずれがなければ問題ないとした

1.実行URL
http://www.test.com/?k=20150524200644603qtcpaOL5ZyADgWuSu&f=data&c=employ_number&v=2&t=asplog&tmp=1432675386977

2.アクセスログ

3.通知XML

4.実際のデータ

この流れをサービス毎、URLタイプごと抜粋データで確認した。

まとめ

内部向けっぽくなったけど、残すことは大事かなと思いました。
また、メインの処理はclassにしたのでテストも用意できそうだし、結果としては悪くなかったかもしれないです。

データの性質上、本番のデータを拝借しても問題ないと思うので、
並行稼動っぽい感じにしてデータ差異が無いことを確認したら切り替えていこうかなと思ってます。

あなたにおすすめ

仮想環境で『Ansible』を使ってサーバ構築... 最近、サーバ構築を実施する必要がありました。 まずは仮想環境を作り、サーバ構築を……と思ったのですが、私はインフラ周りの経験が浅く、色々困ったことが頻出してしまいました。 今回の記事では、私と同じような “サーバ構築ビギナー” ...
内線電話用の番号検索|Slack APPで作ってみた... ショーケース・ティービーではメール誤送信防止という観点から、社内連絡ではチャットツールを使用しています。 現在使用しているツールは「HipChat」。 <bitWave関連記事『情報漏えいしないための決定打!”Hip Chat”』>...
Amazon EC2|Red Hat Linux 7.3で“Muninインストール“や“パッケージ導... ナマステ~! 私はナラヤンです! 今回が初投稿になるのですが、実はこれまで何度か本bitWave上でも登場していました。 <bitWave関連記事『おもてなしの企業の社員が、ネパール人をおもてなししてみた!』> <bitWave関...
継続的インテグレーションツール『Jenkins』を触ってみた... こんにちは。M.Sです。 現在、『Jenkins』からSeleniumを実行するお題に取り組んでいます。 『Jenkins』ってなに? 身近な継続的インテグレーションとは 『Jenkins』はjavaで実装されたオープンソー...