###########################################################
# 導入運用手引書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 ~]#