Restartになっている場合のレプリカ・セット障害のシミュレート

レプリカ・セットの障害をシミュレートしましょう。この例では、TimesTenScaleoutオブジェクトの.spec.ttspec.replicaSetRecoveryデータ項目が指定されていません。デフォルトのRestartになっていると仮定します。これは、レプリカ・セット全体の障害が発生した場合にTimesTenオペレータによってデータベースが強制的にアンロードされリロードされることを示しています。

TimesTenScaleoutオブジェクトの状態がどのように遷移するかを確認しましょう。

ノート:

この例は、デモンストレーションのためにのみ用意されています。この例を本番環境で試そうとしないでください。
この例では、デプロイ済の正しく機能しているTimesTenScaleoutオブジェクトについて示されています。
kubectl get tts samplescaleout
NAME             OVERALL   MGMT     CREATE    LOAD              OPEN   AGE
samplescaleout   Normal    Normal   created   loaded-complete   open   99m

高レベル状態はNormal、管理の状態はNormal、データベースの状態はcreated,loaded-complete,openであることに注目してください。

この例では、3つのレプリカ・セットがあります。
kubectl get pods
NAME                                 READY   STATUS    RESTARTS   AGE
samplescaleout-data-1-0              2/2     Running   0          11m
samplescaleout-data-1-1              2/2     Running   0          11m
samplescaleout-data-1-2              2/2     Running   0          11m
samplescaleout-data-2-0              2/2     Running   0          11m
samplescaleout-data-2-1              2/2     Running   0          11m
samplescaleout-data-2-2              2/2     Running   0          11m
samplescaleout-mgmt-0                2/2     Running   0          11m
samplescaleout-zk-0                  1/1     Running   0          11m
samplescaleout-zk-1                  1/1     Running   0          10m
samplescaleout-zk-2                  1/1     Running   0          9m35s
timesten-operator-7677964df9-sp2zp   1/1     Running   0          7d3h

それらのレプリカ・セットのうちの1つに属しているsamplescaleout-data-1-0ポッドとsamplescaleout-data-2-0ポッドを削除しましょう。

  1. そのポッドを削除します。
    kubectl delete pod samplescaleout-data-1-0;kubectl delete pod samplescaleout-data-2-0
    pod "samplescaleout-data-1-0" deleted
    pod "samplescaleout-data-2-0" deleted
    
  2. kubectl getコマンドを使用して状態の遷移を確認します。
    kubectl get tts samplescaleout
    NAME             OVERALL           MGMT     CREATE    LOAD                OPEN   AGE
    samplescaleout   DatabasePartial   Normal   created   loaded-incomplete   open   111m

    高レベル状態は、データベースは稼働中であるが一部のデータを使用できないことを示す、DatabasePartialになっています。1つ以上のレプリカ・セットに全体的な障害が発生しました。データベースのloaded状態はloaded-incompleteであり、これは、ロードが正常に終了した要素がないレプリカ・セットが1つ以上あることを示しています。

    kubectl get tts samplescaleout
    NAME             OVERALL                   MGMT     CREATE    LOAD                 OPEN   AGE
    samplescaleout   DatabaseRestartRequired   Normal   created   loading-incomplete   open   112m

    このオブジェクトの高レベル状態はDatabaseRestartRequiredに遷移しています。この状態は、データベースは稼働しているが(少なくとも部分的に稼働)機能を修復するにはそれを停止して再起動(アンロードしてリロード)する必要があることを示しています。これは、レプリカ・セット内のすべての要素に同時に障害が発生し、それらの要素が、waiting for seed状態であるためアンロード可能な場合になる可能性があります。こうなった場合は、データベースをアンロードしてリロードする必要があります。その期間には、コミットされたトランザクションが失われる可能性があります。

    kubectl get tts samplescaleout
    NAME             OVERALL              MGMT     CREATE    LOAD                 OPEN   AGE
    samplescaleout   DatabaseRestarting   Normal   created   loading-incomplete   open   114m

    このオブジェクトの高レベル状態はDatabaseRestartingに遷移しています。この状態は、データベースがDatabaseRestartRequired状態になった後に強制的にアンロードされリロードされている最中であることを示しています。

    kubectl get tts samplescaleout
    NAME             OVERALL   MGMT     CREATE    LOAD              OPEN     AGE
    samplescaleout   Normal    Normal   created   loaded-complete   closed   114m

    このオブジェクトの高レベル状態はNormalに遷移しており、これは、グリッドとデータベースが正常に機能していることを示しています。データベースのloaded状態がloaded-completeに変わりました。これは、すべての要素が正常にロードされたことを示しています。データベースのopen状態はclosedであり、これは、データベースの接続がクローズされたことを示しています。

    kubectl get tts samplescaleout
    NAME             OVERALL   MGMT     CREATE    LOAD              OPEN   AGE
    samplescaleout   Normal    Normal   created   loaded-complete   open   114m

    このオブジェクトの高レベル状態はNormalのままになっています。データベースのopen状態がopenに変わりました。これは、データベースの接続がオープンされたことを示しています。

レプリカ・セット全体に障害が発生しましたが、TimesTen Scaleoutによってデータベースが強制的にアンロードされリロードされました。オペレータによってグリッドとデータベースがNormal状態に戻されました。これは、両方が正常に機能していることを示しています。手動での操作は必要ありませんでした。