paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

LXD環境のFirefly iiiのリカバリテストをする

LXDで運用しているFirefly iiiですが、前回コンテナのイメージ作成を行いました。
今回はイメージからのデプロイと実際のデータをリカバリできるかやってみます。

LXDコンテナのカスタムイメージを作成する - paloma blog

データベースバックアップ

王道にmysqldumpでやります。

ユーザは私しかいないですが一応テーブルロックしてdumpします。

定期的にやりたいのでスクリプトにしました。

masashi@PC-ubuntu:~/scripts$ cat fireflybkup.sh 
#!/bin/bash

path=/home/masashi/backup/firefly/

lxc exec firefly -- mysqldump --single-transaction -u fireflyiii -p<パスワード> -t fireflyiii > $path/fireflyiii-db.sql

実行します。

masashi@PC-ubuntu:~/scripts$ bash fireflybkup.sh 

バックアップディレクトリに作成されてます。

masashi@PC-ubuntu:~/scripts$ ls /home/masashi/backup/firefly/ -ltr
合計 340
drwxr-xr-x 9 masashi masashi   4096 1116  2019 nginx
-rw-r--r-- 1 masashi masashi    269 1120  2020 hosts
-rw-rw-r-- 1 masashi masashi 234853  620 15:18 fireflyiii-db.sql

イメージのデプロイ

前回作成のイメージからリカバリ用のインスタンスを作成します。

masashi@PC-ubuntu:~$ lxc image list
+---------------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+
|     ALIAS     | FINGERPRINT  | PUBLIC |                 DESCRIPTION                 | ARCHITECTURE |   TYPE    |   SIZE   |         UPLOAD DATE          |
+---------------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+
| firefly-image | 754669c7e39f | no     | Ubuntu 20.04 LTS server (20210201)          | x86_64       | CONTAINER | 873.23MB | May 8, 2021 at 2:32am (UTC)  |
+---------------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+
|               | 9ba1aa2f5dde | no     | ubuntu 20.04 LTS amd64 (release) (20210610) | x86_64       | CONTAINER | 360.92MB | Jun 12, 2021 at 5:36am (UTC) |
+---------------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+
masashi@PC-ubuntu:~$ lxc launch image:firefly-image recoverytest
Error: The remote "image" doesn't exist

イメージはローカルマシンにあるんですが、imageをつけるとリモートサーバを探してしまう様ですね。

masashi@PC-ubuntu:~$ lxc launch firefly-image recoverytest
Creating recoverytest
Starting recoverytest                      

これでOK。
リカバリインスタンスできてます。

masashi@PC-ubuntu:~$ lxc list  
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
|      NAME      |  STATE  |        IPV4         |                     IPV6                      |   TYPE    | SNAPSHOTS |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| debian         | RUNNING | 10.28.57.205 (eth0) | fd42:24ab:b835:ae42:216:3eff:fe98:2560 (eth0) | CONTAINER | 0         |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| dokuwiki       | RUNNING | 10.28.57.198 (eth0) | fd42:24ab:b835:ae42:216:3eff:fe2e:4f6a (eth0) | CONTAINER | 0         |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| firefly        | RUNNING | 10.28.57.107 (eth0) | fd42:24ab:b835:ae42:216:3eff:fea8:7ef0 (eth0) | CONTAINER | 1         |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| firefly-backup | STOPPED |                     |                                               | CONTAINER | 0         |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| lxd-proxy      | RUNNING | 10.28.57.177 (eth0) | fd42:24ab:b835:ae42:216:3eff:fecd:d475 (eth0) | CONTAINER | 0         |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| recoverytest   | RUNNING | 10.28.57.247 (eth0) | fd42:24ab:b835:ae42:216:3eff:fe7f:7b52 (eth0) | CONTAINER | 0         |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+

リカバリsqlインポート

デプロイしたインスタンスはサービス起動済みなのでそのままリカバリsqlを流し込みます。

まずはインスタンスにファイルを配置。

masashi@PC-ubuntu:~$ lxc file push backup/firefly/fireflyiii-db.sql recoverytest/root/

ファイルも移動完了。

masashi@PC-ubuntu:~$ lxc exec recoverytest -- ls /root
fireflyiii-db.sql  snap

ここから先はコンテナに入ります。

masashi@PC-ubuntu:~$ lxc exec recoverytest -- /bin/bash

作成済みのデータベースがありますね。
中身はイメージ作成時に初期化済みです。

root@recoverytest:~# mysql -u fireflyiii -p -e 'show databases;'
Enter password: 
+--------------------+
| Database           |
+--------------------+
| fireflyiii         |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

データをインポートしてみます。

root@recoverytest:~# mysql -u fireflyiii -p -t fireflyiii < /root/fireflyiii-db.sql 
Enter password: 
ERROR 1062 (23000) at line 42: Duplicate entry '1' for key 'PRIMARY'
root@recoverytest:~# 

主キーが重複で弾かれてしまいました…。
内容は後から確認するとして上書きしたらいける?

root@recoverytest:~# mysql --force -u fireflyiii -p -t fireflyiii < /root/fireflyiii-db.sql 
Enter password: 
ERROR 1062 (23000) at line 42: Duplicate entry '1' for key 'PRIMARY'
ERROR 1062 (23000) at line 163: Duplicate entry '1' for key 'PRIMARY'
ERROR 1062 (23000) at line 246: Duplicate entry '1' for key 'PRIMARY'
ERROR 1062 (23000) at line 460: Duplicate entry '1' for key 'PRIMARY'
ERROR 1062 (23000) at line 551: Duplicate entry '1' for key 'PRIMARY'
ERROR 1062 (23000) at line 581: Duplicate entry '1' for key 'PRIMARY'
root@recoverytest:~# 

引き続き重複エラーが出ていますが、コマンドは終了したのでアクセスしてみましょう。
エラーの件、データベースは本業ではないですが構造についてもっと勉強します。

アクセスしてみます

コンテナのホスト機からアクセスしてみます。

アクセスできましたが何かインストールかアップグレードをやってます。

f:id:paloma69:20210620182228p:plain

完了後いつものアカウントでログインしてみます。

OK。
本番のFireflyと同じ画面です。(資産は伏せさせていただきます)

f:id:paloma69:20210620182253p:plain

昨日支払ったゲーセンの内容も反映されています。

f:id:paloma69:20210620184107p:plain

リカバリ成功です!

まとめ

家の環境だと壊れてもいいかということで作って終わりのサーバが多いのですが、
Fireflyは気に入っていて壊れたら困るということで今回のリカバリテストを行いました。

DBの重複エラーは出ないのが理想ですが、とりあえずリカバリはできたのでいつ壊れてもOKですね。

コンテナ環境なのでシングルのホスト機が壊れたらおしまいなのですが、
イメージもエクスポートしてあるのでその際は他のLXD環境を作って凌ごうと思います。