본문 바로가기
Tibero/Tibero6

신규 기능 - Listener Multi-port

by dan.de.lion 2016. 11. 10.

신규 기능 - Listener Multi-port


Listener Multi-port

테스트 환경

OS : OEL release 7.2
Tibero : 6 FS04

Listener Multi-port


  • Tibero에서 Listener란 DBMS에 접속 요청을 받아들이는 프로세스로 LISTENER_PORT를 통해 접속요청을 받아들인다.
  • Listener Multi-port란 결국 기존에는 한개만 설정 가능했던 LISTENER_PORT를 다양하게 설정할 수 있게 해주는 기능이다.
  • 단, Windows 버전에서는 현재 미지원이다.

기능 테스트


동적 리스너 포트 할당 및 해제


  • 리스너 포트란 앞서 설명한 LISTENER_PORT를 의미하다.
  • 동적이란 표현은 DBMS의 재기동 등의 수행없이 바로 적용가능하다는 의미이다.
  • 즉, 재기동 등의 작업없이 바로 LISTENER_PORT의 추가가 가능한 방식이다.
  • 동적 리스너 포트 할당 및 해제는 ALTER SYSTEM LISTENER ADD|DELETE PORT 사용포트구문을 통해 가능하다.
  • ALTER SYSTEM 권한이 있는 계정을 통해 설정 가능하다.
  • 본 테스트에서는 SYS계정에서 진행한다.
  • 우선 아래와 같이 포트 할당이 가능하다.
SQL> ALTER SYSTEM LISTENER ADD PORT 9268 ;

System altered.

SQL>
  • OS의 netstat 명령을 통해 포트상태를 확인하다.
$ netstat -nap | grep tblistener
tcp        0      0 0.0.0.0:16620           0.0.0.0:*               LISTEN      1246/tblistener
tcp        0      0 0.0.0.0:9268            0.0.0.0:*               LISTEN      1246/tblistener
  • $TB_HOME/client/config/tbdsn.tbr파일에 신규 포트를 통한 접속정보를 등록한다.
#-------------------------------------------------
# /tibero/tb6FS04/client/config/tbdsn.tbr
# Network Configuration File.
# Generated by gen_tip.sh at Wed Apr 27 04:10:31 KST 2016
tb6FS04=(
    (INSTANCE=(HOST=localhost)
              (PORT=16620)
              (DB_NAME=tb6FS04)
    )
)
tb6_new=(
    (INSTANCE=(HOST=localhost)
              (PORT=9268)
              (DB_NAME=tb6FS04)
    )
)
  • 신규포트로 정상 접속되는지 확인해본다.
$ tbsql sys/tibero@tb6_new

tbSQL 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.

Connected to Tibero using tb6_new.

SQL>
  • netstat 명령을 통해 확인해본다. (터미널을 추가로 열어서 확인한다.)
  • 로컬에서 접속했으므로 나가고 들어오는 정보가 보이므로 결과가 2개 추가되어 보인다.
  • 원격지인 경우 정상적으로 1개만 추가된다.((Session x 1)개다.)
netstat -na | grep 9268
tcp        0      0 0.0.0.0:9268            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:11635         127.0.0.1:9268          ESTABLISHED
tcp        0      0 127.0.0.1:9268          127.0.0.1:11635         ESTABLISHED
  • 할당했던 포트를 해제한다.
  • 기존 접속이 남아있는 경우에도 수행가능하다.
  • 다만, 해당의 경우 기존에 생성된 Session은 영향을 받지 않는다.(접속이 유지된다.)
SQL> ALTER SYSTEM LISTENER DELETE PORT 9268 ;

System altered.

SQL>
  • netstat 명령을 통해 확인해본다.
$ netstat -nap | grep tblistener
tcp        0      0 0.0.0.0:16620           0.0.0.0:*               LISTEN      1210/tblistener

$ netstat -na | grep 9268
tcp        0      0 127.0.0.1:11635         127.0.0.1:9268          ESTABLISHED
tcp        0      0 127.0.0.1:9268          127.0.0.1:11635         ESTABLISHED
  • 추가했던 접속정보(tb6_new)로 접속을 시도하면 에러가 발생한다.
$ tbsql sys/tibero@tb6_new

tbSQL 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.

TBR-2131: Generic I/O error.

SQL>

