SlideShare una empresa de Scribd logo
1 de 15
Descargar para leer sin conexión
第18回Alfresco勉強会
Alfrescoのバックアップとリストア
2013/09/25
@_tasky
自己紹介
 私は…
◦ @_tasky
 平日は…
◦ 株式会社イージフでAlfrescoやLiferayをいじってます
 休日は…
◦ 1児(2歳♀)の父親業やってます
Contents
 はじめに
 バックアップ/リストア対象データ
 バックアップの種類
 コールドバックアップ
◦ バックアップの方法
◦ リストアの方法
 ホットバックアップ
◦ ホットバックアップのポイント
◦ バックアップの方法
◦ リストアの方法
◦ デモ
 (おまけ)Alfrescoが吹っ飛んだ時のデータ救出
はじめに
 本資料の内容はAlfrescoCommunity 4.2.dに基づいています
◦ データベースはPostgreSQLを利用(インストーラ標準)
◦ 全文検索エンジンSolrを利用(インストーラ標準)
 具体的な手順(コマンドとか)は色々はしょってたりもっと気
の利いた方法があったりしますが、最低限これでできますよ、
ということで…
 インストール方法は以下の資料を参考にしてください
http://www.slideshare.net/TasukuOtani/alfresco15-alfresco-4
http://aegif-labo.blogspot.jp/2012/03/alfresco40.html
 ここらへんの記事を参考にしています
http://wiki.alfresco.com/wiki/Backup_and_Restore
http://docs.alfresco.com/4.2/index.jsp?topic=%2Fcom.alfresco.enterprise.do
c%2Fconcepts%2Fch-backup-restore.html
http://docs.alfresco.com/4.2/index.jsp?topic=%2Fcom.alfresco.enterprise.do
c%2Fconcepts%2Fch-backup-restore.html
バックアップ/リストア対象データ
 バックアップ/リストア対象データ=Alfrescoがバックエンドで
管理するデータ
◦ データベース
 MySQL, PostgreSQL, Oracle等が管理するデータ
◦ ファイルシステム
 コンテンツのファイル実体
 ファイルシステム上に元ファイルと同バイナリで保存される(名前は
変わる)
◦ 全文検索インデックス(オプション)
 全文検索用のインデックス
 ファイルシステム上にファイルとして保存される
 データベースとファイルシステムから再構成可能であるため、オプ
ション扱い(ゼロから再構成するには時間がかかるのでバックアップ
を取る)
バックアップの種類
 コールドバックアップ
◦ アプリケーションを停止してバックアップを取得する
◦ 整合性の取れたバックアップデータを安全に取得できる
◦ サービス提供時間等、サービス品質が落ちる(と判断される)可
能性がある
 ホットバックアップ
◦ アプリケーションが稼働したままバックアップを取得する
◦ バックアップデータ自体の整合性が保証されない
◦ システム停止に伴うサービス品質低下が起こらない
※ もちろん、リストア時に整合性をとるための処理を行えば問題ありません(自動実行さ
れるものと、手動で実行する必要のあるものがあります)
コールドバックアップ
バックアップの方法
1. Alfrescoを停止する
2. 以下の3つのバックアップを取得する
◦ データベース : PostgreSQLのデータディレクトリ
 <alf_dir>/alf_data/postgresql 以下全部
◦ ファイルシステム : contentstoreディレクトリ
 <alf_dir>/alf_data/contentstore 以下全部
◦ 全文検索インデックス : solr/workspace, solr/archiveディレクトリ
 <alf_dir>/alf_data/solr/workspace
 <alf_dir>/alf_data/solr/archive
以上!とても簡単!!
※ Luceneの場合は<alf_dir>/alf_data/lucene-indexesディレクトリをバックアップします
※ データバックアップの他に、システムバックアップ(導入直後のVMスナップショットや
ハードディスクイメージ等)を取っておくと復旧が早いです
コールドバックアップ
リストアの方法
1. (必要に応じて)Alfresco/PostgreSQLを再セットアップする
2. バックアップデータを以下のディレクトリにコピーする
◦ データベース : PostgreSQLバックアップデータ
 <alf_dir>/alf_data/postgresql
