신규 기능 - 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의 경우 백그라운드 프로세스로 분류되는 모든 프로세스가 필수인것 같다.
'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 |
댓글