リードレプリカを使ってRDS(MySQL)をアップグレードする手順を自動化した

AWS

RDS(MySQL)を10台以上アップグレードする必要が出てきたのでこちらの手順をスクリプト化しました。 以下の公式手順を自動化したものになります。 MySQL DB エンジンのアップグレード - Amazon Relational Database Service こちらの記事も参考にさせていただ…

Lucene/Solrのコードリーディング時に必携の検索リクエストのライフサイクル説明資料

Lucene/Solr Revolution 2017の1資料です。 今では大分慣れてきたものの、最初にLucene-Solrのコード読むことが必要になった時は、Solrそのものも良くわかっておらず、エラーのスタックトレースから頑張って一つ読み解いていきました。とても大変だったのを…

Swarmの運用用にdocker statsコマンドを監視するMuninのplugin作った

最近、Docker Swarmの運用を始めて一台のマシンに存在するコンテナが増えてきたので、監視用のmuninのプラグイン作りました。 取得できる項目 docker statsと同等の情報が取得できます。NET I/OとBLOCK I/Oは積算値ではなく、前回との差分値を出力します。 C…

AWS ALB配下のノードが全てUnhealtyになった場合、リクエストが全ターゲットにルーティングされます

AWS

開発環境のALB配下唯一のEC2インスタンスがUnhealtyなのに、普通にアクセスできるので調べてみたらこんな挙動だということが。全く知りませんでした。sorry pageとか最低限のリカバリにはつなげやすいのかな。 ただ、監視をゆるめている開発や検証環境だと全…

Muninのプラグイン書くのに役立つ環境変数たち

Muninのプラグインを何本も書いてきましたが、最近になってプラグイン書くのに役立つ環境変数があることを知りました。 実際の変数を出力したければ以下のようなファイル作って munin-run 実行してみるだけです。 $ cat /etc/munin/plugins/test #!/bin/bash…

AmazonLinuxの古いyumリポジトリを利用したい時の方法

AWS

掲題の件、備忘メモ。 まず、以下のURLで リリースノート の項目を見るとリリースの一覧があるのでリリースの名前がわかります。 https://aws.amazon.com/jp/amazon-linux-ami/ だいたい3月と9月に出るようなので2017.03とか2017.09とか。今現在の最新が2017…

Apacheリバースプロキシにおけるスラッシュと%2F問題はまったポイント

Apacheと%2Fでを調べると沢山出てくる内容なのですが、ApacheはURLから取得されるPATH_INFO変数に / のエンコードである %2F があると404を返します。 これ自体はAllowEncodedSlashesというパラメータをOnにしてやると処理できるようになります。 <VirtalHost> ... Allow</virtalhost>…

AWS S3を保存先としたプライベートなDocker Registryを公式コンテナから簡単導入

タイトルの通り。作業メモです。 テスト用イメージ作成 テストで利用するイメージを作ります。 Dockerfile作って。 cat <<EOF > Dockerfile from alpine:latest ENTRYPOINT ["echo","myimage"] EOF ビルドして。 docker build --no-cache -t myimage . ビルドされ</eof>…

AWS ALBのアクセスログ分析環境をDockernizeしてローカルPCで実行できるようにした

AWS ALBのアクセスログをサーバ上のBananaで分析していたのですが、Docker使って手元のPC環境でも簡単に実行できるようにしました。 github.com 使い方 Repositoryをダウンロード git clone https://github.com/yomon8/alb-log-analyzer.git cd alb-log-anal…

ALB/ELBのアクセスログを時間指定でダウンロードして標準出力してgrep検索可能にするツール作った

AWS ALBやELBのアクセスログですが、5分毎に出力していると大量のファイルになります。 調査するにしても複数の細かく分かれたファイルを結合したり、JSTとUTCの差を失念していて勘違いしたり、S3のフォルダ構造深かったり、ALBのアクセスログはgzip形式なの…

引数で渡した複数のストリームを行単位でマージしリアルタイム出力するコマンド作った

