読者です 読者をやめる 読者になる 読者になる

takachan's blog

地方のエンジニアが、まずやってみる(Bias For Action)!!をモットーに気持ちを綴るブログです。

MySQLTunerを使ってAmazon RDS for MySQLのチューニング診断してみました。

AWS 技術

はじめに

インフラ監視について今一度再学習している過程で、MySQLに関しての内容において面白そうな一文がありました。

“接続数は、MySQLサーバに接続している接続数を監視します。接続数は、ご自身がmy.cnfに定義した値を上限としてください。また、あらかじめチューニングを施し、接続数が増えることによるメモリ不足が起こらないように備えてください。チューニングにあたっては、MySQLに関する書籍を参照するか、mysqltuner.plを活用するとよいでしょう。”

mysqltuner.plってなんだ?

参考リンク

github.com

MySQLTunerでMySQLのチューニングを診断する方法│株式会社イー・エージェンシー

構成

ケチケチして最小の構成で実施します。すべて東京リージョンで構築します。

  • EC2 t2.nano
  • RDS for MySQL db.t2.micro

RDSのパラメータグループはdefault.mysql5.6を使用します。

EC2事前準備

sudo yum -y update
sudo yum -y mysql
wget http://mysqltuner.pl/ -O mysqltuner.pl
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv
chmod +x mysqltuner.pl

RDS接続確認

mysql -h xxxxxx.ap-northeast-1.rds.amazonaws.com -P 3306 -u rdstest -p
Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 5.6.23-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

MySQLTuner実行結果

perl mysqltuner.pl --host xxxxxx.ap-northeast-1.rds.amazonaws.com --user rdstest --password xxxx --forcemem 256

[--] Performing tests on xxxxxx.ap-northeast-1.rds.amazonaws.com:3306
Please enter your MySQL administrative login: rdstest
Please enter your MySQL administrative password:  >>  MySQLTuner 1.6.2 - Major Hayden <major@mhtx.net>
 >>  Bug reports, feature requests, and downloads at http://mysqltuner.com/
 >>  Run with '--help' for additional options and output filtering
[--] Skipped version check for MySQLTuner script
[--] Assuming 256 MB of physical memory
[!!] Assuming 0 MB of swap space (use --forceswap to specify)
[OK] Currently running supported MySQL version 5.6.23-log

-------- Storage Engine Statistics -------------------------------------------
[--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM
[!!] InnoDB is enabled but isn't being used
[OK] Total fragmented tables: 0

-------- Security Recommendations  -------------------------------------------
[OK] There are no anonymous accounts for any database users
[OK] All database users have passwords assigned
[!!] User 'rdstest@%' hasn't specific host restriction.
[!!] There is no basic password file list!

-------- CVE Security Recommendations  -------------------------------------------
[--] Skipped due to --cvefile option undefined

-------- Performance Metrics -------------------------------------------------
[--] Up for: 13m 59s (1K q [1.782 qps], 26 conn, TX: 93K, RX: 157K)
[--] Reads / Writes: 95% / 5%
[--] Binary logging is enabled (GTID MODE: OFF)
[--] Total buffers: 646.0M global + 1.5M per thread (66 max threads)
[!!] Maximum reached memory usage: 649.0M (253.52% of installed RAM)
[!!] Maximum possible memory usage: 745.0M (291.02% of installed RAM)
[OK] Slow queries: 0% (0/1K)
[OK] Highest usage of available connections: 3% (2/66)
[!!] Aborted connections: 3.85%  (1/26)
[!!] Query cache is disabled
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 1 sorts)
[OK] Temporary tables created on disk: 3% (3 on disk / 100 total)
[OK] Thread cache hit rate: 92% (2 created / 26 connections)
[!!] Table cache hit rate: 14% (45 open / 303 opened)
[OK] Open file limit used: 0% (48/65K)
[OK] Table locks acquired immediately: 100% (424 immediate / 424 locks)
[OK] Binlog cache memory access: 100.00% ( 9 Memory / 9 Total)

-------- MyISAM Metrics -----------------------------------------------------
[!!] Key buffer used: 18.2% (3M used / 16M cache)
[OK] Key buffer size / total MyISAM indexes: 16.0M/2.4M
[OK] Read Key buffer hit rate: 95.4% (438 cached / 20 reads)
[!!] Write Key buffer hit rate: 88.3% (384 cached / 45 writes)

