LoginSignup
8
0

More than 3 years have passed since last update.

[Oracle Cloud] DBaaS (VM) を使ってみる

Last updated at Posted at 2020-02-06

はじめに

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. ★

ディスク構成

コンソールでは、ストレージの容量を以下の画面で指定する。

Db01.png

この「使用可能なストレージ(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
8
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
0