• Chefで既存手順のレシピを書く3(WEBサーバ)

    こんにちは。プラットフォームの小宮です。 前回に引き続き既存手順のレシピ化をすすめていきます。あと3回くらいだと思われるので気長におつきあいください。 今回はWEBサーバのレシピになります。 特別なことは特にしていなくて普通のwebサーバだと思いますが、一応何してるか書いておきますと、 apache2.2+php5.3系で中間コードキャッシュにAPCを使っていてwordpressとそのsshプラグインつかっておりAWSのS3にmountしています。 s3mountに使うfuseが最新版からソースコードで入れる必要があり、バージョン固定のphpのパッケージが18個くらいとかありまして 一つ一つpackageリソース書くのが面倒だったこともありましてscriptつかいました。 scriptつかうときはnot_if忘れるとmakeとか何回も実行されて困るので注意が必要です。 あとcd書き忘れると展開場所が認識してるとこに出ないのでその後の手順でファイルが存在しないエラーがでました。 ・httpdのレシピを書く 設定ファイルの準備をする [shell]# mkdir -p /root/chef-repo/site-cookbooks/httpd/files/default/rpms # tar cf /root/chef-repo/site-cookbooks/httpd/files/default/rpms/web-rpm.tar ./web-rpm/ # tar tf /root/chef-repo/site-cookbooks/httpd/files/default/rpms/web-rpm.tar ./web-rpm/ # cd /root/chef-repo/site-cookbooks/httpd/recipes # mkdir -p /root/chef-repo/site-cookbooks/httpd/files/default/etc/httpd/{conf,conf.d} # cp -p /opt/src/config/web/httpd.conf /root/chef-repo/site-cookbooks/httpd/files/default/etc/httpd/conf/ # vi /root/chef-repo/site-cookbooks/httpd/files/default/etc/httpd/conf/httpd.conf # mkdir -p /root/chef-repo/site-cookbooks/httpd/files/default/etc/php.d # cp -p /opt/src/config/php/php.ini /root/chef-repo/site-cookbooks/httpd/files/default/etc/ # cd /root/chef-repo/site-cookbooks/httpd/files/default/rpms # wget http://rpms.
    ...
  • MysqlのHAとトラブル事例

    久しぶりの更新になります。プラットフォームの宮下です。 先日開催されました、July Tech Festa2013というイベントの中の1コマで何と私が発表をさせて頂きました。 その時使用した資料をアップしますので興味のある方は是非一読下さい。 [slideshare id=24320385&doc=mysqlha-130716215401-phpapp02] mysqlのHA構成のデザインパターン紹介を経験談を交えて話させて頂きました。 とても緊張してしまって肝心のトラブル事例がお話出来ませんでした。このブログでは、包み隠さずトラブルのレポートが出来ればと思います。 今回のテーマは、小宮先生のレポートを多分に活用させて頂いています。 次回こそは、私の成果を発表したいもんです。 それではまた近いうちに更新します。
    ...
  • Chefで既存手順のレシピを書く2(ユーザ作成)

    こんにちは。プラットフォームの小宮です。 前回に引き続きChefの記事で失礼します。 data_bagsでユーザ管理の用意をします。 一応、以前にこちらに書いてるのですが、関連情報がまとまってるほうがいいと思うので部分的に再掲します。 data_bagsとはldapのような機能をもったデータ検索など管理ができるもの。 chef-server使う場合はサーバと通信してデータ取ってきて反映することが可能。 今回はChef-soloなので、ローカルのファイルにデータを用意して反映させる方法をとります。 参考: もしユーザ数が多くて頻繁にアカウントが追加変更される場合、以下リンクのようにdata_bagsで有効無効も管理するのもよさそうです。 chef-data-bag活用法 [shell]# cd ;cd chef-repo/data_bags # mkdir users;cd users # vi xxx-op.json // xxx-op.json { “id” : “xxx-op”, “groups”: [ “xxx-op”,“wheel” ], “uid”: 1000, “username” : “xxx-op”, “home” : “/home/xxx-op”, “shell” : “/bin/bash”, “password” : “$1$Ka.Mw69U$TT5HRfSe7xxxxx” } # vi yyy-op.json // yyy-op.
    ...
  • Chef-Soloでレシピを書く前の環境について(Vagrantfile,role,node,data_bags)

    こんにちは。小宮です。 いつのまにか今年の前半が終了しました。宇治金時がおいしい季節になってしまったようです。 それはともかく前回の続きです。 今回はChef-Soloのレシピを書く前の環境の定義などまでを書きます。 Chef用語などは軽く解説してる、今日から使い始めるChefを見ていただくか定番の入門Chef Soloを見ていただくのが早いんではないかと思います。 Automated infrastructure is on the menuも英語ですがわかりやすいです。 やりたいこととしては以下のとおりです。 Vagrantfileを書いて仮想インスタンスをたてる chefレポジトリを作る chefクックブックを作る nodeを定義する roleを定義する data_bagsを定義する ★今回はここまで★ レシピを書く レシピをノードに適用する serverspecテストを書く テストを実環境に実行する テストの構成: chef-solo元のadmserver:10.0.0.93 knife-solo適用クライアントwebserver:10.0.0.240 knife-solo適用クライアントdbserver:10.0.0.241 全てCentOS5.8です。 ・AWSの環境変数を定義 AWSのVPC上なので適宜定義しておきます [shell]# cd # vi .ec2 export AWS_ACCESS_KEY_ID=****** export AWS_SECRET_ACCESS_KEY=******* export AWS_KEYPAIR_NAME=xxx-key export AWS_PRIVATE_KEY_PATH=/root/.ssh/xxx-key # source .ec2[/shell] ・VagrantFileを書く vagrant initを実行するとVagrantfileができますのでそれを編集し、
    ...
  • Chefで既存手順のレシピを書く1(初期設定)

    こんにちは。プラットフォームの小宮です。 前回はChefでレシピを書く前のroleやdata_bagsなどの環境定義について書きました。 今回は既存手順のレシピ化ということで淡々と地味に書いていきたいと思います。 注意: scriptリソースを使うときはnot_ifまたはonly_ifを必ず書くこと(複数回実行されないように) bash内でcdを書き忘れるとtarの解凍先パスがその後のコマンドの指定と一致しなくなるので注意 scriptリソースを使うとエラーがまともに出ないので自分でコマンドをたたいて状況を確認する必要がある リソースのマニュアルを熟読推奨。 クックブック名とその内容は以下の通り。 base_setting 初期設定など ★今回ご紹介するレシピはこちらのみです。 login-users ログインユーザ作成 httpd web関連設定 mysqld db関連設定 munin 統計グラフ設定 zabbix 監視設定 レシピを書く ・base_settingのレシピを書く 使いまわしやすさを意識した結果細かく分割して書くことにしました。 ☆バックアップディレクトリ作成レシピ [shell]# cd site-cookbooks/base_setting/recipes/ # for i in bkup_dir hosts sysctl disable ntpd ntpdate mail logrotate ;do touch $i.rb ;done # vi bkup_dir.rb directory ‘/etc/.backup/’ do owner ‘root’ group ‘root’ mode ‘0755’ action :create end[/shell]
    ...
  • Chef-SoloとVagrantの導入(VPC環境)

    こんにちは。プラットフォームの小宮です。 最近chef流行ってますね。 せっかくだからこの波に乗ってプロダクト環境に合わせてやってみよう的な記事を書こうかと思います。 さっさとServerspecまでたどり着きたいんですが、今回は導入のみの記事でレシピなどはまた次回以降に。 やってみよう的なレベルなのでリファクタリングし甲斐のあるレシピになる予感がします。 さて今回Chef化を試みる環境はVPC上に移行する話になってます。(構成はweb2、db2、stg1、nat1です。ELB利用。soloで十分な感じ。) Vagrant-awsでVPCつかう方法が可能なようなので、Vagrantを使用して構成管理を行いつつKnife-soloも使うことにします。 vagrantとsahara連携でOSの状態を保存してロールバックということが可能となります。 knife-soloだと/sbin等の下のrubyを消して入れ替えようとしてしまうことがあるらしいので、アプリケーションにおいてrubyを使用しないことを確認しておきます。 vagrantを入れるのでruby1.8.7より上のバージョンをrbenvで入れます。 (CentOS5系の場合。6系や他のディストリビューションでは別途ruby -vで確認してください) 実は、Chef-Clientを/opt/chefの下に入れた段階で以下のようにPATHを通しておけばrubyのバージョンは気にしなくてもよいかもしれません。 [shell]# curl -L https://www.opscode.com/chef/install.sh | bash # export PATH=$PATH:/opt/chef/embedded/bin/ # vi ~/.bashrc PATHをとおしておく[/shell] gemでchefを入れるのは古いやりかたみたいですね。 ・最初にOracleVirtualBoxを導入 入れる理由はVagrant-awsでインスタンスの起動と管理を行うため。 [shell]cat /etc/redhat-release CentOS release 5.8 (Final) yum install libXmu libXt mesa-libGL qt qt-x11 SDL wget http://download.virtualbox.org/virtualbox/4.2.12/VirtualBox-4.2-4.2.12_84980_el5-1.x86_64.rpm rpm -ivh VirtualBox-4.2-4.2.12_84980_el5-1.x86_64.rpm[/shell] ・ruby-1.8.7より新しいバージョンを導入(必要な場合) [shell]yum -y install zlib-devel readline-devel openssl-devel yum install ruby ruby-devel rdoc irb rubygems yum install git –enablerepo=rpmforge[/shell]
    ...
  • AmazoneSESを使ってメール送信する(SMTPリレー)

    こんにちは。プラットフォームの小宮です。 ちょっと前にAmazoneSESを使ってSMTPリレーでメール送信の設定をしたのでその記録を公開させていただきます。 ※SDKでなくSMTPリレーのほうを試します。(SDKつかうにはサーバにruby入っていてruby使う必要があるため。) ★SESの申し込みをする SESのサービスダッシュボードに「RequestProductionAccess」というボタンがあるのでそれを押すと お問い合わせ画面が出てくるので、必要な内容を入力する (名前とサービスドメインとメールアドレスとメールの用途など) Request Production Access to Simple Email Service(お問い合わせ) 入力送信すると、 リクエストありがとう、1日も早く使えるように審査するからマニュアル読んでお待ちください と英文メッセージが出る。 申請の翌日SESのダッシュボードを確認したところ、以下の標記になっていた Your Amazon SES Sending Limits Sending Quota: send 10000 emails per 24 hour period Quota Used: 0% as of 2013-03-08 10:53 UTC+9 Max Send Rate: 5 emails/second 24時間に10000通まで送ることが可能 現在の使用率は0% 最大送信レートは秒間5通 送信元は以下と教えていただいた → 会員登録時「no_reply@hoge.
    ...
  • WordPressサイトを簡単に他国語化できるプラグイン

    図1: qTranslate プラグイン WordPressはGNUのGettextを取り入れて多言語対応しているものの、実際に1つのサイトで多国語化を実現しようとすると、色々と困難な問題に突き当たる。とある開発案件にて多国語化の要望があったので、色々と言語系のプラグインなどを調べていたところ、見つけたのが「qTranslate」プラグインだ。 このプラグイン、サイト全体の言語管理と各投稿毎(コンテンツ毎)の言語管理を一括で行えるという優れもののプラグインである。 図2: 管理パネルのメニュー 管理パネルのメニューにてプラグインで指定した複数の言語を切り替えられるようになる(図2参照)のは序の口で、サイトのフロントエンド側からも言語を切り替えられる(切り替えのUIは別途作る必要はあるが…)。切り替え方も、ブラウザの言語設定に応じて自動化したり、訪問者の手動切り替えや、URLパラメータによる一時的な切り替えなど、色々と選べる。 そして、極めつけが、それぞれ個別の投稿に対して別言語によるコンテンツを同時に投稿できる点が素晴らしい機能である。 サイトの多国語化対応に際して一番大きな障壁が、サイトのメニューやフッター、ボタンといった共用コンテンツは言語ファイルにて他国語化できても投稿等のコンテンツはそれぞれ個別に管理しなければならないという点だ。例えば、日本語でアップした投稿と英語でアップした投稿はそれぞれ個別のコンテンツであり、それらを同じ一つのコンテンツとして管理するためには別の仕組みが必要だった。投稿のUI的にも同時に複数言語の記事が書けないことがネックとなって、サイトの保守性や利便性に難があったのだが、このプラグインはそれらの問題を一挙に解決してくれるのだ。 ということで、モノは試しに、この記事を日本語と英語両方で投稿してみた。英語版を見てみる場合はこのリンクをクリックしてみて欲しい。 図3: プラグイン設定画面 「qTranslate」プラグインは2013年6月19日現在のバージョンが2.5.34であり、同梱されている日本語翻訳ファイルが古く、一部翻訳されない部分があったので、私の方で最新バージョンに合わせた翻訳を行ってみた。 ※ 下記でダウンロードできた .mo ファイルを qTranslate プラグインの lang フォルダ内に入れてやる(上書きする)ことで最新の翻訳が反映されます。 qTranslate プラグイン 日本語化ファイル MO形式:qtranslate-ja.mo (27KB) 動作確認:WordPress 3.5.1 / qTranslate 2.5.34
    ...
  • 裏セグメントからyumやwget等したい場合の設定

    裏セグメントのホスト(たとえばVPCのEIPついてないのとかDBやNASなど裏においときたいやつ) から名前解決とかメールとかyumとかwgetとか時刻同期とかメールしたい! という場合の設定についてざっくりまとめさせていただきます。 とりあえず2パターンあります。 NATする(AWSの場合NATインスタンスを使う)パターンと、 グローバル通信できる管理サーバにソフトウェアを入れて解決するパターン。 ★NATする(AWSの場合NATインスタンスを使う)パターン db側はInternetGatewayつけてなくてパブリックでなくローカルなルーティングな場合、 名前解決をはじめ外に出られないです。(※) NATインスタンスを作るのも勿体ないと、複数NICがついたwebをnat化しようとしたところ、 マルチインタフェースなインスタンスはNATの出口に出来ない模様でした。 (※)最近新しくとったアカウントはVPCオンリーになっていてそちらだとグローバルIPがどんどん勝手に振られるようです。。(EIPつけざるをえない仕様) NATインスタンス作成方法は以下URLから Amazon VPCトレーニング-NATインスタンスの作成方法 VPC詳細 -ほぼ週刊AWSマイスターシリーズ第7回- Amazon VPCでNATを使ってPublic SubnetとPrivate Subnetを分ける 一番上のスライドのとおりでnatインスタンスを作成可能。 ざっくりいうと、 VPCサブネットをつくり、 “ami-vpc-nat"AMIでNATインスタンスを作成し、 NATインスタンスの"Change Source/DestCheck"をDisableにし、 NATインスタンスにEIPをアソシエートし、 PublicSubnetのRouterTableにNATインスタンスのIDを追加し、 必要に応じてNATインスタンスのSecurityGroupを設定する そのほか、一般的なルータ化設定方法と同様に、 インスタンス作成後にiptablesでnatのルール設定が必要になる模様。 /sbin/iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/16 -j MASQUERADE service iptables save iptables --list -t nat 上記スライドのとおりNATインスタンスをデフォルトゲートウェイにするルーティング設定も必要 forwardingの設定も必要
    ...
  • muninのデータを引き継ぐ方法

    こんにちわ。 プラットフォーム担当の宮下です。 今回は、オープンソースのモニタリングツール「munin」でホスト名を変更した時に 今までのデータもそのまま移行する方法を説明します。 なお使用するmuninのバージョンは、1.4.5を使います。 1)RRDのデータを移す。 muninのグラフ描写を行っている「RRD tool」のデータを移行します。 [shell] # cd /var/lib/munin/DIR # rename test01 test01-old ./test01-* [/shell] 格納場所に移動して、ファイルを一括で変換してしまいます。 2)HTMLファイルを移す。 [shell] # cd /var/www/html/munin/DIR # mkdir test01-old # chown munin:munin test01-old # cp -pfR test01/* test01-old/ [/shell] 生成されているHTMLと画像ファイルをまとめて移動します。 移動先のディレクトリが既にある場合は、mkdirとchownは飛ばして下さい。 またOSによってはaliasで「cp -i」が入っているかも知れません。 その時は、バックスラッシュを使って一括移動をします。 [shell] # \cp -pfR test01/* test01-old/ [/shell] これで次の収集間隔から新しいホスト名でデータが更新されていきます。
    ...
  • mysqlパフォーマンス改善への道(その1、現状の確認)

    パワー不足のmysqlをチューニングしてみます。 こんばんわ。プラットフォーム担当の宮下です。 今回は、バックアップ兼集計用に稼働しているmysqlのレプリケーションンサーバの パフォーマンス改善していきたいと思います。 これまでにもいくつか対策はしてきましたが、まずは環境をおさらいします。 ◇稼働してる環境は、AWSのEC2でlargeインスタンスを使用しています。 サービスは、OpenPNEを使用したSNSのサービスとなります。対象のMysqlはバックアップとデータ集計が目的で稼働しています。 (本番サービスでは使用していません) ◇mysqlのバージョンはちょっと古くて「5.0.77」になっています。multiで起動させていていて この他に開発環境用のmysqlも稼働していたりします。 ちなみに今の遅延秒数は、「1512561 秒」でまだ増加中です。 ◇これまでに変更した点ですが、 「innodb_buffer_pool_size」を512Mから2028Mまで増加、 「innodb_flush_log_at_trx_commit」を2から0に変更、 (リカバリの精度よりもスループットを優先) 「key_buffer_size」を32Mから300Mに変更、 「query_cache_size = 0」にして無効化しました。 効果は、DISKのI/Oが半分くらい減りましたが、遅延解消とまではいってません。 ◇最後にmuninで取得しているデータを確認します。 遅延が日々増えています。たまに減る事もありますが要因は分かりません。 常にDISKのread I/Oが大量に発生しています。 原因ははっきりしていて、DBデータに画像や動画データが格納されている為となります。 buffer pool sizeでは収まり切らないデータサイズなので常にDISKのread/writeが発生しています。 またMyISAMとInnodbが混在していてリソースが効率的に利用出来ていない事や、 OpenPNEが「delete aaa filename LIKE ‘%bbb%’」というクエリを大量に発行している事 などが解決すべき課題がたくさんあります。 現状を整理した事で、次回からは一つずつ改善対策を実施していきたいと思います。
    ...
  • 瀕死の技術ブログを復旧した話

    こんにちわ。 今回は主に(当ブログの)mysqlデータベース復旧のお話になります。 担当のお方が 「waordpressだとinnodbよりmyisamのほうが早いらしいので、 変える前にinnodbのmy.cnfのパラメータいじくってベンチマークとろうとした」 ことをきっかけにDBのデータがぶっ壊れました。 mysql5.6ならmyisam使わなくても参照専用トランザクション使うよう改造できれば早いらしいよという話はおいといて。(5.5だし) DBデータが読めなくてwordpressの管理画面にログインできなくなってしまいました。 -————————————————– 130528 11:59:24 [ERROR] Missing system table mysql.proxies_priv; please run mysql_upgrade to create it 130528 11:59:24 [ERROR] Native table ‘performance_schema’.’events_waits_current’ has the wrong structure 130528 11:59:24 [ERROR] Native table ‘performance_schema’.’events_waits_history’ has the wrong structure 130528 11:59:24 [ERROR] Native table ‘performance_schema’.’events_waits_history_long’ has the wrong structure
    ...
  • AmazonEBSでraid0を組んだ時のパフォーマンス検証

    AmazonEBSでraid0を組んだ時のパフォーマンス検証 EBSを組むと早いはなしを検証したい testでマルチ、ラージなら結構こうかある説がある模様。 既存移行の方法も検討(バイナリログ等のディレクトリ分けるところからかと。) 公式のユーザガイド(EBSPerformance) EBS自体が冗長構成組まれているのでraid0でいいと思われる。 インスタンスディスク(ローカルディスク、エフェメラルディスク)を使ってRAID0 EBSでRAID0を組むことは、RAID10(ミラーのストライプ)と同等である Largeインスタンス以上であれば、1台よりも2台の方がディスクI/O性能が目に見えて上がりました エフェメラルディスク(stopすると消えるほうのディスク)でraid0したい場合の起動コマンド例 [shell] ec2-run-instances ami-e965ba80 –region us-east-1 –key id_rsa –group sg-a4866fcc –placement-group test –instance-type cc2.8xlarge -b “/dev/sdb=ephemeral0” - b “/dev/sdc=ephemeral1” -b “/dev/sdd=ephemeral2” “/dev/sdf=ephemeral3” [/shell] ・ラージでEBSディスクを2つ追加して起動してログインする [shell] # df -h Filesystem Size Used Avail Use% Mounted on /dev/xvde1 9.9G 867M 8.5G 10% / none 3.
    ...
  • IDCフロンティア セルフクラウド入門編

    IDCフロンティアのセルフクラウドでAPI環境を用意するまで ~その1~サーバを起動する 始めまして。プラットフォーム担当の宮下です。 かねてから利用している、「IDCフロンティア クラウドセルフタイプ」の利用方法について基本的な流れを案内していきたいと思います。 会社としてもう今回は、仮想マシンの起動までの簡単な流れを説明させて頂きます。 パブリッククラウドは各社で独自の管理コンソールがあって慣れるまではそれぞれにくせがあります。その辺についても今後触れていければと思います。 仮想マシン作成 作成したユーザ/パスワードでログインしたら、〔ホーム〕→〔ダッシュボード〕から〔仮想マシン作成〕で作成を開始します。 OSの選択 次に起動するOSを決めていきます。リストをスクロールすると標準で用意されたテンプレートがたくさん出てきますのでお目当てのOSタイプが見つかるまで頑張って探してみて下さい。 (特にOSの指定が無ければLATESTの中から選び、ミドルウェアが必要かどうかで決めれば良いと思います) 今回はAPIツールを使用する環境を作りたいのでLATESTのLAMP環境OSを選びます。 〔[LATEST] LAMP or LVS(keepalived) or HAProxy or API Access Tool or Scalr or Elecoma or Yahoo! Cloud Storage Access Tools〕 を〔選択〕します。 マシンスペックの選択 次にサーバのスペックを決めます。 これはどこのクラウドでも同じだと思います。必要な用途に応じて最適なマシンスペックを選びます。 今回は最小の〔XS〕(1CPU/メモリ0.5GB)を選択します。 追加DISKの選択 次に追加DISKの設定をを行います。 OSデータ以外にコンテンツやログといった大きな容量を使用する場合は、ココでDISKを増設しておきます。 あとで追加もできますので必要が無ければ追加無しで進めます。なお今回はAPIツール用なのでDISKの追加は行いません。 SSH鍵の設定 最後にSSH鍵を設定します。 始めての時はまだSSH鍵が登録されていないので新規にSSH鍵を作成します。 生成された秘密鍵はSSH接続時やAPIツールを使用する際に必要となりますので大切に保管しておきます。 仮想マシン申し込み 登録した内容を最終確認して仮想マシン作成を開始します。 内容に差異が無ければ同意するにチェックして、〔申し込み〕を選ぶと作成が開始します。 最初の1台目の仮想マシンを作成する時には注意が必要です。赤字の注意事項に書かれている内容を確認しておきます。
    ...