정적 리스너 포트 할당 및 해제


  • 앞서 설명한 동적과는 대치되는 개념으로 DBMS 재기동을 통해서만 적용이 가능하다.
  • TIP1 파일에 EXTRA_LISTENER_PORTS 파라미터 설정을 추가하여 원하는 포트를 할당한다.
  • 이 파라미터는 ;이 구분자이자 종결자이다.
  • 따라서 EXTRA_LISTENER_PORTS=9268;5787;과 같은 형태로 작성해야한다.
  • EXTRA_LISTENER_PORTS=9268;5787처럼 작성하면 9268포트만 설정된다.
  • TIP 파일은 $TB_HOME/config/$TB_SID.tip로 존재한다.
# tip file generated from /tibero/tb6FS04/config/tip.template (Wed Apr 27 04:10:31 KST 2016)
#-------------------------------------------------------------------------------
#
# RDBMS initialization parameter
#
#-------------------------------------------------------------------------------

DB_NAME=tb6FS04
#_LSNR_SPECIAL_PORT=8629
LISTENER_PORT=16620
CONTROL_FILES="/tibero/tb6dataFS04/c1.ctl"
DB_CREATE_FILE_DEST="/tibero/tb6dataFS04"
LOG_ARCHIVE_DEST="/tibero/tb6archFS04"
#CERTIFICATE_FILE="/tibero/tb6FS04/config/svr_wallet/tb6FS04.crt"
#PRIVKEY_FILE="/tibero/tb6FS04/config/svr_wallet/tb6FS04.key"
#WALLET_FILE="/tibero/tb6FS04/config/svr_wallet/WALLET"
#EVENT_TRACE_MAP="/tibero/tb6FS04/config/event.map"

MAX_SESSION_COUNT=20

TOTAL_SHM_SIZE=512M
MEMORY_TARGET=1G


AUTHENTICATION_TIMEOUT=100

# e.g. EXTRA_LISTENER_PORTS=9268;9999;1004;
EXTRA_LISTENER_PORTS=9268;
  • 설정을 마치면 재기동이 필요하다.
  • 참고로 TIP 파일은 NOMOUNT 모드로 기동되는 단계에서 읽혀 사용된다.
  • 전단계와 마찬가지로 netstat 명령으로 확인가능하다.
$ tbdown

Tibero instance terminated (NORMAL mode).

$ tbboot
Listener port = 16620

Tibero 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.
Tibero instance started up (NORMAL mode).
$ netstat -nap | grep tblistener
tcp        0      0 0.0.0.0:16620           0.0.0.0:*               LISTEN      8233/tblistener
tcp        0      0 0.0.0.0:9268            0.0.0.0:*               LISTEN      8233/tblistener
  • 접속테스트는 전단계와 동일하므로 생략한다.
  • 포트의 할당 해제는 해당파라미터 제거로 가능하다.
  • 본 테스트에서는 주석처리를 했다.
  • 여러개 포트를 준 경우 해당 포트를 삭제하면 된다.
    (e.g. 9268;9999;1004; -> 9268;1004;)
# tip file generated from /tibero/tb6FS04/config/tip.template (Wed Apr 27 04:10:31 KST 2016)
#-------------------------------------------------------------------------------
#
# RDBMS initialization parameter
#
#-------------------------------------------------------------------------------

DB_NAME=tb6FS04
#_LSNR_SPECIAL_PORT=8629
LISTENER_PORT=16620
CONTROL_FILES="/tibero/tb6dataFS04/c1.ctl"
DB_CREATE_FILE_DEST="/tibero/tb6dataFS04"
LOG_ARCHIVE_DEST="/tibero/tb6archFS04"
#CERTIFICATE_FILE="/tibero/tb6FS04/config/svr_wallet/tb6FS04.crt"
#PRIVKEY_FILE="/tibero/tb6FS04/config/svr_wallet/tb6FS04.key"
#WALLET_FILE="/tibero/tb6FS04/config/svr_wallet/WALLET"
#EVENT_TRACE_MAP="/tibero/tb6FS04/config/event.map"

MAX_SESSION_COUNT=20

TOTAL_SHM_SIZE=512M
MEMORY_TARGET=1G


AUTHENTICATION_TIMEOUT=100

#e.g. EXTRA_LISTENER_PORTS=9268;9999;1004;
#EXTRA_LISTENER_PORTS=9268;
  • Tibero를 재기동하면 추가로 할당되었던 포트는 사라진다.
  • 과정은 생략한다.

백그라운드 프로세스 재시작 기능


  • 명칭 그대로 백그라운드 프로세스재시작하는 기능이다.
  • 메뉴얼의 설명을 빌리면 다음과 같다.
    기존에 백그라운드 프로세스들이 비정상 종료됨으로 인하여 Tibero가 다운되는 현상이 있었다.
    이를 개선하기 위하여 일부 백그라운드 프로세스의 경우 비정상 종료 시에 자동으로 재기동함으로써 안정성이 향상되었다.
  • 설명은 그럴듯한데 기능은 빈약하다.(꿈은 높은데 현실은 시궁창이야.)
  • 결론부터 말하자면 Listener만 재시작된다.
  • 우선 백그라운드 프로세스들을 죽여보자.
  • 참고로 tbdown pid라는 명령을 통해 Tibero의 프로세스 별 PID 확인이 가능하다.(이건 편하네)
