朝日ネット 技術者ブログ

朝日ネットのエンジニアによるリレーブログ。今、自分が一番気になるテーマで書きます。

CentOS移行プロジェクトで直面した課題と解決

列車見張資格(元)保有者のoshikawaです。 CentOS移行プロジェクトで直面した課題についてです。

不正な日付データ

MariaDBのアップデートに伴い、Invalid date format(不正な日付データ1)のデフォルトの扱いが変わっていることが分かりました。通常の日付入力はカレンダーパネルで行うため、本来おかしな日付は入力されないのですが、一部のCSVファイル入力経由で紛れ込んでいることも分かりました。"2019-04-31" を例にとると、これまでは "2019-05-01" 扱いだったのが "0000-00-00" 扱いとなったため、日付比較の処理で問題が起こることが予想されました。

発覚後は互換性維持のためデフォルトの扱いをこれまでと同じに変更することで回避しましたが、既に移行済のホスト、DBデータに関してはリカバリが必要となりました。移行後のサービス再開、ユーザの利用によりデータが更新されているため切り戻してやり直すわけにはいきません。そこで移行前後のDBデータ内を比較するスクリプトを用意し、比較の上で該当データをアップデートする形で対処しました。

本来はRelease noteを読み込んだ上で事前に対策すべきだったのですが、CIで問題が出なかったため油断があったように思います。以降に行ったアップデートはRelease noteを流し見で済ませず、確認を怠ることなく進めるようにしています。

巨大データ

予定時間内に終わらない恐れ

移行作業時間はデータ量依存であるため、データ量が非常に多いホストは事前にユーザデータのNFS化でバックアップ対象外とし作業時間の削減を図っていました。しかしあるホストはNFS化の作業時間も長くなると予想されたため、メンテナンス(=サービス停止)時間を36時間確保して臨むこととしました。

検証環境で実験したところ、NFS領域に直接コピー出来ないことが分かりました。原因はJumboフレーム2で、かつ事情により対応するネットワークアダプタを設定できなかったため、一旦Jumboフレーム対応の別ホストにrsyncの上でNFS領域にコピーすることとしました。

f:id:a-osshi:20190717170615p:plain

しかしこの方法でコピーを実行すると完了まで約80時間が必要になると見込まれました。当初36時間もあれば余裕と思われていましたが半分にも足りていません。とは言え停止時間は既にアナウンス済で延ばせない以上、なんとかして時間内に済ませないといけません。

高速化の検討と実施

まずrsyncの並列化で時間を短縮できるのではとのアイデアがあり検証することとしました。4,6,8並列でそれぞれ実験し、最も早く終わる6並列化を採用しました。またrsyncするVM同士を同一ESXiに配置する3ことで高速化できることも分かりました。

更に当時試験的に導入されていたSSDをVMデータストアとして割り当て、移行作業前にDB内の不要データの整理削除など、様々な手段を講じることとしました。

  • rsyncの6並列化
  • rsyncするホストを同一ESXiに配置
  • VMのデータストアにSSDを割り当て
  • DBテーブルの事前整理によるデータサイズの削減

これらの手法を組み合わせることで、当初80時間必要とされたコピー作業を28時間程度に抑え込み、停止時間内に全ての作業を行うことができました。

現地作業の発生

通常は管理ホスト経由でのログインとメンテナンスが実行できるのですが、唯一あるホストだけは利用ユーザ環境内に設置4、かつ管理ホストからsshが通らないなどの制約があるため、現地に出張し作業を行うこととなりました。 これに伴い、追加で以下の準備が必要となりました。

  • リモートアクセス環境
  • VMイメージ
  • 移行手順の整理

リモートアクセス環境やVMイメージの準備もそうですが、移行手順の整理が問題でした。

他の全てのホストは開発した移行プログラムを管理ホスト上で実行することで作業を行っていましたが、現地環境では移行プログラムがそのまま実行できない可能性がありました。つまりどの段階で止まっても良いように、プログラムコードを再度各手順に分解し、手動実行できるようにする必要がありました。

分解する5とおよそ80ステップにも上り、さすがにこのまま手順化するわけにはいかないので検証の上で専用プログラム開発を行いつつ、作業手順を10ステップほどに削減して当日の作業に臨むこととしました。

なお余談ですが現地作業日は連休前の金曜日に設定し、作業完了後は観光できる日程としました。事前準備が大変な分、それくらいのご褒美(?)はあっても良いと思ったからです。

はるばる来た
※写真はイメージです

まとめ

1年半に及ぶプロジェクトの中で大小さまざまな課題が発生したのですが、今回は私の印象に残った3件をピックアップしてお送りしました。それぞれの課題に対し諦めることなく、粘り強く立ち向かったメンバーなくして完遂できなかったと思います。

それ以外の面ではプロジェクト開始時の方針として、移行作業や作業後の利用で問題が起きても切り戻しではなく移行後の環境を修正しながら進める、と事前に決めていたことも功を奏したように思えます。

採用情報

朝日ネットでは新卒採用・キャリア採用を行っております。


  1. 例えば 2019-04-31などの通常はあり得ない日付データ

  2. イーサネットの最大転送単位(MTU)が1,518バイトを超えるパケットのこと。スループットが向上しますが通信経路上の全ての機器で対応していないと通信ができません

  3. 同一ESXiに配置すると、VM間の通信がESXi内で折り返すためオーバーヘッドを削減できます

  4. いわゆるオンプレミス環境と呼ばれるものです

  5. 虚無の心境