きゅあったーでロールバックした話
前略
鴉河雛です
というわけで、きゅあったーで発生していたアカウント重複問題。
こちらを解決するにはDBを直接いじるか、ロールバックするかその2択しかなくなってしまったので現在の技術力からロールバックを選択しました。
このバグ?が原因でSidekiqでは100件を超えるエラーが滞留していて、それも時間がたつにつれてどんどん増えてくる・・・
ちなみに、主に発生していたエラーはこちらから。
(表示されているユーザ様にはなにも非はありません)
エラーについて調べていたら、ちょうどissueとその詳細記事を発見。
どうやらnon-Docker環境にした際のPostgreSQLの扱いに問題があったようです。
ロールバックしてしまったので消えてしまいましたが、早急な解決が求められたのでとりあえず2人ほどからロールバックOKとの投稿が見られたので即実行することに。
事の始まり
Docker環境がおかしくなり、Dockerを使わないことにしましたが、DBの移行方法がいまいちわかっていませんでした。
MySQLはデータを丸々移動しても大丈夫だったことを思い出し、PostgreSQLもいけるだろうと思ったのが失敗でした。
詳しいことはわかりませんが、きちんとバックアップコマンドを使わないと一部のデータが消えてしまうようです。
それにより一部のアカウントが重複して登録されてしまい、エラーが大量に発生しました。
ロールバック作業について
ロールバックにはDBのバックアップをきちんと取得する必要がありました。
しかし、Docker環境が使えなくなってしまいnon-Docker環境に移行していたのでそれでは取得できません。
そこで、サーバをもう一台立ち上げて、そちらできゅあったーのクローンをDockerで作成することに。
VMでの作業
サーバはVMwareを使って再構築。
環境は同じCentOS7.2を使用して、とりあえずきゅあったーのv1.5.1時代を用意。
そのあとそのサーバ内でv1.6.1へアップデートを行いました。
(すでにきゅあったーがv1.6.1になっているので)
そこでDBのバックアップをきちんとコマンドを使い実行。
本番での作業
まず既存のおかしくなったDBを念のためバックアップを取ります。
バックアップを取りましたがすぐ戻しせるように新規のDBを作成し、そちらに正常なDBを流し込みます。
Dockerをやめた時にRedisを初期化していましたが、初期化した時点ではホームが消えてしまうことを知らなかったのでこの段階で元に戻します。
RedisはできるだけDBと同じタイミングでバックアップを取るべきとなっていましたが、取得したバックアップがおかしくなってしまったので、
v1.5.1時代のものをそのまま使うことに。
yumでインストールしたRedisのバージョンがDockerの時とあっていなかったのでそちらも合わせ何とか復旧。
後は通常のDockerを使用しないときと同じセットアップ方法を実施。
影響
結局2日分のデータが消えてしまい、皆さんに迷惑を掛けました。
またロールバック直前に指摘されていた新規登録者の問題ですが、2日間で新規登録者がいないことを確認できていますのでそちらは問題ありませんでした。
17/09/26現在でアップデートやバグ、作業によるエラーは確認していません。
問題なく動作している用です。
さいごに
この件で信頼を失いユーザが流れてしまうことを懸念していましたが、優しい方ばかりで今後の励みになっています。
きゅあったー運営でネックになっていたDocker環境を排除できたので今後は少し楽になりそうです。
まだまだ問題を抱えているきゅあったーですが
今後ともよろしくお願いします。