$ tbdown pid
5749: MPROC
5751: TBMP
5752: WP000
5753: WP001
5754: AGNT
5755: DBWR
5756: RECO

$ kill -9 5756
$ ps -fu $USER
UID        PID  PPID  C STIME TTY          TIME CMD
tibero    1139  1138  0 09:16 pts/0    00:00:01 -bash
tibero    5828  1139  0 17:46 pts/0    00:00:00 ps -fu tibero
  • WP로 시작하는 워커 프로세스(Worker Process)는 클라이언트와 실제로 통신을 하며 사용자의 요구 사항을 처리하는 프로세스이다2.
  • 워커 프로세스(구 워킹 프로세스 WT로 시작)는 5버전에서도 죽여도 DBMS가 죽진 않았다.
  • 따라서 워커 프로세스를 제외하고 아무거나 골랐다.
  • 가장 아래있는 RECO 프로세스를 선택했고 죽였다.
  • DBMS도 죽는다. 다른 프로세스들(MPROC, TBMP, AGNT, DBWR) 중 무엇을 죽이든 결과는 같다.
  • 결국 Tibero는 백그라운드 프로세스 중 하나만 죽어도 다운된다.
  • 참고로 워커 프로세스를 죽이면 WP000을 제외한 하나당 _WTHR_PER_PROC 파라미터 값만큼 접속 가능 세션이 줄어든다.
  • 다 죽이면 Session Full 에러가 발생한다.
$ tbdown pid
1261: MPROC
1263: TBMP
1264: WP000
1265: WP001
1266: AGNT
1267: DBWR
1268: RECO
$ kill -9 1264 1265
$ ps -fu $USER
UID        PID  PPID  C STIME TTY          TIME CMD
tibero    1152  1150  0 09:44 pts/0    00:00:00 -bash
tibero    1261     1  5 09:44 pts/0    00:00:02 tbsvr          -t NORMAL -SVR_SID tb6FS04
tibero    1262  1261  0 09:44 pts/0    00:00:00 /tibero/tb6FS04/bin/tblistener -n 11 -t NO
tibero    1263  1261  0 09:44 pts/0    00:00:00 tbsvr_TBMP     -t NORMAL -SVR_SID tb6FS04
tibero    1266  1261  1 09:44 pts/0    00:00:00 tbsvr_AGNT     -t NORMAL -SVR_SID tb6FS04
tibero    1267  1261  0 09:44 pts/0    00:00:00 tbsvr_DBWR     -t NORMAL -SVR_SID tb6FS04
tibero    1268  1261  1 09:44 pts/0    00:00:00 tbsvr_RECO     -t NORMAL -SVR_SID tb6FS04
tibero    1333  1152  0 09:45 pts/0    00:00:00 ps -fu tibero
$ tbsql sys/tibero

tbSQL 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.

TBR-12003: Unable to open a session.

SQL>
  • tbdown pid에는 나오지 않지만 아직 tblistener 프로세스가 남아있다.(리스너 프로세스)
  • 죽여보자.
  • 앞서 언급했던 바와 같이 리스너만 되살아난다.
$ ps -fu $USER | grep tblistener
tibero    1417  1416  0 10:22 pts/0    00:00:00 /tibero/tb6FS04/bin/tblistener -n 11 -t NORMAL -SVR_SID tb6FS04
tibero    1509  1152  0 10:42 pts/0    00:00:00 grep --color=auto tblistener
$ kill -9 1417
$ Listener port = 16620

$ ps -fu $USER | grep tblistener
tibero    1510  1416  0 10:43 pts/0    00:00:00 /tibero/tb6FS04/bin/tblistener -n 11 -t NORMAL -SVR_SID tb6FS04
tibero    1512  1152  0 10:43 pts/0    00:00:00 grep --color=auto tblistener

야로가 있다


야로 1


정적으로 할당된 포트도 동적으로 해제가 가능하다.
- 우선 정적으로 할당한다.(과정은 생략)

$ netstat -nap | grep tblistener
tcp        0      0 0.0.0.0:16620           0.0.0.0:*               LISTEN      1510/tblistener     
tcp        0      0 0.0.0.0:9268            0.0.0.0:*               LISTEN      1510/tblistener   
  • 동적으로 해제한다.