◦ ファイルシステム : contentstoreバックアップデータ
 <alf_dir>/alf_data/contentstore
◦ 全文検索インデックス : Solrインデックスバックアップデータ
 <alf_dir>/alf_data/solr/workspace
 <alf_dir>/alf_data/solr/archive
 PostgreSQL, Alfrescoを起動する
以上!とっても簡単!!
※ コピー先にファイルが存在する場合は、コピー前に削除もしくは移動しておきます
※ Luceneの場合はバックアップデータを<alf_dir>/alf_data/lucene-indexesに戻します
※ Alfresco起動ユーザとバックアップ実行ユーザが異なる場合はファイルのownerに注意!
ホットバックアップ
ホットバックアップのポイント
 3つのバックアップ対象のバックアップ順序がとても重要
1. 全文検索インデックス
2. データベース
3. ファイルシステム
 全文検索インデックスはAlfrescoが定期的に(日次で)生成
するバックアップを使う
◦ 全文検索インデックス(=ただのファイル)をAlfresco起動中にコ
ピーすると、壊れたバックアップデータとなる
◦ バックアップ生成時刻はsolr/workspaceが2AM、solr/archiveが4AM
※ Luceneの場合のバックアップは3AMに生成されます
※ 時刻の変更はsolr.backup.alfresco.cronExpression, solr.backup.archive.cronExpression (Solr)、
index.backup.cronExpression (Lucene)をalfresco-global.propertiesで設定します
ホットバックアップ
バックアップの方法
1. 全文検索インデックスのバックアップを取得する
◦ <alf_dir>/alf_data/solrBackup 以下全部をコピーする
2. データベースのホットバックアップを取得する
◦ [事前準備] バックアップ実行ユーザのホームディレクトリ
に.pgpassファイルを作成しておく(chmod 0600 .pgpass)
◦ 以下のコマンドを実行してPostgreSQLのホットバックアップを
取得する(.pgpassでパスワード入力を省略できる)
3. ファイルシステムのバックアップを取得する
◦ <alf_dir>/alf_data/contentstore 以下全部をコピーする
※ .pgpassの中身は<hostname>:<port>:<dbname>:<user>:<password>
※ RDBMSの種類や構成に合わせて適宜ホットバックアップを実施してください
※ Luceneの場合は<alf_dir>/alf_data/backup-lucene-indexesをバックアップします
# /opt/alfresco-4.2.d/postgresql/bin/pg_dump -U alfresco -w --format=plain alfresco > /backup/pgdump.sql
localhost:5432:alfresco:alfresco:admin
ホットバックアップ
リストアの方法(1)
1. (必要に応じて)Alfresco/PostgreSQLを再セットアップする
2. バックアップデータを以下のディレクトリにコピーする
◦ ファイルシステム : contentstoreバックアップデータ
 <alf_dir>/alf_data/contentstore
◦ 全文検索インデックス : Solrインデックスバックアップデータ
 solrBackup/alfresco/snapshot.* ->
<alf_dir>/alf_data/solr/workspace/SpaceStore/index
 solrBackup/archive/snapshot.* ->
<alf_dir>/alf_data/solr/archive/SpaceStore/index
ホットバックアップ
リストアの方法(2)
3. PostgreSQLを起動する
4. データベースを復元する
◦ 以下のコマンドを実行してテーブルを作成する

