[15] RAC Interconnect, HAIP에 대한 가벼운 정리

들어가기에 앞서


이번 시간에 다룰 내용은 RAC 네트워크의 핵심 부분인 Interconnect와 관련된 몇 가지 내용입니다. 네트워크 분야는 제가 잘 모르는 분야이므로 학습한 내용을 바탕으로 DBA들이 알면 도움이 될 만한 몇 가지 내용들과 제가 궁금했던 몇 가지 내용을 정리하는 수준으로 글을 작성했습니다. 여기 나오는 대부분의 내용은 아래 책의 내용을 참고했습니다.



질문1. 인터커넥트용 NIC는 어떻게 확인할 수 있나요?


오라클은 다양한 방법으로 인터커넥트용 NIC를 확인할 수 있는 방법을 제공합니다.

1. $GRID_HOME/bin/oifcfg 명령어를 이용한 방법

[oracle@rac1 SS]$ oifcfg getif
eth0  192.168.56.0  global  public
eth1  192.168.10.0  global  cluster_interconnect

Note
명령어 수행 결과 eth1 NIC가 인터커넥트용임을 알 수 있습니다.

 [oracle@rac1 SS]$ oifcfg iflist -p -n
eth0  192.168.56.0  PRIVATE  255.255.255.0
eth1  192.168.10.0  PRIVATE  255.255.255.0
eth1  169.254.0.0   UNKNOWN  255.255.0.0
eth2  10.0.4.0      PRIVATE  255.255.255.0

Note
명령어 수행 결과 eth1에는 2개의 IP 대역이 설정되어 있음을 알 수 있습니다. 169.254.0.0은 11gR2부터 제공되는 HAIP 대역대입니다. 따라서 명령어 수행결과 에 169.254.0.0이 출력된다면 해당 시스템은 HAIP를 사용하는 것입니다. (HAIP는 질문-2 참조)

2. X$KSXPIA fixed 테이블 및 GV$CLUSTER_INTERCONNECTS 뷰를 이용한 방법

select pub_ksxpia  as is_public,
       name_ksxpia as name,
       ip_ksxpia   as ip_address
from   x$ksxpia;

IS_PUBLIC  NAME            IP_ADDRESS
---------- --------------- ----------------
N          eth1:1          169.254.237.87 

select inst_id,
       name,
       ip_address,
       is_public
from   gv$cluster_interconnects
order by inst_id;

   INST_ID NAME            IP_ADDRESS       IS_
---------- --------------- ---------------- ---
         1 eth1:1          169.254.237.87   NO
         2 eth1:1          169.254.240.162  NO

Note
쿼리 수행 결과를 통해 인터커넥트용 NIC는 eth1:1이며 실제 IP도 확인할 수 있습니다. 여기서 보이는 인터커넥트용 IP가 /etc/hosts 파일에 설정한 private ip와 다른 경우에는 11gR2부터 제공하는 HAIP를 사용하고 있다고 보시면 됩니다. (HAIP는 질문-2 참조)

3. ALERT LOG를 이용한 방법

LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Initial number of CPU is 2
Number of processor cores in the system is 2
Number of processor sockets in the system is 1
Private Interface 'eth1:1' configured from GPnP for use as a private interconnect.
  [name='eth1:1', type=1, ip=169.254.237.87, mac=08-00-27-27-95-03, net=169.254.0.0/16, mask=255.255.0.0, use=haip:cluster_interconnect/62]
Picked latch-free SCN scheme 3

Note
Alert Log에서도 인터커텍트용 NIC, IP, HAIP 사용 여부등을 확인할 수 있습니다.

질문-2. HAIP란 무엇인가요?


HAIP (Highly Available IP)에 대한 설명은 아래의 2개의 문서를 참고하시면 좋습니다.

간단히 요약하면, 기존에는 NIC의 이중화를 위해 OS 레벨의 NIC 본딩과 같은 기법을 사용했으나, 11gR2부터는 이러한 이중화 역시 GI (Grid Infrastructure)에서 관리하겠다는 것입니다.예를 들어 1개의 private network을 설정했다면 (예 eth1: 192.168.10.1) 해당 NIC에 169.254로 시작되는 HAIP가 자동으로 설정됩니다. (예시-1 참조) HAIP는 최대 4개까지 설정이 가능하며 이를 통해 가용성과 성능 향상을 꾀함과 동시에 기존에 OS 의존적이던 부분들을 점차적으로 GI 안의 관리포인트로 끌어들인다는 의미로도 해석할 수 있습니다.