SQL> ALTER SYSTEM LISTENER DELETE PORT 9268 ;

System altered.

SQL> 
  • 확인해 보자.
$ netstat -nap | grep tblistener
tcp        0      0 0.0.0.0:16620           0.0.0.0:*               LISTEN      1510/tblistener    

야로 2


백그라운드 프로세스 재시작 기능을 사용하면 재기동 없이 정적인 방법으로 할당 및 해제할 수 있다.
이방법의 장점은 추가된 포트의 관리가 쉽다는 점이다.
동적으로 할당되는 경우 할당된 포트를 확인하는 방법은 OS 명령밖에 없다.
정적으로 할당되는 경우 매번 재기동이 필요하다.
이 둘의 장점은 합친 방법이다.
재기동이 필요없이 포트를 할당(또는 해제)할 수 있으며 TIP 파일에서 명시적으로 확인할 수 있다.
- 우선 TIP 파일의 EXTRA_LISTENER_PORTS 파라미터를 9268;9999;18629;로 설정한다.
- 이어서 리스너를 죽인다.

$ netstat -nap | grep tblistener
tcp        0      0 0.0.0.0:16620           0.0.0.0:*               LISTEN      1510/tblistener   
$ grep EXTRA_LISTENER_PORTS $TB_HOME/config/$TB_SID.tip
EXTRA_LISTENER_PORTS=9268;9999;18629;
$ ps -fu $USER | grep tblistener
tibero    1510  1416  0 10:22 pts/0    00:00:00 /tibero/tb6FS04/bin/tblistener -n 11 -t NORMAL -SVR_SID tb6FS04
tibero    1590  1152  0 10:42 pts/0    00:00:00 grep --color=auto tblistener
$ kill -9 1510
$ Listener port = 16620

$ netstat -nap | grep tblistener
tcp        0      0 0.0.0.0:18629           0.0.0.0:*               LISTEN      1605/tblistener     
tcp        0      0 0.0.0.0:16620           0.0.0.0:*               LISTEN      1605/tblistener     
tcp        0      0 0.0.0.0:9999            0.0.0.0:*               LISTEN      1605/tblistener     
tcp        0      0 0.0.0.0:9268            0.0.0.0:*               LISTEN      1605/tblistener    
  • 정상적으로 할당된 것을 알 수 있다.
  • EXTRA_LISTENER_PORTS 파라미터를 9268;로 변경하고 다시 해보자.
$ grep EXTRA_LISTENER_PORTS $TB_HOME/config/$TB_SID.tip
EXTRA_LISTENER_PORTS=9268;
$ ps -fu $USER | grep tblistener
tibero    1605  1416  0 10:22 pts/0    00:00:00 /tibero/tb6FS04/bin/tblistener -n 11 -t NORMAL -SVR_SID tb6FS04
tibero    1612  1152  0 10:42 pts/0    00:00:00 grep --color=auto tblistener
$ kill -9 1605
$ Listener port = 16620

$ netstat -nap | grep tblistener
tcp        0      0 0.0.0.0:16620           0.0.0.0:*               LISTEN      1613/tblistener     
tcp        0      0 0.0.0.0:9268            0.0.0.0:*               LISTEN      1613/tblistener     

여담


원래는 백그라운드 프로세스 재시작 기능을 테스트할 계획이었다.
하지만, 해당 기능이 Listener에만 해당되어 본 페이지에 포함되었다.
근데 정작 리스너는 백그라운드 프로세스에 포함되지 않는다.
그냥 리스너 프로세스 재시작 기능이라고 하던가 뭔가 골탕먹이려는것 같다. (당했다)
기능이 근본부터 잘못된거 같다.
Oracle의 경우 필수 백그라운드 프로세스를 죽이면 DBMS가 죽는다.
Tibero의 경우 백그라운드 프로세스로 분류되는 모든 프로세스가 필수인것 같다.


  1. TIP: 티베로 초기화 파라미터 즉, “Tibero Initialization Parameter”의 약자이다. 일반적으론 그러한 Parameter를 설정하는 파일을 의미한다. 자세한 내용은 추후에 다루기로 한다.(지금은 귀찮다)
  2. 워커 프로세스: 워커 프로세스

'Tibero > Tibero6' 카테고리의 다른 글

신규 기능 - Recursive With  (0) 2017.05.29
신규 기능 - 원격 저장소를 가진 실체화 뷰  (0) 2017.05.22
신규기능 - Partition Exchange  (0) 2017.01.05
신규기능 - BINARY TIP  (0) 2017.01.03
신규 기능 - OFFLINE FOR DROP  (0) 2016.11.03

댓글