◦ バックアップスクリプトを流す
5. Alfrescoを起動する
※ RDBMSの種類や構成に合わせて適宜リストアを実施してください
※ Luceneの場合はバックアップデータを<alf_dir>/alf_data/lucene-indexesにコピーし、
alfresco-global.propertiesでindex.recovery.mode=AUTOと設定してAlfrescoを起動します。イ
ンデックスリカバリが走るので、無事に終わったら設定を元に戻しておきます
# /opt/alfresco-4.2.d/postgresql/bin/psql
postgres=#CREATE ROLE alfresco PASSWORD'admin' LOGIN NOSUPERUSERINHERIT NOCREATEDB
NOCREATEROLE;
postgres=#CREATE DATABASEalfrescoWITH OWNER = alfresco ENCODING = 'UTF8'TEMPLATE =
template0TABLESPACE= pg_default LC_COLLATE = 'ja_JP.UTF-8' LC_CTYPE = 'ja_JP.UTF-8'CONNECTION
LIMIT = -1;
postgres=# ¥c alfresco alfresco
postgres=# ¥i /backup/pgdump.sql
ホットバックアップ
デモ
1. ホットバックアップ
2. コンテンツの追加
3. リストア
(おまけ)
Alfrescoが吹っ飛んだ時のデータ救出
 データベースとファイルシステムのバックアップデータからAlfresco内に登録されてい
たファイルを救出する
◦ ファイル実体はバイナリとしてはそのままだがファイル名が変わっている(e.g. 0f6f21e8-937b-
40fc-9efd-832d835634fc.bin)
◦ データベースで管理されている情報と突合し、元ファイル名を知る必要がある
答え
1. 同バージョンのAlfrescoを別途インストールし、バックアップデータからリストアす
る(基本的にはこちらを推奨)
2. 以下のクエリを投げ、元ファイル名と現ファイルパスの一覧を出力する(もうちょっ
と賢いクエリあるかも…)
SELECT docid.string_value, url.content_urlFROM alf_node_propertiesnp
INNER JOIN alf_content_dataacd on np.long_value = acd.id
INNER JOIN alf_content_urlurl on acd.content_url_id= url.id
INNER JOIN alf_node_propertiesdocid on docid.node_id = np.node_id
INNER JOIN alf_qnameaqn on docid.qname_id= aqn.id
WHERE aqn.local_name= "name" and aqn.ns_id= 6
商品1.jpg store://2013/9/24/11/10/2d0bd698-2846-40d7-aa08-db4e62b09d66.bin
商品4.jpg store://2013/9/24/11/10/36fd9b2f-0744-4767-804b-83fd97716fde.bin
商品5.jpg store://2013/9/24/11/10/60f7fe0a-36a8-46e5-ba82-bdc112f94366.bin
商品2.jpg store://2013/9/24/11/10/685484d9-3dba-4178-aa08-1dc7e926c3c4.bin
まとめ
 バックアップ/リストア対象データ
◦ データベース
◦ ファイルシステム
◦ 全文検索インデックス
 コールドバックアップ
◦ データディレクトリをコピーするだけ
 ホットバックアップ
◦ 全文検索インデックス→データベース→ファイルシステム
◦ 全文検索インデックスは生成されたバックアップデータ

Más contenido relacionado

La actualidad más candente

Alfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレートAlfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレートJun Terashita
 
Alfresco勉強会#26 alfresco community 5.0でssoを設定する
Alfresco勉強会#26 alfresco community 5.0でssoを設定するAlfresco勉強会#26 alfresco community 5.0でssoを設定する
Alfresco勉強会#26 alfresco community 5.0でssoを設定するTasuku Otani
 
Alfresco Bulk Import toolのご紹介
Alfresco Bulk Import toolのご紹介Alfresco Bulk Import toolのご紹介
Alfresco Bulk Import toolのご紹介MoritakaSoma
 
Alfresco勉強会#40 QRコードによる文書の振り分け
Alfresco勉強会#40 QRコードによる文書の振り分けAlfresco勉強会#40 QRコードによる文書の振り分け
Alfresco勉強会#40 QRコードによる文書の振り分けTakeshi Totani
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―shinjiigarashi
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)Hironobu Suzuki
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタはじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタSatoyuki Tsukano
 
Database on Kubernetes - HA,Replication and more -
Database on Kubernetes - HA,Replication and more -Database on Kubernetes - HA,Replication and more -
Database on Kubernetes - HA,Replication and more -t8kobayashi
 
Zabbixで学ぶ統計解析入門
Zabbixで学ぶ統計解析入門Zabbixで学ぶ統計解析入門
Zabbixで学ぶ統計解析入門Takeo Noda
 
