Download - Alfresco勉強会#18 alfrescoのバックアップとリストア
第18回Alfresco勉強会
Alfrescoのバックアップとリストア
2013/09/25
@_tasky
自己紹介
私は…
◦ @_tasky
平日は…
◦ 株式会社イージフでAlfrescoやLiferayをいじってます
休日は…
◦ 1児(2歳♀)の父親業やってます
Contents
はじめに
バックアップ/リストア対象データ
バックアップの種類
コールドバックアップ
◦ バックアップの方法
◦ リストアの方法
ホットバックアップ
◦ ホットバックアップのポイント
◦ バックアップの方法
◦ リストアの方法
◦ デモ
(おまけ)Alfrescoが吹っ飛んだ時のデータ救出
はじめに
本資料の内容はAlfresco Community 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.doc%2Fconcepts%2Fch-backup-restore.html
http://docs.alfresco.com/4.2/index.jsp?topic=%2Fcom.alfresco.enterprise.doc%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 NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; postgres=# CREATE DATABASE alfresco WITH OWNER = alfresco ENCODING = 'UTF8' TEMPLATE = template0 TABLESPACE = 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_url FROM alf_node_properties np INNER JOIN alf_content_data acd on np.long_value = acd.id INNER JOIN alf_content_url url on acd.content_url_id = url.id INNER JOIN alf_node_properties docid on docid.node_id = np.node_id INNER JOIN alf_qname aqn 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
まとめ
バックアップ/リストア対象データ
◦ データベース
◦ ファイルシステム
◦ 全文検索インデックス
コールドバックアップ
◦ データディレクトリをコピーするだけ
ホットバックアップ
◦ 全文検索インデックス→データベース→ファイルシステム
◦ 全文検索インデックスは生成されたバックアップデータ