-------- InnoDB Metrics -----------------------------------------------------
[--] InnoDB is disabled.
[!!] InnoDB Storage engine is disabled. InnoDB is the default storage engine

-------- AriaDB Metrics -----------------------------------------------------
[--] AriaDB is disabled.

-------- Replication Metrics -------------------------------------------------
[--] No replication slave(s) for this server.
[--] This is a standalone server..

-------- Recommendations -----------------------------------------------------
General recommendations:
    Add skip-innodb to MySQL configuration to disable InnoDB
    Restrict Host for user@% to user@SpecificDNSorIp
    MySQL started within last 24 hours - recommendations may be inaccurate
    Reduce your overall MySQL memory footprint for system stability
    Reduce or eliminate unclosed connections and network issues
    Increase table_open_cache gradually to avoid file descriptor limits
    Read this before increasing table_open_cache over 64: http://bit.ly/1mi7c4C
    Beware that open_files_limit (65535) variable
    should be greater than table_open_cache ( 2000)
Variables to adjust:
  *** MySQL's maximum memory usage is dangerously high ***
  *** Add RAM before increasing MySQL buffer variables ***
    query_cache_type (=1)
    table_open_cache (> 2000)

[!!]と出ている行が警告で、チューニングの改善が必要な箇所が表示されます。 InnoDB関連はMyISAMを選択しない限り無視してOKです。

Recommendations以下に表示されている内容を確認し、 必要な部分は対応するとよいとのことです。

上記結果を参考に、以下のRDSのパラメータグループを変更しました。

  • table_open_cache
  • query_cache_limit
  • query_cache_type

まとめ

MySQLTunerを使って普段使用しているRDSのパラメータを診断してみました。 encodingやtimezoneは変更していましたが、診断結果によってチューニングできる箇所が分かると嬉しいですね。

RDSはよく出来ているサービスなので皆さん是非使用しない手は無いですよ!!

試した方は最後に起動したEC2とRDSの削除をお忘れなくm( )m

moCloud上のPHPからSendGridを使ってメール送信 - Mobingi Advent Calendar 2015

Mobingi moCloud Advent Calendar

この記事は、Mobingi Advent Calendar 2015 - Adventar の 12月22日の記事になります。

f:id:twinuma:20151222162131p:plain

What's Mobingi?

mobingi.com

AWSのCloudFromationをより簡単な操作で作成できるサービスという印象です。 初めて触っただけでも必要な構成をすぐ用意することが出来ました。

What's moCloud?

mobingi.com

ロードバランス機能がついたアプリケーションを簡単なワークフローのみでデプロイすることができます。 用途としてはWebサーバやAPIサーバとして利用がオススメです。

もっとmoCloudを知りたい方におすすめのリンク

yoshidashingo.hatenablog.com

moCloud上にサーバ作成

構成情報

このような画面で実行したいアプリケーション設定を行います。非常に簡単でわかりやすいUIです。 f:id:twinuma:20151222071353j:plain

SendGridのメールをPHPを使って送信(SendGridのサンプルを使用)

sendgrid.kke.co.jp

上記リンクにある通りサンプルを使用し部分的に書き換えました。 構成は以下の通りです。

├── README.md
├── .env
├── composer.json
├── kanna.gif
├── mobingi-install.sh
└── sendgrid-php-example.php

mobingi-install.shは、実行アプリケーションにおいてソフトウェアのインストールが必要な場合、ルートディレクトリ内に配置するものです。 Documentation - moCloud.io

.envファイルの設定を行いphp -f sendgrid-php-example.phpを実行すると以下のようにメールが3通受信します。 f:id:twinuma:20151222144446p:plain

受信したメールを確認すると、 https://gyazo.com/831b5bc577317a8473dd772ef587802e ちゃんとメッセージと橋本環奈ちゃんgifが添付されていることが確認できました。

まとめ

moCloudを使用する場合は、mobingi-install-shをいかに利用できるかがポイントになるかと思うので ここのtipsをもっと共有できればいいですね。 MobingiとmoCloudどちらも既存のGitHubと連携できるのでpushした時に、自動でデプロイされるようになっていることはDevOpsを実現するためには非常に嬉しい機能であると思います。

リモートワークとモチベーション - リモートワーク Advent Calendar 2015

この記事は、リモートワーク Advent Calendar 2015 - Adventar の 12月10日の記事になります。

見よ、これが子育てエンジニアの姿だ!!

