infra検証 blog

oracle成分多めです。

Oracle RACのSCAN IPを2つで設定してみる

はじめに

今までSCAN IPは1つか3つで設定してきました。

マニュアルにはSCAN IPは3つが推奨と書いてありますが、DBノードが2つだったらSCAN IP(LISTENER)も2つで設定すれば無駄がない?

試したことがなかったので、すでにあるSCAN 3つの環境を2つヘ変更するベースで手順を確認しました。

これができるなら、インストール時も問題ないはず。

結論

SCAN IPを2つでも設定できる。

環境

  • OS:RHEL7.8
  • Oracle Database EE / Grid Infrastructure 19.8
  • 2ノードのRAC One Node構成です。

手順

事前確認

まずは、設定を確認していきます。

  • SCAN IP
[root@ron1901 ~]# /u01/app/19.0.0/grid/bin/srvctl config scan
SCAN name: ronscan19, Network: 1
Subnet IPv4: 172.16.2.0/255.255.255.0/ens192, static
Subnet IPv6: 
SCAN 1 IPv4 VIP: 172.16.2.37
SCAN VIP is enabled.
SCAN 2 IPv4 VIP: 172.16.2.35
SCAN VIP is enabled.
SCAN 3 IPv4 VIP: 172.16.2.36
SCAN VIP is enabled.
  • SCAN_LISTENER config
[root@ron1901 ~]# /u01/app/19.0.0/grid/bin/srvctl config scan_listener
SCAN Listeners for network 1:
Registration invited nodes: 
Registration invited subnets: 
Endpoints: TCP:1521
SCAN Listener LISTENER_SCAN1 exists
SCAN Listener is enabled.
SCAN Listener LISTENER_SCAN2 exists
SCAN Listener is enabled.
SCAN Listener LISTENER_SCAN3 exists
SCAN Listener is enabled.
  • SCAN_LISTENER status
[grid@ron1901 ~]$ lsnrctl status LISTENER_SCAN2

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 12-DEC-2020 17:26:17

Copyright (c) 1991, 2020, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_SCAN2
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                12-DEC-2020 16:09:55
Uptime                    0 days 1 hr. 16 min. 21 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/19.0.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/ron1901/listener_scan2/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN2)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.2.35)(PORT=1521)))
Services Summary...
Service "-MGMTDBXDB" has 1 instance(s).
  Instance "-MGMTDB", status READY, has 1 handler(s) for this service...
Service "86b638145ff27a6fe053f706e80a81f1" has 1 instance(s).
  Instance "-MGMTDB", status READY, has 1 handler(s) for this service...
Service "RON" has 1 instance(s).
  Instance "RON_1", status READY, has 1 handler(s) for this service...
Service "RONXDB" has 1 instance(s).
  Instance "RON_1", status READY, has 1 handler(s) for this service...
Service "SVRON" has 1 instance(s).
  Instance "RON_1", status READY, has 1 handler(s) for this service...
Service "_mgmtdb" has 1 instance(s).
  Instance "-MGMTDB", status READY, has 1 handler(s) for this service...
Service "b3373e9486742742e0531f0210ac53a7" has 1 instance(s).
  Instance "-MGMTDB", status READY, has 1 handler(s) for this service...
Service "gimr_dscrep_10" has 1 instance(s).
  Instance "-MGMTDB", status READY, has 1 handler(s) for this service...
The command completed successfully
  • SCANリソース
[root@ron1901 ~]# /u01/app/19.0.0/grid/bin/crsctl stat res ora.scan1.vip ora.scan2.vip ora.scan3.vip ora.LISTENER_SCAN1.lsnr ora.LISTENER_SCAN2.lsnr ora.LISTENER_SCAN3.lsnr -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       ron1902                  STABLE
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       ron1901                  STABLE
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       ron1901                  STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       ron1902                  STABLE
ora.scan2.vip
      1        ONLINE  ONLINE       ron1901                  STABLE
ora.scan3.vip
      1        ONLINE  ONLINE       ron1901                  STABLE
--------------------------------------------------------------------------------
  • DBのリスナー設定
[oracle@ron1901 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Dec 12 17:47:16 2020
Version 19.8.0.0.0

Copyright (c) 1982, 2020, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0

SQL> 
SQL> show parameter listener

NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
forward_listener             string
listener_networks            string
local_listener               string   (ADDRESS=(PROTOCOL=TCP)(HOST=
                         172.16.2.33)(PORT=1521))
remote_listener              string   ronscan19:1521
SQL> 

SCAN IP(SCAN名)の変更

  • 現在はronscan19を使っていますが、2つのIPでラウンドロビンされるtestscanへ変更してみます。
[root@ron1901 ~]# nslookup ronscan19
Server:     172.16.2.17
Address:    172.16.2.17#53

Name:   ronscan19.lab.local
Address: 172.16.2.35
Name:   ronscan19.lab.local
Address: 172.16.2.36
Name:   ronscan19.lab.local
Address: 172.16.2.37

[root@ron1901 ~]# 
[root@ron1901 ~]# nslookup testscan 
Server:     172.16.2.17
Address:    172.16.2.17#53

Name:   testscan.lab.local
Address: 172.16.2.50
Name:   testscan.lab.local
Address: 172.16.2.51

本番環境ではないのでアグレッシブに変更します。

[root@ron1901 ~]# /u01/app/19.0.0/grid/bin/srvctl modify scan -scanname testscan
[root@ron1901 ~]# 

先ほど確認した内容を一通り確認していきます。

  • SCAN IP
[root@ron1901 ~]# /u01/app/19.0.0/grid/bin/srvctl config scan
SCAN name: testscan, Network: 1
Subnet IPv4: 172.16.2.0/255.255.255.0/ens192, static
Subnet IPv6: 
SCAN 1 IPv4 VIP: 172.16.2.51
SCAN VIP is enabled.
SCAN 2 IPv4 VIP: 172.16.2.50
SCAN VIP is enabled.
  • SCAN_LISTENER config
[root@ron1901 ~]# /u01/app/19.0.0/grid/bin/srvctl config scan_listener
SCAN Listeners for network 1:
Registration invited nodes: 
Registration invited subnets: 
Endpoints: TCP:1521
SCAN Listener LISTENER_SCAN1 exists
SCAN Listener is enabled.
SCAN Listener LISTENER_SCAN2 exists
SCAN Listener is enabled.
  • SCAN_LISTENER status
[grid@ron1901 ~]$ lsnrctl status LISTENER_SCAN2

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 12-DEC-2020 18:13:27

Copyright (c) 1991, 2020, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_SCAN2
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                12-DEC-2020 16:09:55
Uptime                    0 days 2 hr. 3 min. 32 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/19.0.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/ron1901/listener_scan2/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN2)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.2.50)(PORT=1521)))
Services Summary...
Service "-MGMTDBXDB" has 1 instance(s).
  Instance "-MGMTDB", status READY, has 1 handler(s) for this service...