ApexトリガのBest Practiceを目指して
ApexトリガのBest Practiceを目指してApexトリガのBest Practiceを目指して
ApexトリガのBest Practiceを目指してTakahiro Yonei
 
Amazon S3を中心とするデータ分析のベストプラクティス
Amazon S3を中心とするデータ分析のベストプラクティスAmazon S3を中心とするデータ分析のベストプラクティス
Amazon S3を中心とするデータ分析のベストプラクティスAmazon Web Services Japan
 
ASTERIA WARP開発前に知っておくべき10の鉄則(AUG関西支部編)
ASTERIA WARP開発前に知っておくべき10の鉄則(AUG関西支部編)ASTERIA WARP開発前に知っておくべき10の鉄則(AUG関西支部編)
ASTERIA WARP開発前に知っておくべき10の鉄則(AUG関西支部編)ASTERIA User Group
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようShinsuke Sugaya
 
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Shinsuke Sugaya
 
社内ドキュメント検索システム構築のノウハウ
社内ドキュメント検索システム構築のノウハウ社内ドキュメント検索システム構築のノウハウ
社内ドキュメント検索システム構築のノウハウShinsuke Sugaya
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Masahito Zembutsu
 
C# における Redis 徹底活用
C# における Redis 徹底活用C# における Redis 徹底活用
C# における Redis 徹底活用Takaaki Suzuki
 

La actualidad más candente (20)

Alfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレートAlfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレート
 
Alfresco勉強会#26 alfresco community 5.0でssoを設定する
Alfresco勉強会#26 alfresco community 5.0でssoを設定するAlfresco勉強会#26 alfresco community 5.0でssoを設定する
Alfresco勉強会#26 alfresco community 5.0でssoを設定する
 
Alfresco Bulk Import toolのご紹介
Alfresco Bulk Import toolのご紹介Alfresco Bulk Import toolのご紹介
Alfresco Bulk Import toolのご紹介
 
Alfresco勉強会#40 QRコードによる文書の振り分け
Alfresco勉強会#40 QRコードによる文書の振り分けAlfresco勉強会#40 QRコードによる文書の振り分け
Alfresco勉強会#40 QRコードによる文書の振り分け
 
Alfresco紹介
Alfresco紹介Alfresco紹介
Alfresco紹介
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタはじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタ
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
 
Database on Kubernetes - HA,Replication and more -
Database on Kubernetes - HA,Replication and more -Database on Kubernetes - HA,Replication and more -
Database on Kubernetes - HA,Replication and more -
 
Zabbixで学ぶ統計解析入門
Zabbixで学ぶ統計解析入門Zabbixで学ぶ統計解析入門
Zabbixで学ぶ統計解析入門
 
ApexトリガのBest Practiceを目指して
ApexトリガのBest Practiceを目指してApexトリガのBest Practiceを目指して
ApexトリガのBest Practiceを目指して
 
Amazon S3を中心とするデータ分析のベストプラクティス
Amazon S3を中心とするデータ分析のベストプラクティスAmazon S3を中心とするデータ分析のベストプラクティス
Amazon S3を中心とするデータ分析のベストプラクティス
 
ASTERIA WARP開発前に知っておくべき10の鉄則(AUG関西支部編)
ASTERIA WARP開発前に知っておくべき10の鉄則(AUG関西支部編)ASTERIA WARP開発前に知っておくべき10の鉄則(AUG関西支部編)
ASTERIA WARP開発前に知っておくべき10の鉄則(AUG関西支部編)
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
 
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
 
社内ドキュメント検索システム構築のノウハウ
社内ドキュメント検索システム構築のノウハウ社内ドキュメント検索システム構築のノウハウ
社内ドキュメント検索システム構築のノウハウ
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
 
C# における Redis 徹底活用
C# における Redis 徹底活用C# における Redis 徹底活用
C# における Redis 徹底活用
 

Alfresco勉強会#18 alfrescoのバックアップとリストア