komiyay

komi

サーバインフラ系主婦です。 さいきんわりとqiitaに書いてます。
  • Chefで既存手順のレシピを書く5(munin、zabbix)

    おつかれさまです。小宮です。 前回に引き続き、munin,zabbixの手順のレシピをご紹介します。レシピはこの記事でおしまいです。 記事の最後にはレシピの適用方法を記載します。 ・muninのレシピ # cd /opt/src/rpms # mkdir -p /root/chef-repo/site-cookbooks/munin/files/default/rpms # mkdir -p /root/chef-repo/site-cookbooks/munin/files/default/var/www/html/munin # mkdir /root/chef-repo/site-cookbooks/munin/files/default/etc/munin/plugin-conf.d # cp -p /etc/munin/munin.conf /root/chef-repo/site-cookbooks/munin/files/default/etc/munin/ # scp -Cp xxx-web01:/etc/munin/munin-node.conf /root/chef-repo/site-cookbooks/munin/files/default/etc/munin/ # cp -p /var/www/html/munin/.htaccess /root/chef-repo/site-cookbooks/munin/files/default/var/www/html/munin/ # cp -p /etc/munin/plugin-conf.d/munin-node /root/chef-repo/site-cookbooks/munin/files/default/etc/munin/plugin-conf.d/ # tar cf /root/chef-repo/site-cookbooks/munin/files/default/rpms/munin-node-rpm.tar ./munin-node-rpm/ # tar tf /root/chef-repo/site-cookbooks/munin/files/default/rpms/munin-node-rpm.tar ./munin-node-rpm/ # tar cf /root/chef-repo/site-cookbooks/munin/files/default/rpms/munin-serv-rpm.
    ...
  • Chefで既存手順のレシピを書く4(DBサーバ)

    おつかれさまです。小宮です。 前回に引き続きdbserverのレシピについて書いていきます。 のこってるのはmunin、zabbxとserverspecでのテストだけです。もうすこしの辛抱です。 webと同じくバージョン固定インストールなので、外部レシピは基本的に使わない方向とする ・mysqlのインストールと起動と自動起動の有効化 [shell]# cd /root/chef-repo/site-cookbooks/mysqld/recipes mkdir -p /root/chef-repo/site-cookbooks/mysqld/files/default/usr/local/src/rpms mkdir -p ../templates/default/etc/init.d mkdir -p ../files/default/etc/init.d mkdir -p ../files/default/root mkdir -p /root/chef-repo/site-cookbooks/mysqld/files/default/etc/logrotate.d mkdir -p /root/chef-repo/site-cookbooks/mysqld/files/default/opt/{backup,bin} scp -Cp xxx-db02:/opt/bin/mysql-back.sh /root/chef-repo/site-cookbooks/mysqld/files/default/opt/bin/ cp -p /etc/logrotate.d/mysqld /root/chef-repo/site-cookbooks/mysqld/files/default/etc/logrotate.d/ scp -Cp xxx-db01:/etc/init.d/mysqld ../files/default/etc/init.d/ scp -Cp xxx-db02:/etc/my.cnf ../templates/default/etc/ cp -p /root/.path_to_file ../files/default/root/ cd /opt/src/rpms/ tar czf /root/chef-repo/site-cookbooks/mysqld/files/default/usr/local/src/rpms/db-rpm.
    ...
  • 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.
    ...
  • 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.
    ...
  • 裏セグメントから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の設定も必要
    ...
  • 瀕死の技術ブログを復旧した話

    こんにちわ。 今回は主に(当ブログの)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.
    ...
  • MHAの動作確認と切替検証

    MHAの動作確認と切替検証 前回のつづきです。以下の図のように切り替わるようテストします。 ※本検証はマスタ1台、スレーブ2台、マネージャ1台構成。(多段構成は中間ノード障害時の復旧が猥雑になるので回避) スレーブにmanagerを同居させるとpurge_relay_logsとかぶると上手く切り替わらない可能性があるようです。 ※2台しかない場合で上手く切り替わらないことがあるようです。以下参考。 http://heartbeats.jp/hbblog/2013/05/mysql-mha-haproxy.html ⑥ 起動前チェック ・sshの動作チェック [shell] # masterha_check_ssh –conf=/etc/app1.cnf [/shell] OKな場合最終的に以下のように出力される [shell] Tue Oct 23 15:02:22 2012 - [info] All SSH connection tests passed successfully. [/shell] ・replicationの動作チェック [shell] # masterha_check_repl –conf=/etc/app1.cnf [/shell] OKな場合最終的に以下のように出力される(※mysql5.6からはMHAのバージョンによってはbinlog-checksum=NONEにしないとここで失敗するかもしれません) [shell] MySQL Replication Health is OK. [/shell] ※失敗するパターン レプリケーションのフィルタリングルールが合っていない LVSとMHAマネージャが相乗りの場合、チェックタイミングが重複しホスト毎DBサーバに拒否されてしまう(要flush hosts;) ⑦更新VIP用IFファイルを確認 db01/db02
    ...
  • MHA(MasterHighAvailabilityManager)の導入設定

    MHA(MasterHighAvailabilityManager)の導入設定 使用バージョン:mha4mysql-manager-0.53-0、MySQL-5.5 ①簡単な利点などの解説 MHAとはmysqlのマスタ障害時に最新のスレーブをマスタとして他のスレーブの差分を補完しマスタの向き先を変えてくれるプロダクト。 Heartbeat+mon+mysqlに比べるとreplicationの再構成も行ってくれるので切り替わってもDBがシングルにならないのが利点。(3台以上の構成の場合) 作者のスライド 公式サイト MHAの制約:mysql5.0以上、SBR(ステートメントベースレプリケーション)の場合LOAD DATA INFILEを使えない ※マネージャはadminサーバ、ノードはDBサーバ(マスタ・スレーブ共通) ② マネージャにてインストール ※以下、admサーバから実施 ・インストール [php] wget http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.53-0.noarch.rpm wget http://mysql-master-ha.googlecode.com/files/mha4mysql-manager-0.53-0.noarch.rpm yum –enablerepo=rpmforge install \ perl-Config-Tiny \ perl-Time-HiRes \ perl-Log-Dispatch \ perl-Parallel-ForkManager \ perl-Params-Validate yum install perl-DBD-MySQL rpm -ivh mha4mysql* [/php] 入ってなかったら [shell]yum install –enablerepo=remi mysql mysql-server perl-DBD-MySQL[/shell] ※マネージャはmysql-serverいらないかも ③ ノードにてインストール ※以下、dbサーバから実施
    ...