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

15
18Alfresco勉強会 Alfrescoのバックアップとリストア 2013/09/25 @_tasky

Upload: tasuku-otani

Post on 28-May-2015

2.186 views

Category:

Documents


2 download

TRANSCRIPT

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

第18回Alfresco勉強会

Alfrescoのバックアップとリストア

2013/09/25

@_tasky

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

自己紹介

私は…

◦ @_tasky

平日は…

◦ 株式会社イージフでAlfrescoやLiferayをいじってます

休日は…

◦ 1児(2歳♀)の父親業やってます

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

Contents

はじめに

バックアップ/リストア対象データ

バックアップの種類

コールドバックアップ

◦ バックアップの方法

◦ リストアの方法

ホットバックアップ

◦ ホットバックアップのポイント

◦ バックアップの方法

◦ リストアの方法

◦ デモ

(おまけ)Alfrescoが吹っ飛んだ時のデータ救出

Page 4: Alfresco勉強会#18 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

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

バックアップ/リストア対象データ

バックアップ/リストア対象データ=Alfrescoがバックエンドで管理するデータ

◦ データベース

MySQL, PostgreSQL, Oracle等が管理するデータ

◦ ファイルシステム

コンテンツのファイル実体

ファイルシステム上に元ファイルと同バイナリで保存される(名前は変わる)

◦ 全文検索インデックス(オプション)

全文検索用のインデックス

ファイルシステム上にファイルとして保存される

データベースとファイルシステムから再構成可能であるため、オプション扱い(ゼロから再構成するには時間がかかるのでバックアップを取る)

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

バックアップの種類

コールドバックアップ

◦ アプリケーションを停止してバックアップを取得する

◦ 整合性の取れたバックアップデータを安全に取得できる

◦ サービス提供時間等、サービス品質が落ちる(と判断される)可能性がある

ホットバックアップ

◦ アプリケーションが稼働したままバックアップを取得する

◦ バックアップデータ自体の整合性が保証されない

◦ システム停止に伴うサービス品質低下が起こらない

※ もちろん、リストア時に整合性をとるための処理を行えば問題ありません(自動実行されるものと、手動で実行する必要のあるものがあります)

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

コールドバックアップ

バックアップの方法 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スナップショットやハードディスクイメージ等)を取っておくと復旧が早いです

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

コールドバックアップ

リストアの方法 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に注意!

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

ホットバックアップ

ホットバックアップのポイント 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で設定します

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

ホットバックアップ

バックアップの方法 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

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

ホットバックアップ

リストアの方法(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

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

ホットバックアップ

リストアの方法(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

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

ホットバックアップ

デモ 1. ホットバックアップ

2. コンテンツの追加

3. リストア

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

(おまけ)

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

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

まとめ

バックアップ/リストア対象データ

◦ データベース

◦ ファイルシステム

◦ 全文検索インデックス

コールドバックアップ

◦ データディレクトリをコピーするだけ

ホットバックアップ

◦ 全文検索インデックス→データベース→ファイルシステム

◦ 全文検索インデックスは生成されたバックアップデータ