ADW+APEXで体重管理アプリ作成のマネをしてみる① ~ Workspace の作成まで~
進め方
体重管理アプリを作りたいなと思っていたところ、あ、これAlways FreeのApexでできるじゃんとなり、
少し検索したらやりたい事を、そのままやっている記事を見つけたので、
こちらの記事を参考(ほぼマネ)にしてADW+APEXのアプリを作成したいと思います。
また、この記事で参考にしているこちらの記事も、ちょくちょく参照します。 blog.s-style.co.jp
ADW作成
Always Freeの範囲で使用したいので、「Always Free のみの構成オプションを表示」にします。迷わなくてすみますね。
作成!できた!参考記事にある通り、「APEXを開く」を押します。
APEXログイン、管理ユーザ-の作成
別タブでAPEXのログイン画面がでます。
ログインできました。
Workspace IDはとりあえず指定しません。→作成!
Wrokspaceもできました!、、が色々メニューがあります。
管理ユーザ-でログイン
一旦、ログアウトしてみます。で、w_adminでログインしなおします。
以上です。
OCI CLI から Compute Instance を作成する時に使用するコマンド
launch コマンド
以下を設定することで コンピュートを作成できる OCI_DISPLAY_NAME は インスタンスの"名前"
$ oci compute instance launch \ --display-name ${OCI_DISPLAY_NAME} \ --availability-domain ${OCI_AD} \ --image-id ${OCI_IMAGE_ID} \ --shape ${OCI_SHAPE} \ --subnet-id ${OCI_SUBNET_ID} \ --assign-public-ip ${OCI_BOOLEAN_PUBLIC_IP} \ -------- PUBLIC IP を付与する場合はTRUE --ssh-authorized-keys-file ${OCI_PUB_KEY} -------- 公開鍵パスを指定
各環境変数を設定するコマンド
$ export OCI_AD=`oci iam availability-domain list | jq -r '.data[0]["name"]'` $ echo $OCI_AD aefv:AP-TOKYO-1-AD-1
それぞれを OCIコマンドで確認する方法は以下
AD 確認
$ oci iam availability-domain list { "data": [ { "compartment-id": "ocid1.compartment.oc1..aaaaaaaafjv42qskxf4xmdv7qqcyfnjxnpkoaq33utfbxe6msltviwdyzcea", "id": "ocid1.availabilitydomain.oc1..aaaaaaaaaijs56nfsz2usbwsr6k6t5b3do7hns6ib2day6le5scrvvjpeceq", "name": "aefv:AP-TOKYO-1-AD-1" } ] }
image 確認
# 戻りのjson key 確認 $ oci compute image list | jq -r '.data[0] | keys' [ "agent-features", "base-image-id", "billable-size-in-gbs", "compartment-id", "create-image-allowed", "defined-tags", "display-name", "freeform-tags", "id", "launch-mode", "launch-options", "lifecycle-state", "listing-type", "operating-system", -- "Oracle Linux" など "operating-system-version", -- "6.10", "7", "8" など "size-in-mbs", "time-created" ] $ oci compute image list --operating-system "Oracle Linux" --operating-system-version "6.10" | jq -r '.data[] | {name:.["display-name"], oci_id:.["id"] }' { "name": "Oracle-Linux-6.10-2021.03.17-0", "oci_id": "ocid1.image.oc1.ap-tokyo-1.aaaaaaaazklpkbg2reajttkezdzenx745sfbkps362q4lu7cas3piyynbr5q" } { "name": "Oracle-Linux-6.10-2021.02.19-0", "oci_id": "ocid1.image.oc1.ap-tokyo-1.aaaaaaaaps3c7pb2boenemaac2vsgzmnxi4arjlrantbpq46lhthzvpsuc6a" } { "name": "Oracle-Linux-6.10-2021.01.12-0", "oci_id": "ocid1.image.oc1.ap-tokyo-1.aaaaaaaafaxmn7edxrtd2lw6bfzjfqh4xvzdd4nz6xjyfk3xav4wbi6ukzyq" }
shape確認
$ oci compute shape list | jq -r '.data[0] | keys ' [ "baseline-ocpu-utilizations", "gpu-description", "gpus", "is-live-migration-supported", "local-disk-description", "local-disks", "local-disks-total-size-in-gbs", "max-vnic-attachment-options", "max-vnic-attachments", "memory-in-gbs", "memory-options", "min-total-baseline-ocpus-required", "networking-bandwidth-in-gbps", "networking-bandwidth-options", "ocpu-options", "ocpus", "platform-config-options", "processor-description", "shape" ] $ oci compute shape list --region "ap-tokyo-1" --image-id "ocid1.image.oc1.ap-tokyo-1.aaaaaaaazklpkbg2reajttkezdzenx745sfbkps362q4lu7cas3piyynbr5q" | jq -r '.data[] | { shape : .["shape"], ocpus : .["ocpus"] , memory:.["memory-in-gbs"]}'
subnet id 確認
$ oci network subnet list | jq -r '.data[0] | keys' [ "availability-domain", "cidr-block", "compartment-id", "defined-tags", "dhcp-options-id", "display-name", "dns-label", "freeform-tags", "id", "ipv6-cidr-block", "ipv6-virtual-router-ip", "lifecycle-state", "prohibit-internet-ingress", "prohibit-public-ip-on-vnic", "route-table-id", "security-list-ids", "subnet-domain-name", "time-created", "vcn-id", "virtual-router-ip", "virtual-router-mac" ] oci network subnet list | jq -r '.data[] | {display_name: .["display-name"], id : .["id"]}'
Oracle RACで接続先にVIPを指定する意味の確認
Oracle RACでは各nodeにVIPが作成されるので、Clientからの接続時にはそちらを指定して接続します。 ※SCANは使用しない前提としています。
接続にVIPを使用するのは障害時に、Clientが通信エラーを検知するまでの時間を短くするためですが、今回は、そのエラー検知までの時間を確認したいと思います。
例えば、2node RACで node2が障害により停止したケースで、接続時Failoverが行われる流れは以下ですが、今回計測するのは、2~4の部分になります。
- node1、node2を接続先として定義した接続文字列 (LOAD_BALANCE=ON、FAILOVER=ON)を使用
- ここでは、先にnode2への接続が試行されたとする
- node2 は障害により停止しているので、接続できない
- Clientに接続エラーが返る
- 接続時Failoverにより、node1へ接続が試行される
- node1は正常なため接続成功する
検証をする構成
## /etc/hosts 10.0.2.15 node1.local node1 10.0.2.16 node2.local node2 10.0.2.17 node1-vip.local node1-vip 10.0.2.18 node2-vip.local node2-vip 10.0.2.19 scan.local scan
手順
- node1から、node2の物理IPと、ノードVIPを指定し簡易接続を行う
- どちらも、エラーとなりますがエラーとなるまでの時間を計測します
- 計測にはtimeコマンドを使用します
- sqlplusのオプションには -l を指定し、接続試行は1回としています
物理IPへ接続試行するコマンド
$ time (sqlplus -l APP_USER/oracle@10.0.2.16:1521/pdb1.local)
VIPへ接続試行するコマンド
$ time (sqlplus -l APP_USER/oracle@10.0.2.18:1521/pdb1.local)
結果
それぞれ、以下の様にエラーとなります。この時の real の値を確認します。
物理IPの場合
node2の物理IPへ到達できないため、
ORA-12543: TNS:destination host unreachable
エラーとなります。
[oracle@node1 ~]$ time (sqlplus -l APP_USER/oracle@10.0.2.16:1521/pdb1.local) SQL*Plus: Release 19.0.0.0.0 - Production on Sat Feb 13 16:13:30 2021 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. ERROR: ORA-12543: TNS:destination host unreachable SP2-0751: Unable to connect to Oracle. Exiting SQL*Plus real 0m3.089s user 0m0.009s sys 0m0.007s
VIPの場合
node2のVIPは node1へFailoverしていますが、
node1のリスナーはnode2-vipではLISTENしていないため、
ORA-12541: TNS:no listener
エラーとなります。
time (sqlplus -l APP_USER/oracle@10.0.2.18:1521/pdb1.local) SQL*Plus: Release 19.0.0.0.0 - Production on Sat Feb 13 16:17:09 2021 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. ERROR: ORA-12541: TNS:no listener SP2-0751: Unable to connect to Oracle. Exiting SQL*Plus real 0m0.033s user 0m0.009s sys 0m0.013s
計測結果
それぞれ5回計測し、その時の realの値のみ抜粋しています。
総じて、物理IPへ接続を試行した方がエラーとるまでに時間がかかりました。
理由は、物理IPを指定した場合はTCP接続がエラーとなるまで待機してからClientにエラーが返るのに対し、VIPを指定した場合は、node2-vipはnode1にFailoverしているため、パケットはnode1へ到達し、そこでLISTNERがLISTNERが存在しない事に気きエラーとなるからです。
## node2の物理IPへ --- $ time (sqlplus -l APP_USER/oracle@10.0.2.16:1521/pdb1.local) --- 1. real 0m3.089s 2. real 0m1.683s 3. real 0m0.224s 4. real 0m3.093s 5. real 0m1.087s ## node2のVIPへ --- $ time (sqlplus -l APP_USER/oracle@10.0.2.18:1521/pdb1.local) --- 1. real 0m0.033s 2. real 0m0.032s 3. real 0m0.025s 4. real 0m0.024s 5. real 0m0.028s
まとめ
Oracle RACで接続先に物理IPを指定した場合、接続エラーとなるまでの時間が長い事が確認できました。
接続文字列でFAILOVERを有効にしていれば、障害時も正常nodeへ接続Failoverする事ができますが、仮に物理IPを指定していた場合、TCP応答が返り接続エラーとなってからFailoverするため、新規接続に時間を要する事になります。
その他
物理IPを指定した場合は、もう少し時間がかる(TCP接続timeoutの60s)ことを期待していましたが、それよりは、かなり早い結果となりました。
これは、検証を実施した環境ではTCP timeoutまで待機せずとも、物理IPへ接続できない事が確認されたため、その時点でエラーとなったものと想像しています。
参考
こちらの資料が、Failoverの説明としても分かり易いです。
https://blogs.oracle.com/otnjp/kusakabe-004
他、記事と関係ないですが、
- Client Failover Best Practicesfor Highly Available Oracle DatabasesOracle Database 12c
https://www.oracle.com/technetwork/database/availability/client-failover-2280805.pdf - Oracle Client Failover -Under theHood
https://www.doag.org/formes/pubfiles/8587361/2016-DB-Robert_Bialek-Oracle_Client_Failover_-_Ein_Blick_hinter_die_Kulissen-Manuskript.pdf
Note - Setup Synology NAS
使いこなす機能が増えたら、書き足していく予定です
機器
- Synology DiskStation DS220j/JP [2ベイ / クアッドコアCPU搭載 / 512MBメモリ搭載]
- Seagate IronWolf 3.5" 3TB 内蔵HDD(CMR) 6Gb/s 64MB 5900rpm 24時間稼動 PC NAS向け ST3000VN007/FFP × 2
Synologyの良いところ
- 写真のバックアップ、共有の用途
- NASとして利用
- RAIDが組める(ディスク2本で、RAID 1を組んでいる)
- 無料の管理ソフト DSM(DiskStation Manager) が多機能
- QuickConnect で、外部からも接続可能
- モバイル版のアプリもあるので、スマフォからも写真アップロード可能( DS Photo)
- スマフォからの自動バックアップができる
- マルチユーザで権限管理できる
- クラウド連携できる(まだやっていない)
- 写真共有のクラウドアプリを使っている場合と比べて(個人的に) 良い点
- サービス終了しない (代わりにHWの保守がある)
- 料金が値上がりしない (代わりに電気代がかかる)
- 写真のサイズが圧縮されない
- 一眼レフから、まとめてバックアップする時にインターネットを介さない
初期設定
筐体を組み立てて、HDDを挿して、インターネット越しにDSMインストール。 細かい手順が記憶に残らない程度には簡単でした(忘れました)
管理画面
Webベースでこんな感じ
家族、親族向けの写真共有(主に息子の写真)
やりたい事
- 家族内では全ての写真を共有し、アップロードも自由にしたい
- 親族内では一部のアルバムを共有したい
やっている設定
他にも良いやりかたが、あるとは思うので模索中....
ユーザ、アカウント
- 家族には個人それぞれにアカウントを作成、管理者権限を持っている
- 親族には、世帯ごとにアカウントを作成(参照用)した
権限
- DS Photo でアルバムを作成する際には、「公開アルバム」、「個人アルバム」、「パスワードつきアルバム」が選択できる
- 「個人アルバム」は写真共有の管理画面(Photo Station) で権限を与えたユーザのみ操作ができる(参照、写真のアップ)、ただし管理者権限を持つユーザも操作ができる
- 「公開アルバム」はすべてのユーザが参照できる(写真のアップはできない)
- ユーザごとに細かく権限を与えたい場合(一方の親族に公開したい) は、Photo Stationの管理画面(PCから)で権限を付与する
アルバムの作り方
- 普段はアルバムを「個人アルバム」で作成するか「公開アルバム」で作成するかで、誰に見せるかを制御している
- 家族内で共有するアルバムは「個人アルバム」で作成し、家族内の他のユーザは管理者権限を持っているので参照、写真もアップできる
- 親族と共有するアルバムは「公開アルバム」で作成し、親族のアカウントからも参照できる
- アルバムの作成と、アルバムの公開設定はスマフォアプリからでもできる
写真のみかた
- 家族、親族には DS Photo をインストールしてもらい、QuickConnect の機能でインターネット経由で写真など見てもらう
Tips
- アルバム作成した時にデフォルトで、「公開アルバム」にするか「個人アルバム」にするか設定できる、「個人アルバム」にしておいた方が無難