예시-1. HAIP 예제

[oracle@rac1 SS]$ ifconfig -a
eth1      Link encap:Ethernet  HWaddr 08:00:27:27:95:03
          inet addr:192.168.10.1  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe27:9503/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7991199 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7288897 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5681272569 (5.2 GiB)  TX bytes:4967857149 (4.6 GiB)

eth1:1    Link encap:Ethernet  HWaddr 08:00:27:27:95:03
          inet addr:169.254.237.87  Bcast:169.254.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 [oracle@rac1 SS]$ cat /etc/hosts
127.0.0.1   localhost localhost.dbaora.com
#public
192.168.56.2    ap1         ap1.dbaora.com
192.168.56.71   rac1        rac1.dbaora.com
192.168.56.72   rac2        rac2.dbaora.com
#private
192.168.10.1    rac1-priv   rac1-priv.dbaora.com
192.168.10.2    rac2-priv   rac2-priv.dbaora.com


질문3. 인터커넥트용 NIC 속도는 어떻게 확인할 수 있을까요?


ethtool 명령어를 이용해서 NIC 속도를 확인할 수 있습니다. 명령어 수행 후에 Speed 부분을 확인하면 됩니다.

[oracle@rac1 SS]$ ethtool eth1
Settings for eth1:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: off (auto)
Cannot get wake-on-lan settings: Operation not permitted
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes


질문-4. 네트워크 관련 주요 파라미터는 무엇이고 어떻게 확인할 수 있을까요?


인터커넥트의 성능을 위해서는 TCP 관련 파라미터인 net.core.rmem_max, net.core.wmem_max, net.ipv4.tcp_rmem, net.ipv4.tcp_wmem 설정이 매우 중요합니다. 해당 내용에 대해서는 아래의 블로그를 꼭 한번씩 보시기 바랍니다. 아주 자세하고 정확하게 기술되어 있습니다.

해당 설정 값들은 sysctl -p로 확인할 수 있으며, 아래와 같이 V$OSSTAT 뷰를 통해서도 확인이 가능합니다.

col "net.ipv4.tcp_wmem"  for a30
col "net.ipv4.tcp_rmem"  for a30
col "net.core.wmeme_max" for a10
col "net.core.rmeme_max" for a10
select
    max(decode(stat_name,'TCP_SEND_SIZE_MIN',       value))||' '||
    max(decode(stat_name,'TCP_SEND_SIZE_DEFAULT',   value))||' '||
    max(decode(stat_name,'TCP_SEND_SIZE_MAX',       value)) "net.ipv4.tcp_wmem",
    max(decode(stat_name,'TCP_RECEIVE_SIZE_MIN',    value))||' '||
    max(decode(stat_name,'TCP_RECEIVE_SIZE_DEFAULT',value))||' '||
    max(decode(stat_name,'TCP_RECEIVE_SIZE_MAX',    value)) "net.ipv4.tcp_rmem",
    max(decode(stat_name,'GLOBAL_SEND_SIZE_MAX',    value)) "net.core.wmem_max",
    max(decode(stat_name,'GLOBAL_RECEIVE_SIZE_MAX', value)) "net.core.rmem_max"
from v$osstat

net.ipv4.tcp_wmem  net.ipv4.tcp_rmem   net.core.wmem_max net.core.rmem_max
------------------ ------------------- ----------------- -----------------
4096 16384 4194304 4096 87380 6291456  1048576           4194304


질문-5. 특정 시점의 RAC 노드 간의 PING 속도를 확인할 수 있는 방법이 있을까요?


오라클은 11g부터 ping 프로세스를 이용해서 노드 간의 ping 속도 (500바이트, 8Kb)를 측정합니다. 조금 아쉬운 부분은 ping 프로세스가 주기적으로 (대략 10여초에 1회) 체크한 성능 정보는 실시간 뷰로는 제공되지 않으며 DBA_HIST_INTERCONNECT_PINGS 테이블을 통해서 집계된 정보만을 제공한다는 점입니다.

글을 마치며


이상으로 간단하게 RAC 네트워크 부분을 정리했습니다. 제가 하드웨어 적인 백그라운드 지식이 없다 보니 설치, 구성, HA, 서비스, ASM, 네트워크 부분의 학습에 오랜 시간이 걸렸습니다. 이제부터는 본격적으로 캐시 퓨전 동작원리 및 성능에 대해서 집중적으로 다룰 예정입니다. 기존 내용보다는 좀 더 흥미가 있으리라 생각됩니다.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s