私は株式会社モンスター・ラボでインフラエンジニアをしている、新沼といいます。 主にWebアプリケーションやモバイルアプリのインフラ設計・構築を担当しています。 最近子供が生まれまして、ラップトップの横にミルトンという意外な組み合わせだったので写真撮りました。

リモートワークは現職になってからのワークスタイルとなりますので、1年7ヶ月程になります。 リモートワークに至る経緯や普段の仕事の進め方は、今年掲載されたインタビュー記事を見ていただけると幸いです。

インタビュー記事

その1

ascii.jp

その2

www.remotework-labo.jp

その3

www.remotework-labo.jp

記事に掲載されていないこと・・・

「モチベーション」の部分について書いて見ます。

このようなワークスタイルを選んだ以上、セルフマネジメントができないと成立しないと思っています。 安定した気持ちと健康な体を維持することが大事です。

安定した気持ち

私がいつも思っているのは、以下の3つです。

  • 自分が選択したワークスタイルへの責任とコミット
  • このワークスタイルを認めてくれている会社への感謝
  • 家族と一緒に過ごす時間を多く作る

1年7ヶ月経った今振り返って浮かんできたこの3つです。

健康な体を維持する

運動不足になるので1年くらいほぼ毎日のようにジョギングしています。 走りながら考えていたことの整理やモヤモヤした気分を打ち消したりできます。

調子に乗って来年鹿児島マラソン2016フルマラソン初挑戦します。 www.kagoshima-marathon.jp

私の場合が走るとこでリフレッシュできているだけなので、皆さんにおすすめする訳ではないです。 自分にあったストレス発散方法を見つけられるといいと思います。

最後に

小室さんが1日目に書いていた内容に同意です。 リモートワークは素晴らしいワークスタイルだと思っています。 一過性のものではなく、皆が自分で働き方を場所・時間に制限されることなく自由に選べる機会が多くなるといいなと思っています。

popowa: 何が大事? - リモートワーク Advent Calendar 2015

Mobing Advent Calendar 2015の12/22(火)担当なので、またブログ書きます。 次はテクニカルな内容なると思います。 qiita.com

Mac ユーザーのためのコマンドライン勉強会に参加してきました。

勉強会 Mac Homebrew

昨日は、Mac ユーザーのためのコマンドライン勉強会に講師として参加してきました。

参加者は、6名で少数でしたがお互いフォローし合えるちょうどいい人数だったと思います。 隣がAppleユーザコミュニティの集まりだったようで、間違ってこちらの部屋に入ってくるハプニングが多々ありました。

講師は政倉さんと私で、政倉さんからはコマンドラインの話をして頂きました。 私はHomebrewの話をしてきました。当日使用したスライドをアップしておきます。

時間が余ったので、最後にコマンドラインを使ったアイディアを出しあうことをやったのですが、面白いと思いました。 実際やった問題は「あるディレクトリ内に複数の画像形式の画像の中から、png形式の画像枚数を出力する」というものをコマンドラインで実現するにはどうするか?

皆がアイディアを出し合って解決へのアプローチを話し合うって面白いし、もしかするとその解決方法は仕事でも活かせる内容だったらより嬉しい! って感じながら話をしました。

少人数ならではの勉強会スタイルを今後も模索していきます。

MacAutomatorの存在を知らなかったんですが、めっちゃ便利だった。これはどんどん使っていこう。

最後に2つ宣伝させて下さいm( )m

宣伝1

7/4に「HTML5 Conference in 鹿児島」を開催します。 鹿児島大学をお借りして、200人規模で開催致します。

参加は無料ですので、お時間ある方はご参加下さい。 よろしくお願い致します。

宣伝2

7/4に鹿児島で開催される「HTML5 Conference in 鹿児島」のボランティアスタッフを募集しております。 スタッフがまだまだ足りていないので、みなさんのご協力をお願い致します。 当日は一緒に楽しみましょう!!

今回のブログはざざーっと書いてみました。

社内勉強会でAWS CDPと2-Tier Architectureについて話をしました。

AWS 勉強会

みなさん、お花見しましたか?

桜もいいですが、個人的にはペヤングが発売再開するとのニュースに心踊っています。

私事ですが、来月で今の会社に入社して1年が経とうとしています。

先日、社内のエンジニア向けにAWS CDPと2-Tier Architectureについて話をしました。 1時間半の枠を一人でしゃべり続けるのはなかなかハードルが高いものでしたが、嬉しい反響がありました。