Service "86b638145ff27a6fe053f706e80a81f1" has 1 instance(s).
  Instance "-MGMTDB", status READY, has 1 handler(s) for this service...
Service "RON" has 1 instance(s).
  Instance "RON_1", status READY, has 1 handler(s) for this service...
Service "RONXDB" has 1 instance(s).
  Instance "RON_1", status READY, has 1 handler(s) for this service...
Service "SVRON" has 1 instance(s).
  Instance "RON_1", status READY, has 1 handler(s) for this service...
Service "_mgmtdb" has 1 instance(s).
  Instance "-MGMTDB", status READY, has 1 handler(s) for this service...
Service "b3373e9486742742e0531f0210ac53a7" has 1 instance(s).
  Instance "-MGMTDB", status READY, has 1 handler(s) for this service...
Service "gimr_dscrep_10" has 1 instance(s).
  Instance "-MGMTDB", status READY, has 1 handler(s) for this service...
The command completed successfully
[grid@ron1901 ~]$ 
  • SCAN リソース
[root@ron1901 ~]# /u01/app/19.0.0/grid/bin/crsctl stat res ora.scan1.vip ora.scan2.vip ora.scan3.vip ora.LISTENER_SCAN1.lsnr ora.LISTENER_SCAN2.lsnr ora.LISTENER_SCAN3.lsnr -t
CRS-2613: Could not find resource 'ora.scan3.vip'.
CRS-2613: Could not find resource 'ora.LISTENER_SCAN3.lsnr'.
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       ron1902                  STABLE
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       ron1901                  STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       ron1902                  STABLE
ora.scan2.vip
      1        ONLINE  ONLINE       ron1901                  STABLE
--------------------------------------------------------------------------------
  • DBのリスナー設定
[oracle@ron1901 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Dec 12 18:20:31 2020
Version 19.8.0.0.0

Copyright (c) 1982, 2020, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0

SQL> show parameter listener

NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
forward_listener             string
listener_networks            string
local_listener               string   (ADDRESS=(PROTOCOL=TCP)(HOST=
                         172.16.2.33)(PORT=1521))
remote_listener              string   testscan:1521
SQL>

リソースの調整と初期化パラメータremote_listenerまで書き換えてくれていました。

databaseのalert logには、以下が出力されていました。

[oracle@ron1901 oracle]$ cd $ORACLE_BASE/diag/rdbms/ron/RON_1/trace
[oracle@ron1901 trace]$ tailf alert_RON_1.log 
2020-12-12T18:06:44.251412+09:00
ALTER SYSTEM SET remote_listener=' ronscan19:1521','testscan:1521' SCOPE=MEMORY SID='RON_1';
2020-12-12T18:06:44.257388+09:00
ALTER SYSTEM SET listener_networks='' SCOPE=MEMORY SID='RON_1';
2020-12-12T18:06:46.344161+09:00
ALTER SYSTEM SET remote_listener=' ronscan19:1521','testscan:1521' SCOPE=MEMORY SID='RON_1';
2020-12-12T18:06:46.347674+09:00
ALTER SYSTEM SET listener_networks='' SCOPE=MEMORY SID='RON_1';
2020-12-12T18:06:48.572550+09:00
ALTER SYSTEM SET remote_listener=' testscan:1521' SCOPE=MEMORY SID='RON_1';
2020-12-12T18:06:48.575824+09:00
ALTER SYSTEM SET listener_networks='' SCOPE=MEMORY SID='RON_1';
2020-12-12T18:06:50.970607+09:00
ALTER SYSTEM SET remote_listener=' testscan:1521' SCOPE=MEMORY SID='RON_1';
2020-12-12T18:06:50.974416+09:00
ALTER SYSTEM SET listener_networks='' SCOPE=MEMORY SID='RON_1';
2020-12-12T18:06:56.254759+09:00
ALTER SYSTEM SET remote_listener=' testscan:1521' SCOPE=MEMORY SID='RON_1';
2020-12-12T18:06:56.257965+09:00
ALTER SYSTEM SET listener_networks='' SCOPE=MEMORY SID='RON_1';