マルチテナントの実装

導入オプション Netezza Performance Server for Cloud Pak for Data System

外部ネットワークとユーザーリソースの分離を使用して、 Netezza Performance Server 11.2.1.1 以降でマルチテナントを実装する方法を説明します。

1.外部ネットワークを分離する。

ネットワークの分離には2時間もかからないかもしれない。

外部接続の設定
IBM Cloud Pak for Data Systemは、専用のファブリックスイッチ・アップリンク・ポートを使用することで、複数の外部ネットワークへの接続をサポートしています。 複数の外部ネットワークへの接続を成功させるには
  1. 追加ポートをケーブルで接続する。

    各ファブリックスイッチのポート45-48は、顧客ネットワークのアップリンク専用です。

  2. LACPを設定する。
  3. IBM サポートに連絡して、 IBM Cloud Pak for Data System ネットワーク構成 yml ファイルを更新し、新しい構成を適用します。
    この手順を完了するには、以下の情報を IBM サポートに伝える必要があります:
    1. 追加接続用にケーブル接続された IBM Cloud Pak for Data System ファブリック・スイッチ・ポート番号:顧客スイッチ・ポートに面した BM Cloud Pak for Data System で設定されたポート・タイプ(トランクまたはアクセス)、トランク・ポートの VLAN 番号。
    2. 追加ファブリックインターフェースで使用するフローティングIP、ゲートウェイIP、ネットマスク。

    ネットワーク・コンフィギュレーションの例 yml 顧客側にアクセス・ポートを持つ2つの外部ネットワークを持つファイル:

    all:
      children:
        [...]
        switches:
          hosts:
            FabSw1a:
              ansible_host: localhost
              external_connection_enabled: True
              external_connection_config:
                external_link1:
                  switch_ports: ['45']
                  port_config:
                    mtu: 9000
                    link_speed: 10000
                  vlans: ['4080']
                  strict_vlan: false
                  name: h0
                  lacp_link: True
                  lacp_rate: Fast
                  clag_id: 100
                  partner_switch: 'Fabsw1b'
                external_link2:
                  switch_ports: ['46']
                  port_config:
                    mtu: 9000
                    link_speed: 10000
                  vlans: ['4081']
                  strict_vlan: false
                  name: h1
                  lacp_link: True
                  lacp_rate: Fast
                  clag_id: 101
                  partner_switch: 'Fabsw1b'
    
      vars:
        [...]
        application_network_enabled: True
        application_network:
          network1:
            default_gateway: true
            vlan: 4080
            # just number, no slash
            prefix: 24
            gateway: 192.168.10.1
            floating_ip: 192.168.10.10
            mtu: <OPTIONAL>
            custom_routes: <OPTIONAL>
          network2:
            default_gateway: false
            vlan: 4081
            # just number, no slash
            prefix: 24
            gateway: 192.168.20.1
            floating_ip: 192.168.20.10
            mtu: <OPTIONAL>
            custom_routes: <OPTIONAL>
    
接続レベルの分離

複数の外部ネットワークに接続した後、対応するデータベースを分離することができます。

SET CONNECTION コマンドはデータベースに対する Netezza クライアントのホストアクセスレコードを定義します。
SET CONNECTION HOSTSSL DATABASE dev_db IPADDR ‘192.168.10.0’ IPMASK ‘255.255.255.0’
SET CONNECTION HOSTSSL DATABASE qa_db IPADDR ‘192.168.20.0’ IPMASK ‘255.255.255.0’

2.データベースの分離。

スキーマの変更は1時間以内に完了するかもしれない。

  1. テナントごとにデータベースを作成する:
    MYDB.SCH1 (USER)=> CREATE DATABASE dev_db with COLLECT HISTORY ON;
    MYDB.SCH1 (USER)=> CREATE DATABASE qa_db with COLLECT HISTORY ON;
  2. postgressql.confdisable_crossdb_writeON に設定する。 詳しくは説明書をご覧ください。

3.ユーザー・リソース・グループの作成

ACLの変更には1時間もかからないかもしれない。

Netezzaのセキュリティモデルは以下の組み合わせである:
  • ユーザーやグループに付与される管理者権限。
  • 特定のオブジェクト(例えばテーブルxyz)に関連付けられたオブジェクト権限。
  • オブジェクトのクラス(例えば、すべてのテーブル)。
Netezzaではリソースグループを作成し、最小リソースと最大リソースの割り当てを指定できます。 リソースグループの各メンバーは、その権限を継承する。

マルチテナントを実現するには、2つのリソースグループを持つことができます。 例えば、development_groupqa_group となります。

各リソースグループには複数のユーザーを入れることができます。 簡単にするために、管理者権限とオブジェクト権限をすべてグループに付与する。 必要に応じて権限を与えることができる。

詳細は Netezza Security Modelを参照。

リソースグループとは、最小リソースパーセンテージがゼロではない特別なグループである。 各リソースグループには、必要な割り当てに応じて、 RESOURCE MINIMUMRESOURCE MAXIMUM 。 詳しくは、 リソースの最小値と最大値を参照。

手順

  1. development_groupqa_group グループを作成し、 RESOURCE MINIMUMRESOURCE MAXIMUM
    MYDB.SCH1(USER)=> CREATE GROUP development_group with RESOURCE MINIMUM 60 RESOURCE MAXIMUM 100;
    MYDB.SCH1(USER)=> CREATE GROUP qa_group with RESOURCE MINIMUM 40 RESOURCE MAXIMUM 100;
  2. development_groupqa_group に以下の権限を与える:
    MYDB.SCH1(USER)=> GRANT ALL ADMIN IN dev_db.ALL to group development_group;
    MYDB.SCH1(USER)=> GRANT ALL ADMIN IN qa_db.ALL to group qa_group;
    MYDB.SCH1(USER)=> GRANT ALL on dev_db to group development_group;
    MYDB.SCH1(USER)=> GRANT ALL on qa_db to group qa_group;
  3. ユーザーを作成し、それぞれのグループに追加する:
    MYDB.SCH1(USER)=> CREATE USER John with password 'abc123' in group development_group in resourcegroup development_group;
    MYDB.SCH1(USER)=> CREATE USER Bob with password '3566' in group qa_group in resourcegroup qa_group;
  4. ユーザーをグループに追加します:
    MYDB.SCH1(USER)=> ALTER USER Smith in group qa_group in resourcegroup qa_group;