クイックスタート: Azure Managed Instance for Apache Cassandra を使用してマルチリージョン クラスターを作成する

Azure Managed Instance for Apache Cassandra は、純粋なオープンソースの Apache Cassandra クラスター用のフル マネージド サービスです。 このサービスでは、各ワークロードの特定のニーズに応じて構成をオーバーライドすることもできます。これにより、必要に応じて最大限の柔軟性と制御が可能になります。

このクイックスタートでは、Azure CLI のコマンドを使用して Azure にマルチリージョン クラスターを構成する方法について説明します。

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

  • この記事では、Azure CLI バージョン 2.30.0 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

  • セルフホステッドまたはオンプレミス環境に接続された Azure Virtual Network。 オンプレミス環境を Azure に接続する方法の詳細については、「オンプレミス ネットワークの Azure への接続」の記事を参照してください。

ネットワーク環境を設定する

このサービスでプロビジョニングされたデータセンターはすべて VNet インジェクションを使用して専用サブネットにデプロイする必要があるため、デプロイの前に適切なネットワーク ピアリングを構成します。 このクイックスタートでは、米国東部と米国東部 2 の別々のリージョンに 2 つのデータセンターがあるクラスターを作成します。 まず、リージョンごとに仮想ネットワークを作成します。

  1. Azure portal にサインインします。

  2. cassandra-mi-multi-region という名前のリソース グループを作成します。

    az group create --location eastus2 --name cassandra-mi-multi-region
    
  3. 専用サブネットを指定して、米国東部 2 に 1 つ目の VNet を作成します。

    az network vnet create \
      --name vnetEastUs2 \
      --location eastus2 \
      --resource-group cassandra-mi-multi-region \
      --address-prefix 10.0.0.0/16 \
      --subnet-name dedicated-subnet
    
  4. 同様に、専用サブネットを指定して、米国東部に 2 つ目の VNet を作成します。

     az network vnet create \
       --name vnetEastUs \
       --location eastus \
       --resource-group cassandra-mi-multi-region \
       --address-prefix 192.168.0.0/16 \
       --subnet-name dedicated-subnet
    

    Note

    ピアリング時にエラーが発生しないようにするために、異なる IP アドレス範囲を明示的に追加します。

  5. 1 つ目の VNet を 2 つ目の VNet にピアリングします。

    az network vnet peering create \
      --resource-group cassandra-mi-multi-region \
      --name MyVnet1ToMyVnet2 \
      --vnet-name vnetEastUs2 \
      --remote-vnet vnetEastUs \
      --allow-vnet-access \
      --allow-forwarded-traffic
    
  6. 2 つの VNet を接続するために、2 つ目の VNet と 1 つ目の VNet の間に別のピアリングを作成します。

    az network vnet peering create \
      --resource-group cassandra-mi-multi-region \
      --name MyVnet2ToMyVnet1 \
      --vnet-name vnetEastUs \
      --remote-vnet vnetEastUs2 \
      --allow-vnet-access \
      --allow-forwarded-traffic
    

    注意

    さらにリージョンを追加する場合、VNet ごとに、その VNet から他のすべての VNet へのピアリングと、他のすべての VNet からその VNet へのピアリングが必要になります。

  7. 前のコマンドの出力をチェックします。 "peeringState" の値が "Connected" になっていることを確認します。 この結果は、次のコマンドを実行して確認することもできます。

    az network vnet peering show \
      --name MyVnet1ToMyVnet2 \
      --resource-group cassandra-mi-multi-region \
      --vnet-name vnetEastUs2 \
      --query peeringState
    
  8. 両方の仮想ネットワークに、いくつかの特別なアクセス許可を適用します。 Azure Managed Instance for Apache Cassandra には、これらのアクセス許可が必要となります。 次のコマンドを実行します。 <SubscriptionID> をサブスクリプション ID で置き換えます。

    az role assignment create \
      --assignee a232010e-820c-4083-83bb-3ace5fc29d0b \
      --role 4d97b98b-1d4f-4787-a291-c67834d212e7 \
      --scope /subscriptions/<SubscriptionID>/resourceGroups/cassandra-mi-multi-region/providers/Microsoft.Network/virtualNetworks/vnetEastUs2
    
    az role assignment create     \
      --assignee a232010e-820c-4083-83bb-3ace5fc29d0b \
      --role 4d97b98b-1d4f-4787-a291-c67834d212e7 \
      --scope /subscriptions/<SubscriptionID>/resourceGroups/cassandra-mi-multi-region/providers/Microsoft.Network/virtualNetworks/vnetEastUs
    

    Note

    前のコマンドの assigneerole の値は固定値です。 これらの値は、コマンドに記載されているとおりに入力してください。

