このドキュメントには、次の内容が含まれています。
- 一般的なガイドライン
- 推奨される手順
- システム上のバイナリをアップグレードする際の詳細
以下の注意事項は、計画を立てる際の参考になるほか、この後の文書でそのような推奨を行っている理由を理解するのにも役立ちます。
ClickHouse server は ClickHouse Keeper または ZooKeeper とは別にアップグレードする
ClickHouse Keeper または Apache ZooKeeper に対するセキュリティ修正が必要でない限り、ClickHouse server のアップグレード時に Keeper もアップグレードする必要はありません。アップグレードの過程では Keeper の安定性を維持する必要があるため、Keeper のアップグレードを検討する前に、まず ClickHouse server のアップグレードを完了してください。
マイナーバージョンのアップグレードはこまめに行うべきです
新しいマイナーバージョンがリリースされたら、常にできるだけ早く最新バージョンへアップグレードすることを強く推奨します。マイナーリリースに破壊的変更はありませんが、重要なバグ修正 (場合によってはセキュリティ修正も) を含んでいます。
対象バージョンで稼働する別の ClickHouse server で実験的機能をテストする
実験的機能の互換性は、いつどのように破綻してもおかしくありません。実験的機能を使用している場合は、changelog を確認し、対象バージョンをインストールした別の ClickHouse server を用意して、そこで実験的機能の利用をテストすることを検討してください。
アップグレード後、新しいバージョンが依存している一部の機能と互換性がないことに気付いた場合でも、新機能をまだ一切使用していなければ、比較的新しい (1年未満の) バージョンにダウングレードできることがあります。いったん新機能を使用すると、ダウングレードはできなくなります。
1 つのクラスター内に複数の ClickHouse server バージョンがある場合
当社では、1 年間の互換性ウィンドウ (2 つの LTS バージョンを含む) を維持するよう努めています。つまり、任意の 2 つのバージョンの差が 1 年未満である場合 (またはその間に LTS バージョンが 2 つ未満しかない場合) 、それらは同じクラスター内で連携して動作できるはずです。ただし、distributed queries の性能低下や、ReplicatedMergeTree における一部のバックグラウンド操作で再試行可能な error など、軽微な問題が発生する可能性はあるため、クラスター内のすべてのメンバーはできるだけ早く同じバージョンにアップグレードすることを推奨します。
リリース日の差が 1 年を超える異なるバージョンを同じクラスターで実行することは、決して推奨しません。データ損失が発生することは想定していませんが、クラスターが使用不能になる可能性があります。バージョン差が 1 年を超える場合に想定される問題には、次のようなものがあります。
- クラスターが動作しない可能性がある
- 一部、あるいはすべての queries が予期しない error で失敗する可能性がある
- 予期しない error や警告が logs に表示される可能性がある
- ダウングレードできなくなる可能性がある
現在のバージョンと対象バージョンの差が1年を超える場合は、次のいずれかの方法を推奨します。
- ダウンタイムを伴うアップグレードを行う (すべてのサーバーを停止し、すべてのサーバーをアップグレードした後、すべてのサーバーを起動する) 。
- または、中間バージョンを経由してアップグレードする (現在のバージョンより1年未満だけ新しいバージョン) 。
以下は、ClickHouse をダウンタイムなしでアップグレードするための推奨手順です。
- 設定変更をデフォルトの
/etc/clickhouse-server/config.xml ファイルには入れず、代わりに /etc/clickhouse-server/config.d/ に配置してください。/etc/clickhouse-server/config.xml はアップグレード時に上書きされる可能性があるためです。
- 互換性のない変更がないか、changelog を確認してください (対象リリースから現在使用中のリリースまでさかのぼって確認します) 。
- 互換性のない変更として挙がっている項目のうち、アップグレード前に対応できるものは事前に対応し、アップグレード後に必要な変更は一覧にまとめてください。
- 各分片について、同じ分片内の他のレプリカをアップグレードしている間も稼働させておくレプリカを 1 つ以上特定してください。
- アップグレード対象のレプリカでは、1 台ずつ次を実施します:
- ClickHouse server を停止する
- server を対象バージョンにアップグレードする
- ClickHouse server を起動する
- システムが安定したことを示す Keeper メッセージが出るまで待機する
- 次のレプリカに進む
-
Keeper log と ClickHouse log にエラーがないか確認します
-
手順 4 で特定したレプリカを新しいバージョンにアップグレードします
-
手順 1 〜 3 で作成した変更一覧を参照し、アップグレード後に必要な変更を行います。
このエラーメッセージは、レプリケート環境で複数のバージョンの ClickHouse が稼働している場合には想定内です。すべてのレプリカが同じバージョンにアップグレードされると、表示されなくなります。MergeFromLogEntryTask: Code: 40. DB::Exception: Checksums of parts don't match:
hash of uncompressed files doesn't match. (CHECKSUM_DOESNT_MATCH) Data after merge is not
byte-identical to data on another replicas.
ClickHouse server バイナリのアップグレード手順
ClickHouse を deb パッケージからインストールした場合は、サーバー上で次のコマンドを実行します。
$ sudo apt-get update
$ sudo apt-get install clickhouse-client clickhouse-server
$ sudo service clickhouse-server restart
推奨されている deb パッケージ以外の方法で ClickHouse をインストールした場合は、適切な更新方法を使用してください。
1 つの分片のすべてのレプリカが同時にオフラインになるタイミングが発生しない限り、複数のサーバーを同時に更新できます。
古いバージョンの ClickHouse を特定のバージョンにアップグレードする場合:
例:
xx.yy.a.b は現在の安定版バージョンです。最新の安定版バージョンはこちらで確認できます。
$ sudo apt-get update
$ sudo apt-get install clickhouse-server=xx.yy.a.b clickhouse-client=xx.yy.a.b clickhouse-common-static=xx.yy.a.b
$ sudo service clickhouse-server restart