SlideShare a Scribd company logo
株式会社ドワンゴモバイル 
西田和史@kbigwheel
前置き 
 撮影・情報共有自由 
 後日スライドはネット上で共有します
Snapshot & Restore API 
 Elasticsearch 1.0.0で追加された機能 
 バージョン1.0.0未満 
○ Indexをバックアップするためには 
クラスタの停止が必要 
 バージョン1.0.0以降 
○ Indexのバックアップが無停止で可能!
しかし、 
 バックアップからリストアするためには 
対象のIndexを一旦削除もしくはcloseする 
必要あり 
 普通に実行すると無停止でリストアするこ 
とはできない! 
 そこで本LTでは無停止でリストアするテクニッ 
クを紹介
典型的シナリオ 
1. 音楽サイトAでの検索結果が何かおかしい… 
 「嵐」で検索してジャニーズのグループがでな 
い!やばい! 
2. Indexを今朝の状態に戻したいが、 
普通にRestore APIを叩こうとすると 
対象のIndexを一度closeする必要がある 
 一時的にまったく検索できなくなる 
なるべく避けたい
なんとか今の検索は動作させつつ、 
バックグラウンドで 
リストア作業を行いたい!
Index Aliases機能とリストア時のリネー 
ムを組み合わせて無停止で復元しよう! 
 次の2つを組み合わせる 
1. Index aliases - Indexへ別名を与える機能 
○ 例: インデックス“artist20140716” に対して 
エイリアス“artist” を付与 
http://localhost:9200/artist20140716/artist/1234 
http://localhost:9200/artist/artist/1234 
1. リストアするindexをリネーム可能 
全く等価 
になる! 
このようにprefixや 
suffixをつけることが 
可能!
事前準備 
1. indexは日付、versionなどのサフィックス 
をつけて作成 
 artist_20140716, product_v5 
2. 各indexにサフィックスを削除した文字列で 
aliasを付与 
 artist_20140716 → artist, product_v5 → product 
