sql >> データベース >  >> RDS >> Database

Cassandraクラスターの移行

    ベンスレーター 、Instaclustrのチーフプロダクトオフィサー。

    ライブのApacheCassandraデプロイメントを新しい場所に移動しますか?プロセス全体でCassandraクラスターを100%利用できるようにする方法など、いくつかの懸念があるのは当然です。ただし、実際には、接続設定の変更中もアプリケーションをオンラインのままにしておくことができれば、この移行中もアプリケーションを完全に利用できるようにすることができます。保護を強化して安心させるために、次の手法には、移行が完了するまで、元の構成に戻すための迅速なロールバック戦略も含まれています。

    ダウンタイムを回避するために推奨される7ステップのCassandraクラスター移行の操作順序は次のとおりです。

    1。既存の環境を準備します。

    まず、アプリケーションがデータセンター対応の負荷分散ポリシーとLOCAL_*を使用していることを確認します。また、すべて 新しいクラスターにコピーされるキースペースのうち、レプリケーション戦略としてNetworkTopologyStrategyを使用するように設定されています。また、後で変更すると複雑になる可能性があるため、作成時にすべてのキースペースでこのレプリケーション戦略を使用することをお勧めします。

    2。新しいクラスターを作成します。

    次に、移行先の新しいクラスターを作成します。ここで注意すべき点がいくつかあります。新しいクラスターと元のクラスターが同じCassandraバージョンとクラスター名を使用していることを確認してください。また、使用する新しいデータセンター名は、既存のデータセンターの名前とは異なる必要があります。

    3。一緒にクラスターに参加します。

    これを行うには、最初に必要なファイアウォールルールの変更を行って、クラスターを参加できるようにします。ソースクラスターへの変更も必要になる場合があることに注意してください。次に、新しいクラスターのシードノードを変更して開始します。これが完了すると、新しいクラスターは元のクラスターの2番目のデータセンターになります。

    4。レプリケーション設定を変更します。

    次に、既存のクラスターで、コピーされるキースペースのレプリケーション設定を更新して、データが新しいデータセンターを宛先としてレプリケートされるようにします。

    5。データを新しいクラスターにコピーします。

    クラスタが結合されると、Cassandraは新しいクラスタへの書き込みの複製を開始します。ただし、nodetool再構築機能を使用して既存のデータをコピーする必要があります。既存のクラスターに圧倒的なストリーミング負荷がかからないように、この機能を新しいクラスターで一度に1つまたは2つのノードで実行することをお勧めします。

    6。アプリケーションの接続ポイントを切り替えます。

    再構築機能のすべての使用が完了すると、各クラスターには、移行されるデータの完全なコピーが含まれ、Cassandraは自動的に同期を維持します。次に、アプリケーションの初期接続ポイントを新しいクラスターのノードに変更します。これが完了すると、すべての読み取りと書き込みが新しいクラスターによって処理され、その後、元のクラスターに複製されます。最後に、クラスター全体で修復機能を実行して、すべてのデータが元のデータから正常に複製されていることを確認するのが賢明です。

    7。元のクラスターをシャットダウンします。

    元のクラスターを削除して、移行後のクリーンアップを少し行ってプロセスを完了します。まず、ファイアウォールルールを変更して、元のクラスターを新しいクラスターから切断します。次に、新しいクラスターのレプリケーション設定を更新して、元のクラスターへのデータのレプリケーションを停止します。最後に、元のクラスターをシャットダウンします。

    これで、Apache Cassandraのデプロイメントが完全に移行され、ダウンタイムがゼロで、リスクが低く、エンドユーザーの観点から完全にシームレスで透過的です。

    作者について

    ベンスレーター は、クラウド内のエンタープライズグレードのホスト型で完全に管理されたApacheCassandraオープンソースデータインフラストラクチャのプロバイダーであるInstaclustrの最高製品責任者です。


    1. jquerydatatableを使用してページングの並べ替えと検索を追加する

    2. MySQLでrow_numberを取得する方法

    3. SQL Serverで時間を比較するにはどうすればよいですか?

    4. SCOPE_IDENTITY()を使用して、同じスコープで最後に挿入されたID値を返します(SQL Server)