az role assignment create の実行時にエラーが発生した場合、それを実行するためのアクセス許可が不足していることが考えられます。 管理者にアクセス許可を申請してください。

マルチリージョン クラスターを作成する

  1. クラスター リソースをデプロイします。 <Subscription ID> は、サブスクリプション ID で置き換えてください。 デプロイには、5 分から 10 分かかる場合があります。

    resourceGroupName='cassandra-mi-multi-region'
    clusterName='test-multi-region'
    location='eastus2'
    delegatedManagementSubnetId='/subscriptions/<SubscriptionID>/resourceGroups/cassandra-mi-multi-region/providers/Microsoft.Network/virtualNetworks/vnetEastUs2/subnets/dedicated-subnet'
    initialCassandraAdminPassword='myPassword'
    
     az managed-cassandra cluster create \
       --cluster-name $clusterName \
       --resource-group $resourceGroupName \
       --location $location \
       --delegated-management-subnet-id $delegatedManagementSubnetId \
       --initial-cassandra-admin-password $initialCassandraAdminPassword \
       --debug
    
  2. クラスター リソースが作成された後で、データ センターを作成する準備が整いました。 まず、米国東部 2 にデータセンターを作成します。 <SubscriptionID> は、サブスクリプション ID で置き換えてください。 この操作には最大 10 分かかることがあります。

    resourceGroupName='cassandra-mi-multi-region'
    clusterName='test-multi-region'
    dataCenterName='dc-eastus2'
    dataCenterLocation='eastus2'
    delegatedManagementSubnetId='/subscriptions/<SubscriptionID>/resourceGroups/cassandra-mi-multi-region/providers/Microsoft.Network/virtualNetworks/vnetEastUs2/subnets/dedicated-subnet'
    
     az managed-cassandra datacenter create \
        --resource-group $resourceGroupName \
        --cluster-name $clusterName \
        --data-center-name $dataCenterName \
        --data-center-location $dataCenterLocation \
        --delegated-subnet-id $delegatedManagementSubnetId \
        --node-count 3
    
  3. 米国東部にデータセンターを作成します。 <SubscriptionID> は、サブスクリプション ID で置き換えてください。

    resourceGroupName='cassandra-mi-multi-region'
    clusterName='test-multi-region'
    dataCenterName='dc-eastus'
    dataCenterLocation='eastus'
    delegatedManagementSubnetId='/subscriptions/<SubscriptionID>/resourceGroups/cassandra-mi-multi-region/providers/Microsoft.Network/virtualNetworks/vnetEastUs/subnets/dedicated-subnet'
    virtualMachineSKU='Standard_D8s_v4'
    noOfDisksPerNode=4
    
     az managed-cassandra datacenter create \
       --resource-group $resourceGroupName \
       --cluster-name $clusterName \
       --data-center-name $dataCenterName \
       --data-center-location $dataCenterLocation \
       --delegated-subnet-id $delegatedManagementSubnetId \
       --node-count 3
       --sku $virtualMachineSKU \
       --disk-capacity $noOfDisksPerNode \
       --availability-zone false
    

    注意

    --sku の値は、次の使用可能な SKU から選択できます。

    • Standard_E8s_v4
    • Standard_E16s_v4
    • Standard_E20s_v4
    • Standard_E32s_v4
    • Standard_DS13_v2
    • Standard_DS14_v2
    • Standard_D8s_v4
    • Standard_D16s_v4
    • Standard_D32s_v4

    --availability-zonefalse に設定されていることにも注意してください。 可用性ゾーンを有効にするには、これを true に設定します。 可用性ゾーンにより、サービスの可用性 SLA が向上します。 詳細については、「Azure Managed Instance for Apache Cassandra の SLA」を参照してください。

    警告

    可用性ゾーンは一部のリージョンでサポートされていません。 可用性ゾーンがサポートされていないリージョンを選択すると、デプロイは失敗します。 サポートされるリージョンについては、「可用性ゾーンを含む Azure のリージョン」を参照してください。

    可用性ゾーンの正常なデプロイは、特定のリージョン内のすべてのゾーンでコンピューティング リソースが使用可能であることにも左右されます。 選択した SKU、または容量が一部のゾーンで使用できない場合、デプロイは失敗する可能性があります。

  4. 2 つ目のデータセンターが作成されたら、ノード状態を取得して、すべての Cassandra ノードが正常に動作していることを確認します。

    resourceGroupName='cassandra-mi-multi-region'
    clusterName='test-multi-region'
    
    az managed-cassandra cluster node-status \
       --cluster-name $clusterName \
       --resource-group $resourceGroupName
    
  5. 次に、CQLSH を使用して対象のクラスターに接続し、次の CQL クエリを使用して、各キースペースのレプリケーション戦略を更新し、クラスター全体のすべてのデータセンターを含めます (システムテーブルは自動的に更新されます)。

    ALTER KEYSPACE "ks" WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'dc-eastus2': 3, 'dc-eastus': 3};
    
  6. 最後に、データが既に存在するクラスターにデータ センターを追加する場合は、履歴データをレプリケートするために rebuild を実行する必要があります。 この場合は、データ センターに既に dc-eastus2 データがあることを前提としています。 Azure CLI で、以下のコマンドを実行して、新しい dc-eastus データセンターの各ノードで nodetool rebuild を実行し、<ip address> をノードの IP アドレスに置き換えてください。

    az managed-cassandra cluster invoke-command \
      --resource-group $resourceGroupName \
      --cluster-name $clusterName \
      --host <ip address> \
      --command-name nodetool --arguments rebuild="" "dc-eastus2"=""
    

    警告

    キースペース レプリケーションの変更を適用するまで、アプリケーション クライアントが新しいデータ センターに書き込むのを許可しないでください 。 それ以外の場合、リビルドは機能しないので、サポート リクエスト を作成し、チームが代理で repair を実行できるようにする必要があります。