ツール書きました。 github.com 例えば以下のような3つのコマンドを同時に実行して、結果をリアルタイムでマージして出力したいとします。 1 (sleep 1;echo SlowSlow) 2 (sleep 0;for i in $(seq 1 25);do printf aaa;echo;done) 3 (sleep 0;for i in $(seq …

AWS CLIの利用方法まとめ(主にqueryオプションとTips)

AWS

queryオプションを主にaws cliの使い方をメモしておきます。随時更新予定です。 queryオプション query指定無しだと 基本の使い方 出力形式を知る queryを使ってみる 関数(Functions) contains join starts_withとends_with to_string sort_by length Tips J…

コマンドラインでEC2のコンソール画面テキスト(システムログ)を取得してgrep分析

AWS

EC2が原因不明で接続不可になることは以外に多いです。そんな時にVMWareやHyper-V、KVMみたいにコンソール画面に何が出ているのか確認したくなります。 AWSマネジメントコンソールから「インスタンスの設定」>「システムログの取得」で以下のような画面が取…

【AWS】ALBからCLIでEC2切り離しderegister-targetsはGracefulじゃない?

AWS

ALBからEC2を切り離す時に使う aws elbv2 deregister-targets のコマンド、大量のアクセスがあってもエラーを返すことなく切り離すことができると思っていました。 ① EC2をALBより切り離し aws elbv2 deregister-targets --target-group-arn target_group_ar…

【Solrエラー対応】TooManyClauses: maxClauseCount is set to 1024

Solrで大量のAND条件でクエリ投げた場合などに以下のようなエラーが発生する場合があります。これを調査しました。 org.apache.lucene.search.BooleanQuery$TooManyClauses: maxClauseCount is set to 1024 BooleanQueryの制限値があるというエラーなのです…

【Solrエラー対応】LukeRequestHandler Error getting file length for [segments_N]の警告について

事象 題名の通りSolr6系統で以下の警告が出る場合があります。 LukeRequestHandler Error getting file length for [segments_N] StackTraceの例: java.nio.file.NoSuchFileException: /var/solr_node_8983/data/mycore/data/index/segments_3 at sun.nio.fs…

AWS ALBに長いリクエストURLでGETすると414や500でエラーになる

AWS

AWS ALB(Application Load Balancer)に長いURLリクエスト投げてみたら、以下のテーブルのように、ある長さのリクエストからエラーが出ることを発見しました。 URLの長さ(Byte) HTTPレスポンスコード 〜16446 200 OK 16447 500 Internal Server Error 16448〜…

Lucene/Solrのパフォーマンスチューニングした内容をまとめてみた

Solrのパフォーマンスチューニングを一通り行ったので、忘れないうちにまとめてみたいと思います。Lucene/Solrのバージョン6系統になら当てはまると思います。 インデクシングのパフォーマンスにも関係するところはありますが、主に検索側のパフォーマンスに…

【AWS】ALBから自身(EC2)を切り離したり登録するbashスクリプト

AWS

ALBはELBと異なり複雑な構成も取れるので、必要に応じて修正して使う前提で、LBとTargetGroupとListenerが1:1:1の基本構成で作りました。 EC2をALBから切り離し ほとんどをAPIから取得する構成にしましたが、複雑な構成なら変数として持った方が良いと思われ…

Lucene/Solr DocValuesについて調べたことをまとめてみた

DocValuesとStored&FieldCache StoredされたFieldの動き Storedの弱点とそれを補うFieldCacheの役割 DocValuesについて DocValues の注意点 Solrバージョン毎の機能制限を確認する MultiValueの順序保証 DocValuesとStoredの設定によるクエリ挙動の違い 一度…

Lucene/Solr インデクシングの簡単なデバッグログ出力の設定方法

Solrを使っいると、Luceneインデクシングの内部仕様を調べることが出てくると思っています。 Luceneのインデクシングデバッグ ということでLucene in Action読んでいたところ、「2.12. Debugging indexing」という項目見つけました。 Lucene in Action作者: …

Luceneの類似画像検索プラグインLIREのデモアプリを動かしてみた

動かしてみたのと、その時調べたことをざっくりとメモ書き。 前提ソフトウェア Javaの1.6以降 gradleをインストールしておくと簡単です gradleはmac なら以下のコマンドで入れられます。Windowsでもググればわかりやすい記事が沢山出るはずです。 brew insta…

MySQLのマイナーバージョン指定したYumインストール・更新

5.7.18 がこの記事書いている時点のMySQL 5.7の最新になります。5.7以外にも前の5.6をインストールしたいなどという時には以下の記事の手順などを参考にさせていただけば問題無くインストールできると思います。 CentOS6.8にyumでMySQLをバージョン指定イン…

【Linux I/Oチューニングに便利】vmtouchでファイルがキャッシュに乗っているか確認

LinuxでI/Oと格闘していると、重要なファイルがどのタイミングでキャッシュに乗ってくるかは死活問題になります。 このファイルってどれくらいキャッシュに乗っているの?という時に便利な vmtouch というツールがあったのでご紹介。 導入方法 導入はいたっ…

Solrのキャッシュについて調査したことまとめ

モニタリング方法 キャッシュの実装の種類 LRUCache と FastLRUCache LFUCache LRUとLFUのアルゴリズムの違い キャッシュの種類 種類 設定項目 FastLRUCacheとLFUCacheのキャッシュサイズ制御の動き filterCache useFilterForSortedQuery queryResultCache q…

Golangの練習で簡単な構文解析型のCUI電卓作ってみた

1ヵ月前くらいからGolangを書き始めています。さきほど練習で書いたプログラムを技術向上のためにもここにメモ。 仕様 利用できる変数はa〜zの26個 a=10+20 の形で演算と代入処理可能 ( ) + - * /の演算子を利用 ? で結果出力する 練習なので基本パッケージ…

Redis監視するためのNagiosプラグイン作ってみた(Golang)

Nagiosの監視しようとRedisプラグイン探してみたら以下が見つかりました。 check_redis.pl - Nagios Exchange ただ、PerlやPHPが必要だったので、バイナリファイルを置くだけで動くGoでプラグインを作ってみました。 コマンドのオプション オプション 説明 -…

RedisからTTL(Expire)設定されていないKeyの一覧を取得する

TTLが設定されていないキーの一覧を取得する方法です。 以下で言えば、keys=6328703 と expires=6328701 の差分の2件を知りたい場合です。 $ redis-cli info keyspace # Keyspace db0:keys=6328703,expires=6328701,avg_ttl=9169857 bashで実装 少量のデータ…

mysqlコマンドで大きいデータをパイプやリダイレクト連携するとメモリ容量が足りなくなる

以下のようにmysqlコマンドをパイプやリダイレクトで連携させたら、mysqlコマンドのメモリ使用量が急増しました。 動きを見ているとバッファリングされてしまっているみたい。全部結果を溜め込んでから、後ろに流すような動きです。 mysql $option -e "selec…

Apacheのmod_proxy_balancerのbybusynessに振り分けについて調べてみた

Apacheのロードバランシングモジュールである mod_proxy_balancer の振り分けアルゴリズムの bybusyness について調べた内容です。 byrequestsとbybusyness bybusynessの使いどころ 検証による動きの比較 シナリオ① 特定のサーバが遅くなる時を再現 シナリオ…