tomy_125 の メモ

個人的な見解や、感想を記載しており、何らかの組織を代表してのものではありません。

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"]}'

Synolgy Cloud Sync - バックアップ先クラウドの容量単価比較

Synology Cloud Syncを利用するにあたり、バックアップ先のクラウドストレージの容量単価を調べていきたいと思います。

連携可能なCloud Storage (2021/03/01時点)

f:id:tomy_125:20210301011526j:plainf:id:tomy_125:20210301011603j:plain
cloudsync

単価比較

有名どころで、使いそうなものから調べて行きたいと思います。

Linuxのあれこれ

コマンド集

  • uptime
  • dmesg | tail
  • vmstat 1
  • mpstat -P ALL 1
  • pidstat 1
  • iostat -xz 1
  • free -m
  • sar -n DEV 1
  • sar -n TCP,ETCP 1
  • top
  • pstree -alp
  • netstat -natop

リンク集

コンテキストスイッチ

コンテキストスイッチの回数を調べる - syohex’s diary

自発的(voluntary)なコンテキストスイッチは、sched_yieldを呼び出した場合や IO待ち等で発生したコンテキストスイッチを示します。非自発的(nonvoluntary) なコンテキストスイッチは走行時間を使い切ったとかより優先度が 高いプロセスをすぐに動かす必要がある場合等に発生したコンテキストスイッチを 示します。

[root@node1 ~]# pidstat -p 841 -w 1
Linux 4.14.35-1818.3.3.el7uek.x86_64 (node1.local)      02/28/21        _x86_64_        (2 CPU)

00:31:41      UID       PID   cswch/s nvcswch/s  Command
00:31:42        0       841      1.00      0.00  bash
00:31:43        0       841    122.00     91.00  bash
00:31:44        0       841    134.00     71.00  bash
00:31:45        0       841    145.00     64.00  bash
00:31:46        0       841    136.00     71.00  bash
00:31:47        0       841     77.00     30.00  bash
````

# シェル芸
* [https://qiita.com/laikuaut/items/1daa06900ad045d119b4:title]

Oracle Cloud Infrastructure (OCI)でネットワーク障害を模擬する方法

以下を思いつきました。

ネットワーク障害で対向先が突然応答しなくなるケースを模擬したいです。

OCIのセグメント間通信をセキュリティ・リストにより許可する時に、
イングレス、エグレスルールをステートフルで設定すると、 戻りの通信も併せて許可されてしまいます。

なので、ステートレスでルールを設定し、通信を行っている状態で、戻りの通信のルールを削除してあげれば、 対向先が突然応答しなくなるケースを作れるはずです。

今度試してみたいと思います。

参考

セキュリティ・ルール

Linux のtimeコマンドで計測されるもの

time コマンドで計測されるものの、イメージについてメモ。

timeコマンドの出力の意味。

real 指定したコマンドを実行するためにかかった時間
user 指定したコマンドを実行するため使用したユーザーCPU時間
sys 指定したコマンドを実行するために使ったシステムCPU時間

【 time 】コマンド(bash)――コマンドの実行時間を計測する:Linux基本コマンドTips(251) - @IT

real - user - sys で残るのは、IOとかネットワーク待機のはず。
なので、IOする処理を計測してみました。

[root@node1 ~]# time (dd bs=1G count=1 if=/dev/zero of=outfile)
1+0 レコード入力
1+0 レコード出力
1073741824 バイト (1.1 GB) コピーされました、 3.38811 秒、 317 MB/秒
real    0m3.583s
user    0m0.001s
sys     0m1.738s

Oracle RACで接続先にVIPを指定する意味の確認

Oracle RACでは各nodeにVIPが作成されるので、Clientからの接続時にはそちらを指定して接続します。 ※SCANは使用しない前提としています。

接続にVIPを使用するのは障害時に、Clientが通信エラーを検知するまでの時間を短くするためですが、今回は、そのエラー検知までの時間を確認したいと思います。

例えば、2node RACで node2が障害により停止したケースで、接続時Failoverが行われる流れは以下ですが、今回計測するのは、2~4の部分になります。

  1. node1、node2を接続先として定義した接続文字列 (LOAD_BALANCE=ON、FAILOVER=ON)を使用
  2. ここでは、先にnode2への接続が試行されたとする
  3. node2 は障害により停止しているので、接続できない
  4. Clientに接続エラーが返る
  5. 接続時Failoverにより、node1へ接続が試行される
  6. node1は正常なため接続成功する

検証をする構成

  • Vitrual Box上の2node RAC、19c
  • node1 は起動、node2はOS停止(障害により停止したという想定)
  • IPアドレスの設定
## /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の説明としても分かり易いです。
基本からわかる!高性能×高可用性データベースシステムの作り方 第4回 高可用性構成でのOracle Net構成(1) | Oracle Technology Network Japan Blog

他、記事と関係ないですが、

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ベースでこんな感じ f:id:tomy_125:20210129011713p:plain

家族、親族向けの写真共有(主に息子の写真)

やりたい事

  • 家族内では全ての写真を共有し、アップロードも自由にしたい
  • 親族内では一部のアルバムを共有したい

やっている設定

他にも良いやりかたが、あるとは思うので模索中....

ユーザ、アカウント
  • 家族には個人それぞれにアカウントを作成、管理者権限を持っている
  • 親族には、世帯ごとにアカウントを作成(参照用)した
    権限
  • DS Photo でアルバムを作成する際には、「公開アルバム」、「個人アルバム」、「パスワードつきアルバム」が選択できる
  • 「個人アルバム」は写真共有の管理画面(Photo Station) で権限を与えたユーザのみ操作ができる(参照、写真のアップ)、ただし管理者権限を持つユーザも操作ができる
  • 「公開アルバム」はすべてのユーザが参照できる(写真のアップはできない)
  • ユーザごとに細かく権限を与えたい場合(一方の親族に公開したい) は、Photo Stationの管理画面(PCから)で権限を付与する
    アルバムの作り方
  • 普段はアルバムを「個人アルバム」で作成するか「公開アルバム」で作成するかで、誰に見せるかを制御している
  • 家族内で共有するアルバムは「個人アルバム」で作成し、家族内の他のユーザは管理者権限を持っているので参照、写真もアップできる
  • 親族と共有するアルバムは「公開アルバム」で作成し、親族のアカウントからも参照できる
  • アルバムの作成と、アルバムの公開設定はスマフォアプリからでもできる
    写真のみかた
  • 家族、親族には DS Photo をインストールしてもらい、QuickConnect の機能でインターネット経由で写真など見てもらう

Tips

  • アルバム作成した時にデフォルトで、「公開アルバム」にするか「個人アルバム」にするか設定できる、「個人アルバム」にしておいた方が無難