トラブルシューティング

Azure CLI を使用して Virtual Network にアクセス許可を適用するときにエラーが発生した場合、Azure portal から同じアクセス許可を手動で適用できます。 そのようなエラーとしては、"Cannot find user or service principal in graph database for 'e5007d2c-4b13-4a74-9b6a-605d99f03501' ('e5007d2c-4b13-4a74-9b6a-605d99f03501' に対するユーザーまたはサービス プリンシパルがグラフ データベース内で見つかりません)" などが該当します。 詳細については、「Azure portal を使用して Azure Cosmos DB サービス プリンシパルを追加する」を参照してください。

注意

Azure Cosmos DB のロールの割り当ては、デプロイの目的にのみ使用されます。 Azure Managed Instance for Apache Cassandra には、Azure Cosmos DB に対するバックエンドの依存関係はありません。

リソースをクリーンアップする

このマネージド インスタンス クラスターを引き続き使用しない場合は、次の手順でそれを削除します。

  1. Azure portal の左側にあるメニューで、 [リソース グループ] を選択します。
  2. 一覧から、このクイック スタートで作成したリソース グループを選択します。
  3. リソース グループの [概要] ペインで、 [リソース グループの削除] を選択します。
  4. 次のウィンドウで、削除するリソース グループの名前を入力し、[削除] を選択します。

次のステップ

このクイックスタートでは、Azure CLI と Azure Managed Instance for Apache Cassandra を使用してマルチリージョン クラスターを作成する方法を説明しました。 これで、クラスターの操作を開始できます。