はじめに
DBaaSを触れそうなOracle Cloudの案件があるため、どんな感じになるか見てみた。
作る
作り方は大きく2つ。コンソールから画面でポチポチか、oci cliを使うか。
oci cliのほうが指定が大変なのだが、(現時点で) oci cliのほうが優れてそうな点を一つ発見。DBユニーク名を指定できる!
画面でポチポチの場合、DBユニーク名を指定できそうな画面がない。そのまま作ると、ランダムな文字列がDB名の後ろに付与された。
・oci cliで--db-unique-name を指定した場合
$ srvctl config database
ora19c ★ 指定した値がそのままDBユニーク名になる
$ crsctl stat res -t -w "TYPE == ora.database.type"
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora19c.db
1 ONLINE ONLINE db19c Open,HOME=/u01/app/o
racle/product/19.0.0
.0/dbhome_1,STABLE
--------------------------------------------------------------------------------
・画面でポチポチした場合
$ srvctl config database
db19c2_nrt148 ★ _xxxの文字が自動で付与される(DB名はdb19c2で指定)
$ crsctl stat res -t -w "TYPE == ora.database.type"
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.db19c2_nrt148.db ★ DBユニーク名でクラスタ登録される
1 ONLINE ONLINE db19c2 Open,HOME=/u01/app/o
racle/product/19.0.0
.0/dbhome_1,STABLE
--------------------------------------------------------------------------------
構成
構成で気づいたことをざっくばらんに。
全体的に、ODA(Oracle Database Appliance)のSMモデルに似た構成。
OS設定関連
sshd_config
Computeインスタンスを普通に作成した場合と違うところ。以下のディレクティブが追加されてる。
# grep -v ^# /etc/ssh/sshd_config |grep -v ^$
PermitRootLogin no
ClientAliveInterval 900
ClientAliveCountMax 0
AllowUsers opc
UseDNS no
AllowUsers grid
AllowUsers oracle
特に、ClientAliveCountMaxとClientAliveIntervalの設定が追加されていることにより、15分間何も操作しないと、sshの接続が切れてしまう。
接続切れると困るような場合は、ssh接続時に以下のようにKeepAliveを15分以内(ClientAliveInterval 以下の値)に送信するようにオプションをつけとくとよさそう
$ ssh -o ServerAliveInterval=60 opc@db19c.xxx.xxx.xx
ntp
OEL7ベースではあるが、chronyではなくてntpがインストールされて動作している
普通のコンピュートインスタンスの場合
# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 169.254.169.254 2 10 377 437 -3280ns[-6289ns] +/- 20ms
DBaaS(VM)インスタンスの場合
# chronyc sources
-bash: chronyc: command not found
# ntpq -pn
remote refid st t when poll reach delay offset jitter
==============================================================================
162.159.200.1 .STEP. 16 u - 1024 0 0.000 0.000 0.000
195.154.223.198 .STEP. 16 u - 1024 0 0.000 0.000 0.000
45.63.54.13 .STEP. 16 u - 1024 0 0.000 0.000 0.000
178.79.152.182 .STEP. 16 u - 1024 0 0.000 0.000 0.000
*169.254.169.254 192.168.0.151 2 u 412 1024 377 0.407 0.073 0.155
※169.254.169.254以外の時刻ソースは、デフォルトのx.rhel.pool.ntp.org
# ps -ef |grep ntp |grep -v grep
ntp 15315 1 0 Feb06 ? 00:00:00 /usr/sbin/ntpd -u ntp:ntp -g
stepへの切り替え閾値を変更するオプション(-x)はついてないようだ
カーネルパラメータ
チューニングされてるパラメータを見ると面白い。インストールの前提パラメータ以外にもチューニングされている。
# grep -v ^# /etc/sysctl.d/* |grep -v ^$
…
/etc/sysctl.d/99-sysctl.conf:fs.suid_dumpable=1
/etc/sysctl.d/99-sysctl.conf:kernel.core_pattern=core.%e.%p
/etc/sysctl.d/99-sysctl.conf:net.ipv4.conf.all.arp_announce=2
/etc/sysctl.d/99-sysctl.conf:net.ipv4.conf.all.arp_ignore=1
/etc/sysctl.d/99-sysctl.conf:net.ipv4.conf.all.arp_filter=1
/etc/sysctl.d/99-sysctl.conf:net.core.rmem_max=134217728
/etc/sysctl.d/99-sysctl.conf:net.core.wmem_max=134217728
/etc/sysctl.d/99-sysctl.conf:net.ipv4.tcp_rmem=4096 87380 134217728
/etc/sysctl.d/99-sysctl.conf:net.ipv4.tcp_wmem=4096 65536 134217728
/etc/sysctl.d/99-sysctl.conf:net.core.netdev_max_backlog=300000
/etc/sysctl.d/99-sysctl.conf:net.ipv4.tcp_moderate_rcvbuf=1
/etc/sysctl.d/99-sysctl.conf:net.ipv6.conf.all.disable_ipv6 = 1
/etc/sysctl.d/99-sysctl.conf:net.ipv6.conf.default.disable_ipv6 = 1
/etc/sysctl.d/99-sysctl.conf:vm.min_free_kbytes=524288
/etc/sysctl.d/99-sysctl.conf:net.ipv4.conf.all.accept_redirects = 0
/etc/sysctl.d/99-sysctl.conf:net.ipv4.conf.default.accept_redirects = 0
/etc/sysctl.d/99-sysctl.conf:kernel.pid_max = 99999
/etc/sysctl.d/99-sysctl.conf:vm.nr_hugepages=4032
SGAを増やしたいは、nr_hugepagesに注意が必要そう。nr_hugepagesも一緒に増やす必要がある。
※上記は、ShapeにVM.Standard2.1を指定した場合の値
OS Watcherが動いてる
ODAと同じように、/etc/rc.localから起動していると思ったら、
# grep -i osw /etc/rc.local
runuser root -c "/opt/oracle/oak/oswbb/startOSWbb.sh 10 504 gzip /opt/oracle/oak/oswbb/archive " 1>/dev/null
実際に動いているプロセスは、tfaから起動しているぽい
# ps -ef |grep -i osw
grid 44809 1 0 13:02 ? 00:00:12 /bin/sh ./OSWatcher.sh 30 48 NONE /u01/app/grid/tfa/repository/suptools/db19c/oswbb/grid/archive
grid 45215 44809 0 13:02 ? 00:00:02 /bin/sh ./OSWatcherFM.sh 48 /u01/app/grid/tfa/repository/suptools/db19c/oswbb/grid/archive
なんで?と思い、/etc/rc.localのコマンドを実行してみて納得
# runuser root -c "/opt/oracle/oak/oswbb/startOSWbb.sh 10 504 gzip /opt/oracle/oak/oswbb/archive "
bash: /opt/oracle/oak/oswbb/startOSWbb.sh: Permission denied
# ll /opt/oracle/oak/oswbb/startOSWbb.sh
-rw-r--r-- 1 root root 2574 Jul 15 2019 /opt/oracle/oak/oswbb/startOSWbb.sh
# grep "Permission denied" /var/log/messages
Feb 5 21:58:38 localhost rc.local: bash: /opt/oracle/oak/oswbb/startOSWbb.sh: Permission denied
# tfactl toolstatus
…
.------------------------------------------------------------------.
| TOOLS STATUS - HOST : db19c |
+----------------------+--------------+--------------+-------------+
| Tool Type | Tool | Version | Status |
+----------------------+--------------+--------------+-------------+
| Development Tools | orachk | 12.2.0.1.3 | DEPLOYED |
+----------------------+--------------+--------------+-------------+
| Support Tools Bundle | oswbb | 8.1.2 | RUNNING |★
| | prw | 12.1.13.11.4 | NOT RUNNING |
…
dcs-agent
ODAと同じように、dcs-agentが起動している。
# systemctl status initdcsagent
● initdcsagent.service - Oracle dcs-agent startup
Loaded: loaded (/etc/systemd/system/initdcsagent.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2020-02-06 14:10:52 JST; 5h 53min ago
Main PID: 43233 (sh)
CGroup: /system.slice/initdcsagent.service
├─43233 /bin/sh -c /bin/java -Xms128m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+DisableExplicitGC -XX:ParallelGCThr...
└─43234 /bin/java -Xms128m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+DisableExplicitGC -XX:ParallelGCThreads=4 -XX:...
Feb 06 14:10:52 db19c systemd[1]: Started Oracle dcs-agent startup.
ODAと同じならば、dbcliコマンドとかでジョブを実行したときに、実行の主体となっているのがこいつになると思われる。まれによくハングしてたりするんだよな、、こいつ。
firewall
通常のコンピュートインスタンスはfirewalldが起動しているが、DBaaSのインスタンスは、iptablesによって設定されており、firewalldはインストールすらされていない
# rpm -q firewalld
package firewalld is not installed
# iptables -L -n -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1017K 4143M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
66 5544 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
48243 30M ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
43 8164 ACCEPT all -- ens4 * 0.0.0.0/0 0.0.0.0/0
13 780 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:1521 /* Required for access to Database Listener, Do not remove or modify. */
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:6200 /* This rule is recommended and enables the Oracle Notification Services (ONS) to communicate about Fast Application Notification (FAN) events. */
17 1020 ACCEPT tcp -- * * 169.254.0.0/16 0.0.0.0/0 state NEW tcp dpt:7070 /* Required for instance management by the Database Service, Do not remove or modify. */
★ 169.254.0.0/16からdcs-agentへの通信許可
16 960 ACCEPT tcp -- * * 169.254.0.0/16 0.0.0.0/0 state NEW tcp dpt:7060 /* Required for instance management by the Database Service, Do not remove or modify. */
★ 169.254.0.0/16からdcs-controllerへの通信許可
0 0 ACCEPT tcp -- * * 169.254.0.0/16 0.0.0.0/0 state NEW tcp dpt:22 /* Required for instance management by the Database Service, Do not remove or modify. */
69 37289 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
GIの構成
ディスクの格納先にASMを選んだ場合、シングルデータベースでもGIがインストールされる。
OracleインスタンスやリスナーがORA-600などで落ちたときにリスタートしてくれるので、少しでも可用性をあげたいならASMのほうがよさそう。
RestartではなくシングルRACのような変わった構成。vipも存在しているが、物理IPと同じアドレスで定義されてる。※シングルだから
無意味に192.168.16.0/24のネットワーク(ens4)も存在してASM Listenerも起動してる。ODAはよく触ってるので見慣れた感じはするが、初めて触る人は戸惑いそう。
$ ip -f inet -o addr
1: lo inet 127.0.0.1/8 scope host lo\ ///
★2: ens3 inet 10.0.2.17/24 brd 10.0.2.255 scope global dynamic ens3\ ///
3: ens4 inet 192.168.16.18/24 brd 192.168.16.255 scope global ens4\ ///
$ srvctl config vip -node $(hostname -s)
VIP exists: network number 1, hosting node db19c2
VIP Name: db19c2-vip.xxx.xxx.xx.xx
VIP IPv4 Address: 10.0.2.17 ★ 物理IPと同じ
VIP IPv6 Address:
VIP is enabled. ★
…
scanも(同じIPで)構成されているが無効化されてる。(※シングルだから)
$ srvctl config scan
SCAN name: db19c2-scan, Network: 1
Subnet IPv4: 10.0.2.0/255.255.255.0/ens3, static ★ 物理IPと同じ
Subnet IPv6:
SCAN 1 IPv4 VIP: 10.0.2.17
SCAN VIP is disabled. ★
ディスク構成
コンソールでは、ストレージの容量を以下の画面で指定する。
この「使用可能なストレージ(GB)」と、「合計ストレージの容量(GB)」の差分は何なのかについて調べた。
上記画面のように構成すると、物理ディスクが以下のように構成される。
・指定したサイズの1/4のサイズのディスクが4本付与されて、DATAディスクグループを構成
・指定したサイズの1/4のサイズのディスクが4本付与されて、RECOディスクグループを構成
・インストールバイナリ用に200GB (/u01ファイルシステム)
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 58G 0 disk
|-sda1 8:1 0 486M 0 part /boot/efi
|-sda2 8:2 0 1.4G 0 part /boot
`-sda3 8:3 0 52.2G 0 part
|-VolGroupSys4-LogVolRoot 249:0 0 35G 0 lvm /
`-VolGroupSys4-LogVolSwap 249:1 0 16G 0 lvm [SWAP]
sdb 8:16 0 64G 0 disk ★DATA DG用
sdc 8:32 0 64G 0 disk ★DATA DG用
sdd 8:48 0 64G 0 disk ★DATA DG用
sde 8:64 0 64G 0 disk ★DATA DG用
sdf 8:80 0 64G 0 disk ★RECO DG用
sdg 8:96 0 64G 0 disk ★RECO DG用
sdh 8:112 0 64G 0 disk ★RECO DG用
sdi 8:128 0 64G 0 disk ★RECO DG用
sdj 8:144 0 200G 0 disk /u01 ★インストールバイナリ用
asm!commonstore-237 248:121345 0 5G 0 disk /opt/oracle/dcs/commonstore
※2020.09に確認したところ、ローカルディスクサイズが変わったみたいです。
===========================================
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 68G 0 disk ★
|-sda1 8:1 0 486M 0 part /boot/efi
|-sda2 8:2 0 1.4G 0 part /boot
`-sda3 8:3 0 61.5G 0 part
|-VolGroupSys0-LogVolRoot 249:0 0 45G 0 lvm /
`-VolGroupSys0-LogVolSwap 249:1 0 16G 0 lvm [SWAP]
…
===========================================
$ asmcmd lsdg
State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 512 4096 4194304 262144 253532 0 253532 0 Y DATA/
MOUNTED EXTERN N 512 512 4096 4194304 262144 258524 0 258524 0 N RECO/
↑ 外部冗長性
$ asmcmd lsdsk -p
Group_Num Disk_Num Incarn Mount_Stat Header_Stat Mode_Stat State Path
1 2 4042417267 CACHED MEMBER ONLINE NORMAL /dev/DATADISK1
1 1 4042417268 CACHED MEMBER ONLINE NORMAL /dev/DATADISK2
1 0 4042417266 CACHED MEMBER ONLINE NORMAL /dev/DATADISK3
1 3 4042417265 CACHED MEMBER ONLINE NORMAL /dev/DATADISK4
2 0 4042417283 CACHED MEMBER ONLINE NORMAL /dev/RECODISK1
2 1 4042417282 CACHED MEMBER ONLINE NORMAL /dev/RECODISK2
2 2 4042417281 CACHED MEMBER ONLINE NORMAL /dev/RECODISK3
2 3 4042417284 CACHED MEMBER ONLINE NORMAL /dev/RECODISK4
$ ll /dev/*DISK*
lrwxrwxrwx 1 root root 3 Feb 6 19:04 /dev/DATADISK1 -> sdb
lrwxrwxrwx 1 root root 3 Feb 6 19:04 /dev/DATADISK2 -> sdc
lrwxrwxrwx 1 root root 3 Feb 6 19:04 /dev/DATADISK3 -> sdd
lrwxrwxrwx 1 root root 3 Feb 6 19:04 /dev/DATADISK4 -> sde
lrwxrwxrwx 1 root root 3 Feb 6 19:03 /dev/RECODISK1 -> sdf
lrwxrwxrwx 1 root root 3 Feb 6 19:03 /dev/RECODISK2 -> sdg
lrwxrwxrwx 1 root root 3 Feb 6 19:03 /dev/RECODISK3 -> sdh
lrwxrwxrwx 1 root root 3 Feb 6 19:04 /dev/RECODISK4 -> sdi
$ cat /etc/udev/rules.d/70-names.rules
KERNEL=="sd*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360c68fxxx", SYMLINK+="DATADISK1", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360f84fxxx", SYMLINK+="DATADISK2", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="3606a79xxx", SYMLINK+="DATADISK3", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360a021xxx", SYMLINK+="DATADISK4", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360fa8cxxx", SYMLINK+="RECODISK1", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360d01xxx", SYMLINK+="RECODISK2", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360298xxx", SYMLINK+="RECODISK3", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360877xxx", SYMLINK+="RECODISK4", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360f41xxx", SYMLINK+="localdisk", OWNER="grid", GROUP="asmadmin", MODE="0660"
DATAから、ACFS用のボリュームが切り出されて、ACFS(/opt/oracle/dcs/commonstore)が作成される。ここには、walletなどが格納されている。
$ ll /opt/oracle/dcs/commonstore/wallets/tde/*/
total 28
-rw------- 1 oracle asmadmin 5864 Feb 6 13:41 cwallet.sso
-rw------- 1 oracle asmadmin 5819 Feb 6 13:40 ewallet.p12
-rw------- 1 oracle asmadmin 2555 Feb 6 13:40 ewallet_2020020604405730_defaultTag.p12
$ asmcmd volinfo -G DATA -a
Diskgroup Name: DATA
Volume Name: COMMONSTORE
Volume Device: /dev/asm/commonstore-237
State: ENABLED
Size (MB): 5120
Resize Unit (MB): 64
Redundancy: UNPROT
Stripe Columns: 8
Stripe Width (K): 1024
Usage: ACFS
Mountpath: /opt/oracle/dcs/commonstore
# acfsutil info fs /opt/oracle/dcs/commonstore/
/opt/oracle/dcs/commonstore/
ACFS Version: 19.0.0.0.0
on-disk version: 49.0
compatible.advm: 19.0.0.0.0
ACFS compatibility: 19.0.0.0.0
flags: MountPoint,Available,KiloSnap
creation time: Thu Feb 6 15:30:16 2020
mount time: Thu Feb 6 19:57:24 2020
mount sequence number: 0
number of nodes: 1
allocation unit: 4096
metadata block size: 4096
volumes: 1
total size: 5368709120 ( 5.00 GB )
total free: 4964773888 ( 4.62 GB )
file entry table allocation: 8650752
primary volume: /dev/asm/commonstore-125
label:
state: Available
major, minor: 248, 64001
logical sector size: 512
size: 5368709120 ( 5.00 GB )
free: 4964773888 ( 4.62 GB )
metadata read I/O count: 2112
metadata write I/O count: 10
total metadata bytes read: 8650752 ( 8.25 MB )
total metadata bytes written: 40960 ( 40.00 KB )
ADVM diskgroup: DATA
ADVM resize increment: 67108864
ADVM redundancy: unprotected
ADVM stripe columns: 8
ADVM stripe width: 1048576
number of snapshots: 0
snapshot space usage: 0 ( 0.00 )
replication status: DISABLED
compression status: DISABLED