弊社ブログに投稿したら、なんとはてブ160超えました!!

ありがとうございます。ありがとうございます。

monstar-lab.com

きっかけ

弊社は受託案件が多く、私は入社後からAWSインフラ構築やRFPからAWSインフラアーキテクチャを考えたりその見積作成したりしています。

その過程で、AWSのCloud Design Patternを元に考えること当たり前のようにしているんですが、この考え方をもっと社内のエンジニアだけではなく、営業(弊社ではビジネスプロデューサー)にも知ってもらいたいと思ったのがきっかけで今回話してみようと思いました。

また2-Tier Architectureについて、iOS & Android Developerに知ってもらいNonサーバサイドでAWS SDKを使ってアーキテクチャの幅が広がることを知ってもらいたいと思いました。

でも分からないこともあるよ

Cloud Design Patternは数多くあるので、実際に使っているパターンは数えられるほどしかないので「◯◯パターンについて教えて下さい。」という質問にざっくりとしたことは回答できますが、詳細なところまで答えられていません。

加えて、2-Tier Architectureも理想型としては分かるのですが実際に構築したことはないので、突っ込まれると困ってしまいました。

ここは、私もまだまだ勉強不足・経験不足な部分もあります。なので、一緒に考えながら知恵絞り出して向き合っていけたらいいと思います。

さいごに

今回の資料を作る上で、すでに公開されている先人たちの知恵を大いに活用させて頂きました。 なのでオリジナリティがあるスライドにはなっていませんが、私が考えていることは伝えることは出来たかと思います。

今度は皆さんにお返ししますね!

「JAWS DAYS 2015」に登壇&スタッフとして参加してきました。

JAWS DAYS 2015 ハンズオン 網元 AWS

だいぶ久しぶりにブログ更新となってしまいました。

3/22(日)に開催されたAmazonクラウドサービス AWS(Amazon Web Services)のユーザー会であるJAWS-UG(AWS User Group -Japan)が主催の「JAWS DAYS 2015」に登壇&スタッフとして参加してきましたので、感想と今後の決意と私の願いをまとめたいと思います。 f:id:twinuma:20150323212746j:plain:w500

JAWS DAYS 2015とは

こちらの記事が非常にまとまっていて見やすいので、リンク貼ります。

明日はJAWS DAYS 2015!今年は運営側に入って取材します

JAWS DAYSは日本最大のクラウドコミュニティであるJAWS-UG(AWS User Group Japan)による全国規模の交流イベント。50以上におよぶ全国のJAWS支部のメンバーをはじめとし、多くのエンジニア、IT担当者、経営者などが集まり、交流を深める年に1度のお祭りである。

リーダーズ・ミーティング

f:id:twinuma:20150323212107j:plain:w500

各支部の代表が集まってコミュニティの魅力や運営方法にだけではなく、それぞれが抱える悩み事の共有と解決へのアプローチ等を共有しました。 そこで発表があったJAWS DAYS 2015実行委員長の金春さんとAWS SUMURAI2014の西島さんのスライドを貼ります。

20150321 JAWS-UG Leaders Meeting

JAWS-UG総会2015 地方のコミュニティドライブについて

ここで正直な気持ちをお伝えします

このリーダーズ・ミーティングに参加し自分が面白そうだなと思ったことに対して正直になって、地方ならではの少人数で濃いコミュニュケーションを取れる勉強会を開催してきたいと気持ちを新たにしました。

恥ずかしい話ですが、コミュニティの支部長ではありますが人を巻き込む事があまり上手ではありません。

そこで、このブログを読んでいる鹿児島のエンジニアさん、学生さんのお力をお貸し下さい! 私と同じように「自分が面白いと思うものをやってみたい・みんなに知ってもらいたい」と思える方と一緒にコミュニティの運営してみませんか?

少なくとも上で貼った2つスライドを読んで何か胸がワクワクしたかたは、是非メッセージやコメント下さい。よろしくお願いします。

当日

当日の写真を貼っていきます。 f:id:twinuma:20150322080205j:plain:w400 f:id:twinuma:20150324010913j:plain:w400 f:id:twinuma:20150324011100p:plain:w400 f:id:twinuma:20150324011339p:plain:w400 f:id:twinuma:20150324011531p:plain:w400 f:id:twinuma:20150324011801p:plain:w400

とても充実したトラックがたくさんありどれを見たらいいか悩むくらいでした。

スタッフで作業しながらいろんな方とお話できてとても楽しかったです!

