FUJITSU Cloud Service K5
IaaS 設計・構築ガイド(デザインパターン・実装サンプル集)

PRIMECLUSTER_API_sample


########################################################### # 導入運用手引書4.4<K5環境編> # 3 導入 ########################################################### # # │クラスタ名         │PRIMECL_160            │備考 # ├──────────────┼────────┬────────┼──────────────── # │仮想サーバ名        │pcl_node1_161  │pcl_node2_162  │導入運用手引書4.4<K5環境編>から変更 # │CFノード名         │node1_161    │node2_162    │導入運用手引書4.4<K5環境編>から変更 # │業務LANのIP         │192.168.201.161 │192.168.201.162 │導入運用手引書4.4<K5環境編>から変更 # │業務LANのインタフェース   │eth0/sha0    │eth0/sha0    │ # │クラスタICのIP       │192.168.222.161 │192.168.222.162 │導入運用手引書4.4<K5環境編>から変更 # │クラスタICのインタフェース │eth1       │eth1      │ # │CIP/SysNode名        │node1_161_RMS  │node2_162_RMS  │導入運用手引書4.4<K5環境編>から変更 # ├──────────────┼────────┼────────┼──────────────── # │業務LAN共通         │        │        │ # │ 引き継ぎIP        │192.168.201.160 │        │導入運用手引書4.4<K5環境編>から変更 # │ ゲートウェイIP      │192.168.201.254 │        │導入運用手引書4.4<K5環境編>から変更 # ├──────────────┼────────┼────────┼──────────────── # │CIP LAN           │        │        │ # │ CIP LANアドレス      │192.168.194.0  │        │導入運用手引書4.4<K5環境編>から変更 # ├──────────────┼────────┼────────┼──────────────── # │管理クライアント      │        │        │ # │ クライアントIP      │192.168.201.109 │        │導入運用手引書4.4<K5環境編>に記載なし # # # ※CIP LANについて #  CIP LANは、PRIMECLUSTER を導入中に、各仮想サーバで仮想的に作成されるネットワークで、 #  CIP LANを、K5上でネットワーク/サブネットを作成してはならない。 #  CIP LANは、バッティングしないアドレスであればなんでもよい。 # # ※仮想サーバを作成してから初めてログインした際は、ホスト名は仮想サーバ作成時に指定した "仮想サーバ名" になる。 #  仮想サーバを作成後に再起動してログインした際は、ホスト名は "仮想サーバ名.fcxlocal" に変更される。 # # ※仮想サーバにログインした後、 #  /bin/hostname コマンドで取得できるホスト名では、"_" は "-" に変換される。 ########################################################### # 導入運用手引書4.4<K5環境編> # 2.1.1 強制停止用ユーザの作成 ########################################################### # # 運用者ロール (cpf_operator) 権限をもつユーザを作成する。 # →既存のユーザ thq077 を流用する。 # ########################################################### # 導入運用手引書4.4<K5環境編> # 2.1.2 仮想ネットワークの作成 # 2.1.2.1 サブネットの作成 ########################################################### # # ポータルでネットワーク、サブネットを作成する。 # IDを変数に設定する。 # # ネットワーク、サブネットとも、同一の名称で複数は作成しないようにする。 # # 1つの名称に対して1つのIDとなっている場合は、 # 以下のように名称を指定することで、IDを取得できる。 # # 【ネットワーク】業務LAN (名称:"cdp-intnet-201") NETWORK_ID_201=`curl -s $NETWORK/v2.0/networks -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.networks[]|select(.name =="cdp-intnet-201")|.id'| tr -d '\r\n'` echo $NETWORK_ID_201 # # 【ネットワーク】クラスタインタコネクトLAN (名称:"pcl-intnet-222") NETWORK_ID_222=`curl -s $NETWORK/v2.0/networks -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.networks[]|select(.name =="pcl-intnet-222")|.id'| tr -d '\r\n'` echo $NETWORK_ID_222 # 【サブネット】業務LAN (名称:"cdp-subnet-201") SUNBET_ID_201=`curl -s $NETWORK/v2.0/subnets -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.subnets[]|select(.name=="cdp-subnet-201")|.id'| tr -d '\r\n'` echo $SUNBET_ID_201 # # 【サブネット】クラスタインタコネクトLAN (名称:"pcl-subnet-222") SUNBET_ID_222=`curl -s $NETWORK/v2.0/subnets -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.subnets[]|select(.name=="pcl-subnet-222")|.id'| tr -d '\r\n'` echo $SUNBET_ID_222 ########################################################### # 導入運用手引書4.4<K5環境編> # 2.1.2.2 セキュリティグループ # ~ # 2.1.2.6 ########################################################### # # セキュリティグループを作成する。 # 本サンプルでは、スタックで以下を作成して、IDを変数に設定する。 # # │ │ノード用     │ノード用 │管理      │ダミー用 # │ │業務LAN      │クラスタIC│クライアント用 │ # ├─┼─────────┼─────┼────────┼───── # │ 1│PCL_COM      │PCL_COM  │PCL_COM     │ # │ 2│PCL_NODE     │     │        │ # │ 3│         │PCL_IC  │        │ # │ 4│PCL_WBAV_for_NODE │     │        │ # │ 5│         │     │PCL_WBAV_for_PC │ # │ 6│PCL_SSH_for_NODE │     │        │ # │ 7│         │     │PCL_RDP_for_PC │ # │ 8│         │     │        │PCL_Dummy # # #   ※K5のセキュリティグループでは、 #    egressを1つも設定しないセキュリティグループには、 #    egress全ポートOKというデフォルトルールが付与されてしまう。 #    それを防ぐため、PCL_WAV_for_NODE, PCL_RDP_for_PC用に、 #    egressダミー用のセキュリティグループ PCL_Dummy を設定している。 # #   ※PCL_Dummy はノードにも管理クライアントにも割り当てない。 # #   ※1つの名称に対して1つのIDとなっている場合は、 #    以下のように名称を指定することで、IDを取得できる。 # # ■セキュリティグループID # # ▼名称:"PCL_COM" SG_ID1=`curl -s $NETWORK/v2.0/security-groups -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.security_groups[]|select(.name=="PCL_COM" )|.id'| tr -d '\r\n'` echo $SG_ID1 # # ▼名称:"PCL_NODE" SG_ID2=`curl -s $NETWORK/v2.0/security-groups -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.security_groups[]|select(.name=="PCL_NODE")|.id'| tr -d '\r\n'` echo $SG_ID2 # # ▼名称:"PCL_IC" SG_ID3=`curl -s $NETWORK/v2.0/security-groups -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.security_groups[]|select(.name=="PCL_IC" )|.id'| tr -d '\r\n'` echo $SG_ID3 # # ▼名称:"PCL_WBAV_for_NODE" SG_ID4=`curl -s $NETWORK/v2.0/security-groups -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.security_groups[]|select(.name=="PCL_WBAV_for_NODE")|.id'| tr -d '\r\n'` echo $SG_ID4 # # ▼名称:"PCL_WBAV_for_PC" SG_ID5=`curl -s $NETWORK/v2.0/security-groups -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.security_groups[]|select(.name=="PCL_WBAV_for_PC" )|.id'| tr -d '\r\n'` echo $SG_ID5 # # ▼名称:"PCL_SSH_for_NODE" SG_ID6=`curl -s $NETWORK/v2.0/security-groups -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.security_groups[]|select(.name=="PCL_SSH_for_NODE" )|.id'| tr -d '\r\n'` echo $SG_ID6 # # ▼名称:"PCL_RDP_for_PC" SG_ID7=`curl -s $NETWORK/v2.0/security-groups -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.security_groups[]|select(.name=="PCL_RDP_for_PC" )|.id'| tr -d '\r\n'` echo $SG_ID7 ########################################################### # 導入運用手引書4.4<K5環境編> # 2.1.2.7 ファイアーウォールルールの作成 ########################################################### # # 本サンプルでは省略。 # ########################################################### # 導入運用手引書4.4<K5環境編> # 2.1.3  サーバグループの作成 ########################################################### # # 本サンプルでは、jp-east-1b (AZ2) で環境を構築している。 # NAME=PCL_SERVER_GROUP_160 POLICY=anti-affinity AZ="jp-east-1b" # # ■サーバグループ作成 curl -s $COMPUTE/v2/$PROJECT_ID/os-server-groups -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type:application/json" -d '{"server_group":{ "name": "'$NAME'", "policies": [ "'$POLICY'" ], "availability_zone": "'$AZ'"}}' | jq . # # ■作成したサーバグループを確認 curl -s $COMPUTE/v2/$PROJECT_ID/os-server-groups -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq '.server_groups[]|select(.name =="'$NAME'")' # # ■サーバグループID # PCL_SERVER_GROUP_160 SERVER_GROUP_ID=`curl -s $COMPUTE/v2/$PROJECT_ID/os-server-groups -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.server_groups[]|select(.name =="'$NAME'")|.id'| tr -d '\r\n'` echo $SERVER_GROUP_ID ########################################################### # 導入運用手引書4.4<K5環境編> # 2.1.4~2.1.5 仮想サーバの作成 ########################################################### # # 本サンプルでは、jp-east-1b (AZ2) で環境を構築している。 # #【注意】 # ポートをIPアドレス付きで作成する際は、 # IPアドレス割り当てプールが設定されていないことも考慮して、 # IPアドレスが大きいものから設定するようにしている。 # #  ※IPアドレス割り当てプールが設定されていない場合で、 #   K5でサブネットに初めてIPアドレスを設定すると、 #   そのIPアドレスより1つ大きいアドレスに、 #   network:dhcp という DHCPサーバ用のIPアドレスが設定される。 #   たとえは、"192.168.201.162" というIPアドレスを設定されたポートを作成すると、 #   network:dhcp が "192.168.201.163" というIPアドレスで作成される。 # #【厳重注意】 # network:dhcp の IPアドレスは、ポータル上でIPアドレスの変更ができてしまうが、 # 変更すると DHCP が正常に動作しなくなるため、変更してはならない。 # そのため、network:dhcp でIPアドレスを作成されて問題ないよう、 # ポートを作成するときに考慮する。 # # # ■業務LAN用 FIXED_IP_ADDRESS_G162="192.168.201.162" # node2_162 FIXED_IP_ADDRESS_G161="192.168.201.161" # node1_161 ALLOWED_ADDRESS_PAIRS="192.168.201.160" # takeover FIXED_IP_ADDRESS_G109="192.168.201.109" # client (windows 2012) # # ■クラスタインタコネクトLAN用 FIXED_IP_ADDRESS_C162="192.168.222.162" # node2_162_cluster_interconnect FIXED_IP_ADDRESS_C161="192.168.222.161" # node1_161_cluster_interconnect # # ■ポート名 #  ポート名を設定しなくてもポートは作成できるが、管理上は付与した方がよい。 PORT_NAME_G162="PORT_PCL_G162" # node2_162, GLAN PORT_NAME_G161="PORT_PCL_G161" # node1_161, GLAN PORT_NAME_G109="PORT_PCL_G109" # client, GLAN PORT_NAME_C162="PORT_PCL_C162" # node2_162, CLAN PORT_NAME_C161="PORT_PCL_C161" # node1_161, CLAN # # ■ポート作成 # # ▼node2_162用ポート:業務LAN curl -s $NETWORK/v2.0/ports -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type:application/json" -d '{"port":{"network_id": "'$NETWORK_ID_201'", "name": "'$PORT_NAME_G162'", "availability_zone": "'$AZ'", "allowed_address_pairs":[{"ip_address": "'$ALLOWED_ADDRESS_PAIRS'"}], "fixed_ips": [{"subnet_id": "'$SUNBET_ID_201'","ip_address": "'$FIXED_IP_ADDRESS_G162'"}], "security_groups": ["'$SG_ID1'", "'$SG_ID2'","'$SG_ID4'", "'$SG_ID6'"] } }' | jq . # # ▼node1_161用ポート:業務LAN curl -s $NETWORK/v2.0/ports -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type:application/json" -d '{"port":{"network_id": "'$NETWORK_ID_201'", "name": "'$PORT_NAME_G161'", "availability_zone": "'$AZ'", "allowed_address_pairs":[{"ip_address": "'$ALLOWED_ADDRESS_PAIRS'"}], "fixed_ips": [{"subnet_id": "'$SUNBET_ID_201'","ip_address": "'$FIXED_IP_ADDRESS_G161'"}], "security_groups": ["'$SG_ID1'", "'$SG_ID2'","'$SG_ID4'", "'$SG_ID6'"] } }' | jq . # # ▼管理クライアント用ポート:業務LAN curl -s $NETWORK/v2.0/ports -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type:application/json" -d '{"port":{"network_id": "'$NETWORK_ID_201'", "name": "'$PORT_NAME_G109'", "availability_zone": "'$AZ'", "fixed_ips": [{"subnet_id": "'$SUNBET_ID_201'","ip_address": "'$FIXED_IP_ADDRESS_G109'"}], "security_groups": ["'$SG_ID1'", "'$SG_ID5'", "'$SG_ID7'"] } }' | jq . # # ▼node2_162用ポート:クラスタインタコネクトLAN curl -s $NETWORK/v2.0/ports -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type:application/json" -d '{"port":{"network_id": "'$NETWORK_ID_222'", "name": "'$PORT_NAME_C162'", "availability_zone": "'$AZ'", "fixed_ips": [{"subnet_id": "'$SUNBET_ID_222'","ip_address": "'$FIXED_IP_ADDRESS_C162'"}], "security_groups": ["'$SG_ID3'"] } }' | jq . # # ▼node1_161用ポート:クラスタインタコネクトLAN curl -s $NETWORK/v2.0/ports -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type:application/json" -d '{"port":{"network_id": "'$NETWORK_ID_222'", "name": "'$PORT_NAME_C161'", "availability_zone": "'$AZ'", "fixed_ips": [{"subnet_id": "'$SUNBET_ID_222'","ip_address": "'$FIXED_IP_ADDRESS_C161'"}], "security_groups": ["'$SG_ID3'"] } }' | jq . # # ■作成したポートIDを変数に設定 # # ▼node2_162, GLAN, PORT_PCL_G162 PORT_ID_G162=`curl -s $NETWORK/v2.0/ports -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.ports[]|select(.name=="PORT_PCL_G162")|.id'| tr -d '\r\n'` echo $PORT_ID_G162 # ▼node1_161, GLAN, PORT_PCL_G161 PORT_ID_G161=`curl -s $NETWORK/v2.0/ports -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.ports[]|select(.name=="PORT_PCL_G161")|.id'| tr -d '\r\n'` echo $PORT_ID_G161 # # ▼client, GLAN, PORT_PCL_G109 PORT_ID_G109=`curl -s $NETWORK/v2.0/ports -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.ports[]|select(.name=="PORT_PCL_G109")|.id'| tr -d '\r\n'` echo $PORT_ID_G109 # # ▼node2_162, CLAN, PORT_PCL_C162 PORT_ID_C162=`curl -s $NETWORK/v2.0/ports -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.ports[]|select(.name=="PORT_PCL_C162")|.id'| tr -d '\r\n'` echo $PORT_ID_C162 # # ▼node1_161, CLAN, PORT_PCL_C161 PORT_ID_C161=`curl -s $NETWORK/v2.0/ports -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq -r '.ports[]|select(.name=="PORT_PCL_C161")|.id'| tr -d '\r\n'` echo $PORT_ID_C161 # # ■仮想サーバ作成用設定その他 # # フレーバー(FLAVOR_REF: CPU、メモリの組み合わせ) や、 # ディスクの容量(VM_SIZE: GB単位) は、要件に合わせて適宜変更する。 # OSイメージのIDは、ポータル等により確認して設定する。 # OSイメージにより、最低限のディスク容量が決定される。 # キーペア(KEYNAME) は、sshログインする際に必要になる。 # KEYNAME には、ポータルで AZ単位であらかじめ作成しておき、作成したキーペアの名称を設定する。 # # ▼node1_161, node2_162用 FLAVOR_REF="1103" VM_NAME_node1_161="pcl_node1_161" VM_NAME_node2_162="pcl_node2_162" OS_IMAGE_ID_node="db9766f0-c95c-4f1c-bb29-304a90405e3e" #Red Hat Enterprise Linux 6.5 64bit (English) 02 VOL_SIZE_node="40" IS_DELETE="0" KEYNAME="cdp_keypair_THQ077" AZ="jp-east-1b" # # ▼client用 FLAVOR_REF="1103" VM_NAME_client="pcl-client" OS_IMAGE_ID_client="e43477ea-5120-4053-8552-d50fbed91678" #Windows Server 2012 R2 SE 64bit (Japanese) 04 VOL_SIZE_client="80" IS_DELETE="0" KEYNAME="keypair_****" ADMIN_PASS="********" AZ="jp-east-1b" # # ▼仮想サーバ作成:ノード2 curl -s $COMPUTE/v2/$PROJECT_ID/servers -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"server":{"name":"'$VM_NAME_node2_162'","availability_zone": "'$AZ'","imageRef":"","flavorRef":"'$FLAVOR_REF'","block_device_mapping_v2":[{"boot_index":"0","uuid":"'$OS_IMAGE_ID_node'","volume_size":"'$VOL_SIZE_node'","device_name":"/dev/vda","source_type":"image","destination_type":"volume","delete_on_termination":"'$IS_DELETE'"}],"key_name":"'$KEYNAME'","max_count":"1","min_count":"1","networks":[{"port":"'$PORT_ID_G162'"},{"port":"'$PORT_ID_C162'"}]},"os:scheduler_hints":{"group":"'$SERVER_GROUP_ID'"}}' | jq . # # ▼仮想サーバ作成:ノード1 curl -s $COMPUTE/v2/$PROJECT_ID/servers -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"server":{"name":"'$VM_NAME_node1_161'","availability_zone": "'$AZ'","imageRef":"","flavorRef":"'$FLAVOR_REF'","block_device_mapping_v2":[{"boot_index":"0","uuid":"'$OS_IMAGE_ID_node'","volume_size":"'$VOL_SIZE_node'","device_name":"/dev/vda","source_type":"image","destination_type":"volume","delete_on_termination":"'$IS_DELETE'"}],"key_name":"'$KEYNAME'","max_count":"1","min_count":"1","networks":[{"port":"'$PORT_ID_G161'"},{"port":"'$PORT_ID_C161'"}]},"os:scheduler_hints":{"group":"'$SERVER_GROUP_ID'"}}' | jq . # # ▼仮想サーバ作成:管理クライアント curl -s $COMPUTE/v2/$PROJECT_ID/servers -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"server":{"name":"'$VM_NAME_client'","availability_zone": "'$AZ'","imageRef":"","flavorRef":"'$FLAVOR_REF'","block_device_mapping_v2":[{"boot_index":"0","uuid":"'$OS_IMAGE_ID_client'","volume_size":"'$VOL_SIZE_client'","device_name":"/dev/vda","source_type":"image","destination_type":"volume","delete_on_termination":"'$IS_DELETE'"}],"key_name":"'$KEYNAME'","max_count":"1","min_count":"1","networks":[{"port":"'$PORT_ID_G109'"}],"metadata":{"admin_pass": "'$ADMIN_PASS'" }}}' | jq . # 2.1.4.4 # 増設ストレージの作成/アタッチ # 各ノード # # ポータルで、増設ストレージを作成して、各ノードにアタッチする。 # # 増設ストレージをアタッチしたら reboot すること。 # reboot すると、アタッチしたディスクに対して、/dev/disk/by-id で scsi id が確実に設定される。 # reboot しなくても設定される場合があるが、確実に設定されるようにするため、rebootをしておく。 # この /dev/disk/by-id に設定される scsi id を、後々の PRIMECLUSTER の設定で使用する。 # # ※例 #   [root@pcl-node2-b ~]# ls -l /dev/disk/by-id | sort -t '>' -k2 #   合計 0 #   lrwxrwxrwx 1 root root 9 1月 21 19:46 2016 virtio-35e5af39-bc0d-4850-b -> ../../vda #   lrwxrwxrwx 1 root root 10 1月 21 19:46 2016 virtio-35e5af39-bc0d-4850-b-part1 -> ../../vda1 #   lrwxrwxrwx 1 root root 10 1月 21 19:46 2016 virtio-35e5af39-bc0d-4850-b-part2 -> ../../vda2 #   lrwxrwxrwx 1 root root 10 1月 21 19:46 2016 virtio-35e5af39-bc0d-4850-b-part3 -> ../../vda3 #   lrwxrwxrwx 1 root root 9 1月 21 20:24 2016 virtio-b7529d05-7d22-48e1-b -> ../../vdb★ #   [root@pcl-node2-b ~]#