3. 検索は必ずalias名を通して実行 
http://{{domain}}/artist_20140716/artist/_search?q=水樹奈々 
http://{{domain}}/artist/artist/_search?q=水樹奈々
障害時の対応手順(1/2) 
1. リストアAPIでスナップショットを復元 
$ curl -XPOST "localhost:9200/_snapshot/my_backup/full_20140716/_restore?pretty" -d '{ 
> "indices": “artist_20140716", 
> "ignore_unavailable": "true", 
> "include_global_state": false, 
> "rename_pattern": "artist_20140716", 
> "rename_replacement": “artist_20140716_restored“ 
> }‘ && curl -XPOST "localhost:9200/_aliases" -d '{ 
> "actions" : [ 
> { "remove" : { "index" : "artist_20140716_restored", "alias" : “artist" } } 
> ] 
> }' 
Indexをリネーム 
ポイント:リストアAPIはエイリアスも復 
元してしまうので、即座に復元中のIndex 
に付いているエイリアスは削除する 
(これを忘れるとそのエイリアス経由で 
の検索がすべて500エラーになる) 
2. Elasticsearch-Headなどで 
リストアしたIndexがGreenに 
なるまで待機
障害時の対応手順(2/2) 
3. リストア完了後、壊れたIndexと 
リストアしたIndexをスイッチする 
$ curl -XPOST "localhost:9200/_aliases" -d ' 
> { 
> "actions" : [ 
> { "remove" : { "index" : “artist_20140716", "alias" : “artist" } }, 
> { "add" : { "index" : "artist_20140716_restored", "alias" : “artist" } } 
> ] 
> }' 
4. 動作確認後、不要であれば壊れたIndex 
を削除
補足情報 
 バージョン1.3.0からaliasなしでの 
restoreが可能になった少しだけ手順が 
楽になる 
$ curl -XPOST "localhost:9200/_snapshot/my_backup/full_20140716/_restore?pretty" -d '{ 
> "indices": “artist_20140716", 
> "ignore_unavailable": "true", 
> "include_global_state": false, 
> "rename_pattern": "artist_20140716", 
> "rename_replacement": “artist_20140716_restored“ 
> }‘ && curl -XPOST "localhost:9200/_aliases" -d '{ 
> "actions" : [ 
> { "remove" : { "index" : "artist_20140716_restored", "alias" : “artist" } } 
> ] 
> }' 
$ curl -XPOST "localhost:9200/_snapshot/my_backup/full_20140716/_restore?pretty" -d '{ 
> "indices": “artist_20140716", 
> "ignore_unavailable": "true", 
> "include_global_state": false, 
> "rename_pattern": "artist_20140716", 
> "rename_replacement": “artist_20140716_restored“, 
> “include_aliases": false 
> }‘
検索のダウンタイム0でバックアップからindexをリストアする方法

More Related Content

What's hot

Asakusa fwはじめの一歩・改
Asakusa fwはじめの一歩・改Asakusa fwはじめの一歩・改
Asakusa fwはじめの一歩・改
鉄平 土佐
 
ASTERFalseColorImage1
ASTERFalseColorImage1ASTERFalseColorImage1
ASTERFalseColorImage1
NakamuraShinsaku
 
DBFluteを用いて開発されている全文検索システムFess
DBFluteを用いて開発されている全文検索システムFessDBFluteを用いて開発されている全文検索システムFess
DBFluteを用いて開発されている全文検索システムFess
Shinsuke Sugaya
 
ASTERFalseColorImage2
ASTERFalseColorImage2ASTERFalseColorImage2
ASTERFalseColorImage2
NakamuraShinsaku
 
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
Shinsuke Sugaya
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
Shinsuke Sugaya
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
Shinsuke Sugaya
 
Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係
hishidama
 
polidog に elasticsearch を教える
polidog に elasticsearch を教えるpolidog に elasticsearch を教える
polidog に elasticsearch を教える
ftnk
 
5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境
yoyamasaki
 
Zabbix Conference Japan 2018 LT Configure by Ansible
Zabbix Conference Japan 2018 LT Configure by AnsibleZabbix Conference Japan 2018 LT Configure by Ansible
Zabbix Conference Japan 2018 LT Configure by Ansible
Yukiya Hayashi
 
ActiveStorage::Analyzer
ActiveStorage::AnalyzerActiveStorage::Analyzer
ActiveStorage::Analyzer
Nozomu KURASAWA
 
traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験
Toshio Ehara
 
Open Stack Day - Ansibleによる環境構築の自動化
Open Stack Day - Ansibleによる環境構築の自動化Open Stack Day - Ansibleによる環境構築の自動化
Open Stack Day - Ansibleによる環境構築の自動化
shirou wakayama
 
Solrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ FessSolrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ FessShinsuke Sugaya
 
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
Kentaro Yoshida
 
オフィスに1台!全文検索Fess
オフィスに1台!全文検索Fessオフィスに1台!全文検索Fess
オフィスに1台!全文検索Fess
Shinsuke Sugaya
 
solr勉強会資料
solr勉強会資料solr勉強会資料
solr勉強会資料
Atsushi Takayasu
 
インターンシップの学生にお届けしようとしたScalaの文法(初級編)
インターンシップの学生にお届けしようとしたScalaの文法(初級編)インターンシップの学生にお届けしようとしたScalaの文法(初級編)
インターンシップの学生にお届けしようとしたScalaの文法(初級編)
Kentaro Masuda
 
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステム
Shinsuke Sugaya
 

What's hot (20)

Asakusa fwはじめの一歩・改
Asakusa fwはじめの一歩・改Asakusa fwはじめの一歩・改
Asakusa fwはじめの一歩・改
 
ASTERFalseColorImage1
ASTERFalseColorImage1ASTERFalseColorImage1
ASTERFalseColorImage1
 
DBFluteを用いて開発されている全文検索システムFess
DBFluteを用いて開発されている全文検索システムFessDBFluteを用いて開発されている全文検索システムFess
DBFluteを用いて開発されている全文検索システムFess
 
ASTERFalseColorImage2
ASTERFalseColorImage2ASTERFalseColorImage2
ASTERFalseColorImage2
 
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
 
Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係
 
polidog に elasticsearch を教える
polidog に elasticsearch を教えるpolidog に elasticsearch を教える
polidog に elasticsearch を教える
 
5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境
 
Zabbix Conference Japan 2018 LT Configure by Ansible
Zabbix Conference Japan 2018 LT Configure by AnsibleZabbix Conference Japan 2018 LT Configure by Ansible
Zabbix Conference Japan 2018 LT Configure by Ansible
 
ActiveStorage::Analyzer
ActiveStorage::AnalyzerActiveStorage::Analyzer
ActiveStorage::Analyzer
 
traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験
 
Open Stack Day - Ansibleによる環境構築の自動化
Open Stack Day - Ansibleによる環境構築の自動化Open Stack Day - Ansibleによる環境構築の自動化
Open Stack Day - Ansibleによる環境構築の自動化
 
Solrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ FessSolrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ Fess
 
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
 
オフィスに1台!全文検索Fess
オフィスに1台!全文検索Fessオフィスに1台!全文検索Fess
オフィスに1台!全文検索Fess
 
solr勉強会資料
solr勉強会資料solr勉強会資料
solr勉強会資料
 
インターンシップの学生にお届けしようとしたScalaの文法(初級編)
インターンシップの学生にお届けしようとしたScalaの文法(初級編)インターンシップの学生にお届けしようとしたScalaの文法(初級編)
インターンシップの学生にお届けしようとしたScalaの文法(初級編)
 
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステム
 

Viewers also liked

ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
Naoyuki Yamada
 
elasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたelasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみた
furandon_pig
 
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjpElasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Yahoo!デベロッパーネットワーク
 
Elasticsearchを用いたはてなブックマークのトピック生成
Elasticsearchを用いたはてなブックマークのトピック生成Elasticsearchを用いたはてなブックマークのトピック生成
Elasticsearchを用いたはてなブックマークのトピック生成
Shunsuke Kozawa
 
ElasticSearchでいろいろやってる話
ElasticSearchでいろいろやってる話ElasticSearchでいろいろやってる話
ElasticSearchでいろいろやってる話
Shinya Takara
 
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015
Shunsuke Kozawa
 
はてなブックマークに基づく関連記事レコメンドエンジンの開発
はてなブックマークに基づく関連記事レコメンドエンジンの開発はてなブックマークに基づく関連記事レコメンドエンジンの開発
はてなブックマークに基づく関連記事レコメンドエンジンの開発
Shunsuke Kozawa
 
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Yasushi Hara
 

Viewers also liked (8)

ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
 
elasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたelasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみた
 
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjpElasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
 
Elasticsearchを用いたはてなブックマークのトピック生成
Elasticsearchを用いたはてなブックマークのトピック生成Elasticsearchを用いたはてなブックマークのトピック生成
Elasticsearchを用いたはてなブックマークのトピック生成
 
ElasticSearchでいろいろやってる話
ElasticSearchでいろいろやってる話ElasticSearchでいろいろやってる話
ElasticSearchでいろいろやってる話
 
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015
 
はてなブックマークに基づく関連記事レコメンドエンジンの開発
はてなブックマークに基づく関連記事レコメンドエンジンの開発はてなブックマークに基づく関連記事レコメンドエンジンの開発
はてなブックマークに基づく関連記事レコメンドエンジンの開発
 
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
 

Similar to 検索のダウンタイム0でバックアップからindexをリストアする方法

Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみたAlfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
Tasuku Otani
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べMasahiro Nagano
 
CleanArchitecture with AssemblyDefinition in unity
CleanArchitecture with AssemblyDefinition in unityCleanArchitecture with AssemblyDefinition in unity
CleanArchitecture with AssemblyDefinition in unity
NakanoYosuke1
 
Searchable Snapshot でコスト削減
Searchable Snapshot でコスト削減Searchable Snapshot でコスト削減
Searchable Snapshot でコスト削減
shinhiguchi
 
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
Ryusuke Kajiyama
 
OpenStackをさらに”使う”技術 概要と基礎操作
OpenStackをさらに”使う”技術 概要と基礎操作OpenStackをさらに”使う”技術 概要と基礎操作
OpenStackをさらに”使う”技術 概要と基礎操作
irix_jp
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517akirahiguchi
 
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworkerおれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
Toshiaki Maki
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Masahiro Nagano
 
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
Insight Technology, Inc.
 
はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタはじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタ
Satoyuki Tsukano
 
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!
Yoichi Kawasaki
 
activerecord-oracle_enhanced-adapterのご紹介
activerecord-oracle_enhanced-adapterのご紹介activerecord-oracle_enhanced-adapterのご紹介
activerecord-oracle_enhanced-adapterのご紹介Kevin Toyoda
 
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギインメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギ
Masaki Yamakawa
 
LIFULL HOME'S「かざして検索」リリースの裏側
LIFULL HOME'S「かざして検索」リリースの裏側LIFULL HOME'S「かざして検索」リリースの裏側
LIFULL HOME'S「かざして検索」リリースの裏側
Takuro Hanawa
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
dcubeio
 
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
Takahiro Iwase
 
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
Kouhei Sutou
 

Similar to 検索のダウンタイム0でバックアップからindexをリストアする方法 (19)

Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみたAlfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べ
 
CleanArchitecture with AssemblyDefinition in unity
CleanArchitecture with AssemblyDefinition in unityCleanArchitecture with AssemblyDefinition in unity
CleanArchitecture with AssemblyDefinition in unity
 
Searchable Snapshot でコスト削減
Searchable Snapshot でコスト削減Searchable Snapshot でコスト削減
Searchable Snapshot でコスト削減
 
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
 
OpenStackをさらに”使う”技術 概要と基礎操作
OpenStackをさらに”使う”技術 概要と基礎操作OpenStackをさらに”使う”技術 概要と基礎操作
OpenStackをさらに”使う”技術 概要と基礎操作
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517
 
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworkerおれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
 
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
 
はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタはじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタ
 
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!
 
activerecord-oracle_enhanced-adapterのご紹介
activerecord-oracle_enhanced-adapterのご紹介activerecord-oracle_enhanced-adapterのご紹介
activerecord-oracle_enhanced-adapterのご紹介
 
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギインメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギ
 
LIFULL HOME'S「かざして検索」リリースの裏側
LIFULL HOME'S「かざして検索」リリースの裏側LIFULL HOME'S「かざして検索」リリースの裏側
LIFULL HOME'S「かざして検索」リリースの裏側
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
 
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
 
20120721_ishkawa
20120721_ishkawa20120721_ishkawa
20120721_ishkawa
 

Recently uploaded

エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
Toru Miyahara
 
「VRC海のおはなし会_深海探査とロボットのお話」発表資料
「VRC海のおはなし会_深海探査とロボットのお話」発表資料「VRC海のおはなし会_深海探査とロボットのお話」発表資料
「VRC海のおはなし会_深海探査とロボットのお話」発表資料
Yuuitirou528 default
 
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
Masatsugu Matsushita
 
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
miyp
 
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHubCompute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
K Kinzal
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
Toru Miyahara
 
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Toru Miyahara
 

Recently uploaded (7)

エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
 
「VRC海のおはなし会_深海探査とロボットのお話」発表資料
「VRC海のおはなし会_深海探査とロボットのお話」発表資料「VRC海のおはなし会_深海探査とロボットのお話」発表資料
「VRC海のおはなし会_深海探査とロボットのお話」発表資料
 
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
 
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
 
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHubCompute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
 
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
 

検索のダウンタイム0でバックアップからindexをリストアする方法

  • 2. 前置き  撮影・情報共有自由  後日スライドはネット上で共有します
  • 3. Snapshot & Restore API  Elasticsearch 1.0.0で追加された機能  バージョン1.0.0未満 ○ Indexをバックアップするためには クラスタの停止が必要  バージョン1.0.0以降 ○ Indexのバックアップが無停止で可能!
  • 4. しかし、  バックアップからリストアするためには 対象のIndexを一旦削除もしくはcloseする 必要あり  普通に実行すると無停止でリストアするこ とはできない!  そこで本LTでは無停止でリストアするテクニッ クを紹介
  • 5. 典型的シナリオ 1. 音楽サイトAでの検索結果が何かおかしい…  「嵐」で検索してジャニーズのグループがでな い!やばい! 2. Indexを今朝の状態に戻したいが、 普通にRestore APIを叩こうとすると 対象のIndexを一度closeする必要がある  一時的にまったく検索できなくなる なるべく避けたい
  • 7. Index Aliases機能とリストア時のリネー ムを組み合わせて無停止で復元しよう!  次の2つを組み合わせる 1. Index aliases - Indexへ別名を与える機能 ○ 例: インデックス“artist20140716” に対して エイリアス“artist” を付与 http://localhost:9200/artist20140716/artist/1234 http://localhost:9200/artist/artist/1234 1. リストアするindexをリネーム可能 全く等価 になる! このようにprefixや suffixをつけることが 可能!
  • 8. 事前準備 1. indexは日付、versionなどのサフィックス をつけて作成  artist_20140716, product_v5 2. 各indexにサフィックスを削除した文字列で aliasを付与  artist_20140716 → artist, product_v5 → product 3. 検索は必ずalias名を通して実行 http://{{domain}}/artist_20140716/artist/_search?q=水樹奈々 http://{{domain}}/artist/artist/_search?q=水樹奈々
  • 9. 障害時の対応手順(1/2) 1. リストアAPIでスナップショットを復元 $ curl -XPOST "localhost:9200/_snapshot/my_backup/full_20140716/_restore?pretty" -d '{ > "indices": “artist_20140716", > "ignore_unavailable": "true", > "include_global_state": false, > "rename_pattern": "artist_20140716", > "rename_replacement": “artist_20140716_restored“ > }‘ && curl -XPOST "localhost:9200/_aliases" -d '{ > "actions" : [ > { "remove" : { "index" : "artist_20140716_restored", "alias" : “artist" } } > ] > }' Indexをリネーム ポイント:リストアAPIはエイリアスも復 元してしまうので、即座に復元中のIndex に付いているエイリアスは削除する (これを忘れるとそのエイリアス経由で の検索がすべて500エラーになる) 2. Elasticsearch-Headなどで リストアしたIndexがGreenに なるまで待機
  • 10. 障害時の対応手順(2/2) 3. リストア完了後、壊れたIndexと リストアしたIndexをスイッチする $ curl -XPOST "localhost:9200/_aliases" -d ' > { > "actions" : [ > { "remove" : { "index" : “artist_20140716", "alias" : “artist" } }, > { "add" : { "index" : "artist_20140716_restored", "alias" : “artist" } } > ] > }' 4. 動作確認後、不要であれば壊れたIndex を削除
  • 11. 補足情報  バージョン1.3.0からaliasなしでの restoreが可能になった少しだけ手順が 楽になる $ curl -XPOST "localhost:9200/_snapshot/my_backup/full_20140716/_restore?pretty" -d '{ > "indices": “artist_20140716", > "ignore_unavailable": "true", > "include_global_state": false, > "rename_pattern": "artist_20140716", > "rename_replacement": “artist_20140716_restored“ > }‘ && curl -XPOST "localhost:9200/_aliases" -d '{ > "actions" : [ > { "remove" : { "index" : "artist_20140716_restored", "alias" : “artist" } } > ] > }' $ curl -XPOST "localhost:9200/_snapshot/my_backup/full_20140716/_restore?pretty" -d '{ > "indices": “artist_20140716", > "ignore_unavailable": "true", > "include_global_state": false, > "rename_pattern": "artist_20140716", > "rename_replacement": “artist_20140716_restored“, > “include_aliases": false > }‘