初めての受付業務も体験しました。

「網元機動隊入隊式」で登壇しました。

f:id:twinuma:20150324012025p:plain:w400

初心者ハンズオンのトラックで「網元機動隊入隊式」で初登壇しました。

一緒に登壇したJAWS-UG秋田の武田さん、JAWS-UG青森の立花さん、当日サポートして頂いたデジタルキューブの小賀さん、五十嵐さん、西村さん誠にありがとうございました。大きなトラブルもなく無事に終わって良かったです。

追記:2015/03/24 当日のスライド公開

まとめ

このイベントはAWSではなくJAWS-UGが主催であることが大事であり、スタッフはボランティアで参加しています。今回のイベントに参加してJAWS-UGって面白いなぁと思った方はまずはお近くで開催の勉強会へ足を運んでみて下さい。今度は一緒につくりあげましょう。

最後に初登壇終わった写真で、私のJAWS DAYS 2015を閉めます。 f:id:twinuma:20150323213903j:plain:w300

リモートワークを始めて3ヶ月経過するのでいろいろとまとめてみる。〜道具編〜

remote

はじめに

以前これからの私の仕事について、一言いっておくかにて、転職について書いてから5ヶ月が過ぎようとしています。ちなみにまだ夏休み取っていないので、まだ夏は終わっていないと言い聞かせています。

現職に就いてから7月の初めよりの自宅にて、東京のオフィスとのフルタイムリモートワークを始めました。 今回は普段リモートワークしている自宅のデスク周りで使用している物と感想をまとめます。

デスクはこんな感じ

f:id:twinuma:20140913111737j:plain ※机の下のケーブルが気になりますね・・・
以下にまとめていきます。

PC

MacBook Pro 15inch(会社支給)

ディスプレイ

LG 22EA63V-P

画面サイズはあまり大きすぎないほうが、個人的にはよかったので21.5型を選びました。
外部ディスプレイを使って仕事をするのはあまり経験なかったのですが、あるのとないのでは作業効率が格段に違いますね。

スピーカー

CREATIVE INSIRE T10

デスクをつい最近新調したので、押入れに眠っていたスピーカーを出してみました。
今使っているイヤホンもCREATIVEなので結構CREATIVE好きですね。
基本的に仕事中はずっと音楽かFM802を流しています。

キーボード

Apple Wireless Keyboard

Bluetoothなので快適です。若干狭い気がしますが、特段困ってはいないです。

TrackPad

Magic Trackpad

こちらもBluetoothなので快適です。 加えてジェスチャーがすごく便利です!
ただし、「バチンバチン」って響くので通話中には不向きです。

マイク

Blue Microphones Yeti

リモートワークを始めるときには揃えたかった道具のひとつがこれです。
必然的に通話をする機会が増えるので、「音量が小さいです」「聞こえづらいです」なんてストレス溜まるポイントです。
実物を見ると大きくてびっくりすると思いますが、持ち運ぶわけではないので問題ないです。
何よりこれを使ってからは、音声について指摘されたことはありません。

カフェやコワーキングスペースで仕事するときは、iPhoneの純正イヤホンマイク。これ優秀!
apple-earpods-with-remote-and-mic

カレンダー

Amazon Web Service2014版カレンダー(非売品)
来年も下さいm( )m

デスク

モダンワイドデスク

奥さんがネットで見つけた机です。
幅も奥行きも広くて狭苦しい感じがないです。何より安い!!
かと言って、作りがしょぼいわけではないですw

椅子

Ergohuman Pro ottoman

こちらもリモートワークを始めるときには揃えたかった道具です。
おそらくオフィスにいるとき以上に座っている時間が長くなっていると思います。
そうなると肩こりや腰痛のリスクが高まってきます。

リモート始めてすぐにこの椅子を使い始めたわけではなく、別の椅子でしばらく仕事をしていました。
肩こりだけでなく背中の痛みが徐々に現れ始めたので、椅子の購入を前向きに考えました。

運良く、楽天スーパーポイントで定価の60%OFFぐらいで買えたのでとてもいい買い物したなぁと思いました。

オットマンがあるとちょっとした休憩に足伸ばしてリラックスできるので、購入を考えている方はぜひオットマン付きをオススメします。

最後に

ブログを書いた時点での使用している道具ですが、今後いろいろ変わっていくと思います。
次回は「リモートワークをやってみて実際どう?」ってことをテーマに書いてみたいと思います。

では。