UPNS 설치가이드

1. 개요

1-1. 목적

본 문서는 (주)유라클에서 제공하는 모피어스 제품군 중 “MSP Server Platform - Push”의 원활한 설치를 할 수 있도록 제품 설치에 관련한 설명과 수행 절차를 나타내는 것을 목적으로 한다. 본 문서는 Push 기능 중 UPNS 설치에 관한 내용을 기술하고 있다.

1-2. 고려 사항

본 문서는 성능 개선, 기능 추가 등의 사항으로 내용이 변경 될 수 있다.

2. UPNS 서버 구성도

2-1. UPNS 서버 구성 개념도

image1

2-2. 구성 요소

Server

주요 역할

주요 기능

UPNS

메세지 전송기능 및 단말기 접속을 담당 하는 전용 서버

세션 관리

단말로 메세지 전송

접속 유지

현재 접속자 수 조회

발송 메시지 수 조회

수신 메시지 수 조회

로그 저장

3. 설치 준비

3-1. 설치 전 필요한 프로그램

설치를 하기 전 다음 사항이 준비 되어야 한다.

항목

설명

비고

개발툴및유틸

JAVA 1.6.0_26 이상

권장 1.8

3-2. 시스템 환경 설정(Linux 기준)

UPNS 서버가 50만 유저를 접속 하기 위해서는 다음 사항이 설정 되어야 한다.

# vi /etc/security/limits.conf

> 아래 구문 추가(계정이 morpheus 라는 가정, 실제 계정 반영필요)

morpheus soft nproc 819200

morpheus hard nproc 819200

morpheus soft nofile 1048570

morpheus hard nofile 1048570

# vi /etc/security/limits.d/20-nproc.conf

> 동일 디렉토리에 다른 파일이 있을 경우 그 파일도 해당

> *로 시작하는 구문 아래처럼 주석처리

#* soft nproc 4096

# vi /etc/sysctl.conf

> 최하단에 다음을 추가

net.core.somaxconn=65535

vm.overcommit_memory=1

net.ipv4.ip_local_port_range = 1024 64000

> 만약, OS 방화벽 iptable, firewall 사용시 아래 다음줄 추가 적용하지만, 아닐 경우 추가 안함

net.nf_conntrack_max = 500000

# sysctl -p

> 설정 반영

# vi /etc/rc.local

> 최하단에 다음을 추가

echo never > /sys/kernel/mm/transparent_hugepage/enabled

> 아래 명령을 실행(시스템 재기동 없이 적용하기 위함)

# echo never > /sys/kernel/mm/transparent_hugepage/enabled

> CentOS 7.0 이상일 경우 다음도 진행함

# systemctl enable rc-local.service

4. UPNS 설치

4-1. UPNS설치

  • 설치를 할 서버에 로그인

  • 설치 파일을 설치할 디렉토리에업로드한다.

    ex) upns_3.5.tar.gz

  • 압축을 해제한다.

    ex) tar xvzf upns_3.5.tar.gz

4-2. UPNS 파일 목록

파일 경로

설명

upns-5.xx.xx-ee.jar

UPNS 데몬

stop.sh

stop 스크립트

upns_start.sh

start 스크립트

conf/config.xml

upns 설정파일

conf/ehcache.xml

캐쉬 설정파일

conf/logback.xml

upns log 설정파일

conf/license.cer

모피어스 라이센스

conf/license.key

모피어스 라이센스

5. UPNS의 실행

5-1. 서버 Config파일 설정

$ vi conf/config.xml *해당 값은 유라클에 문의 후 설정 바랍니다.

<configuration>

<!– listen 포트 –>

<port>1883</port>

<!—SSL 서비스 포트

<ssl_port >8883</ssl_port>

<!—SSL 암호화 방식 지정 *기본으로 설정하지 않으면 자동으로 결정

<ssl_cipher_suite></ssl_cipher_suite>

<!– 전송 정보 수신 포트 –>

<cache_port>18883</cache_port>

<!– 모니터링 포트 –>

<monitor_port>18880</monitor_port>

<!– 전송 정보 공유 서버 지정 , 단독 설치시 UPNS 사용안함 : 127.0.0.1–>

<broker_server_ip>1.0.0.1,1.0.0.2</broker_server_ip>

<!– 메시지 발송 결과 전송 서버 지정 ip, port 사용안함: 0.0.0.0 –>

<log_server_ip>1.0.0.1,1.0.0.2</log_server_ip>

<log_server_port>10000</log_server_port>

<!– 발송 정보 캐쉬 공유 주기 1000ms –>

<cache_replication_interval>1000</cache_replication_interval>

<!– 세션 idle 타임아웃 (분) 기본값 :30분 –>

<idle_timeout_min>30</idle_timeout_min>

<!– 메시지 처리 쓰레드 카운트–>

<protocol_thread_count>5</protocol_thread_count>

<!– Message 큐 사이즈 –>

<max_message_queue_size>10000</max_message_queue_size>

<!– 메시지 사이즈 제한 (byte) MaxSize 268435455 bytes, 기본값:제한 없음 –>

<message_size_limit>0</message_size_limit>

<!– offline 메시지 전송 주기(초) 기본값 : 0 사용 안함 –>

<resend_interval>0</resend_interval>

<!– 메시지 큐 사이즈 제한 기본값 : 0 사용안함 –>

<queue_size>0</queue_size>

<!– 사용자당 메시지 보관 갯수 –>

<cache_user_msg_count>10</cache_user_msg_count>

<!– 결과 로그 전달 주기 10s –>

<result_log_send_interval>10</result_log_send_interval>

<!– 오프라인 메시지 전달 주기 s(현재 미구현) –>

<offline_send_interval>60</offline_send_interval>

<!– 모니터링 정보 출력 간격 30s –>

<monitor_print_interval>10</monitor_print_interval>

<!– 리시버의 수신확인, 실패 처리 URL 호출 여부. N일경우 아래의 설정 모두 소용없음–>

<receiver_sent_call_yn>Y</receiver_sent_call_yn>

<!– ehcache.xml에서 설정한 timeToLiveSeconds 시간 초과시 발송 실패처리하는 리시버API URL–>

<receiver_fail_msg_url>`*http://ip:port/rcv_fail_msg_ack.ctl</receiver_fail_msg_url* <http://ip:port/rcv_fail_msg_ack.ctl%3c/receiver_fail_msg_url>`__>

<!– 리시버 보낸 메세지 수신확인 URL–> <receiver_sent_msg_url>`*http://ip:port/rcv_register_sent_ack.ctl</receiver_sent_msg_url* <http://ip:port/rcv_register_sent_ack.ctl%3c/receiver_sent_msg_url>`__>

<!– 수신확인 Sleep time–>

<receiver_sent_sleep_miltime>10</receiver_sent_sleep_miltime>

</configuration>

5-2. Logback 설정

$ vi conf/logback.xml

<?xml version=”1.0” encoding=”UTF-8”?>

<configuration scan=”true” scanPeriod=”60 seconds”>

<appender name=”SERVER” class=”ch.qos.logback.core.rolling.RollingFileAppender”>

<prudent>true</prudent>

<rollingPolicy class=”ch.qos.logback.core.rolling.TimeBasedRollingPolicy”>

<fileNamePattern>./log/logFile.%d{yyyy-MM-dd-HH}.log</fileNamePattern>

<maxHistory>12</maxHistory>

</rollingPolicy>

<encoder>

<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %class - %msg%n</pattern>

</encoder>

</appender>

<appender name=”STDOUT” class=”ch.qos.logback.core.ConsoleAppender”>

<layout class=”ch.qos.logback.classic.PatternLayout”>

<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %class - %msg%n</pattern>

</layout>

</appender>

< !–해당 경로 수신확인 임시 로그 경로로 고정되어 있습니다. result 경로 수정하지 마세요.–>

<appender name=”PUBACK” class=”ch.qos.logback.core.rolling.RollingFileAppender”>

<prudent>true</prudent>

<rollingPolicy class=”ch.qos.logback.core.rolling.TimeBasedRollingPolicy”>

<fileNamePattern>./result/RESULT.%d{yyyy-MM-dd-HHmm}.log</fileNamePattern>

<maxHistory>36</maxHistory>

</rollingPolicy>

<encoder>

<pattern>%msg%n</pattern>

</encoder>

</appender>

<appender name=”MONITOR” class=”ch.qos.logback.core.rolling.RollingFileAppender”>

<prudent>true</prudent>

<rollingPolicy class=”ch.qos.logback.core.rolling.TimeBasedRollingPolicy”>

<fileNamePattern>./log/monitor.%d{yyyy-MM-dd-HH}.log</fileNamePattern>

<maxHistory>1440</maxHistory>

</rollingPolicy>

<encoder>

<pattern>%d{HH:mm:ss.SSS} %msg%n</pattern>

</encoder>

</appender>

<!—수신확인 결과 저장 –>

<logger name=”puback”>

<appender-ref ref=”PUBACK” />

</logger>

<!—모니터링 로그 –>

<logger name=”monitor” level=”INFO”>

<appender-ref ref=”MONITOR”/>

</logger>

<!—UPNS 서버 로그 –>

<logger name=”server” level=”INFO”>

<appender-ref ref=”SERVER” />

</logger>

</configuration>

5-3. Cache 설정

$ vi conf/ehcache.xml

<?xml version=”1.0” encoding=”UTF-8”?>

<ehcache>

<diskStore path=”user.dir/cache” />

<cache name=”publish”

maxEntriesLocalHeap=”100000”

eternal=”false”

overflowToDisk=”false”

diskPersistent=”false”

timeToIdleSeconds=”30”

timeToLiveSeconds=”30”

memoryStoreEvictionPolicy=”FIFO”/>

<!—timeToIdleSeconds,timeToLiveSeconds 를 수정해서 offline 메시지 보관기간 설정 가능

<cache name=”offmessage”

maxElementsInMemory=”500000”

eternal=”false”

overflowToDisk=”true”

diskSpoolBufferSizeMB=”200”

diskPersistent=”true”

diskExpiryThreadIntervalSeconds=”100”

timeToIdleSeconds=”86400”

timeToLiveSeconds=”86400”

memoryStoreEvictionPolicy=”FIFO” />

<cache name=”sessioncheck”

maxEntriesLocalHeap=”1000”

overflowToDisk=”false”

diskPersistent=”false”

timeToIdleSeconds=”1”

timeToLiveSeconds=”1”

memoryStoreEvictionPolicy=”FIFO”/>

</ehcache>

5-4. UPNS 실행

upns_start.sh 스크립트 파일을 실행하여 upns를 실행한다.

$./upns_start.sh

5-5. UPNS 중지

stopl.sh 스크립트 파일을 실행하여 upns를 중지한다.

$./stop.sh

5-6. UPNS 실행 확인

ps–ef | grep upns 으로upns가 실행 중인지 확인 할 수 있다

6. Appendix

6-1. UPNS 서버 Port 번호

서버

Listen

Port 번호

UPNS

Client 요청

1883

전송 메시지 공유

18883

모니터링 포트

18880

6-2. UPNS 서버 로그

서버 로그 (logger name=”server”)

로그레벨

로그내용

설명

DEBUG

CONNECT clientid

사용자 접속 정보 (사용자 ID)

SUBSCRIBE topic,clientid

구독 정보 (토픽, 사용자 ID)

PUBLISH clientid,topic,msgid

발송 정보 (수신자 ID, 토픽, msgid)

PUBLISH subscribe clientid,topic,msgid

오프라인 발송정보 (수신자 ID, 토픽, msgid)

PUBACK clientid,msgid

수신 확인 응답 (사용자 ID)

PUBACK session check clientid,msgid

세션체크용 수신 확인 응답(사용자 ID)

DISCONNECT clientid

접속종료 (사용자 ID)

PINGREQ clientid:

PING 수신 (사용자 ID)

closed clientid

사용자 접속 종료(네트워크 종료)

Cache Send fail

캐쉬 정보 전달 실패

Cache send Success

캐쉬 정보 전달 성공

CacheRemove info

캐쉬 삭제 사용자 정보(다른 서버 전달 성공)

CacheRemove complete

캐쉬 삭제 완료

Result log send

로그 전송 내용

Log send success

로그 전달 성공

Log send fail

로그 전달 실패

Monitor request host:$host,uri:$

모니터링 API 호출 정보

INFO

duplicate login id

중복 로그인 정보

VERIONS:

UPNS 버전 정보

Upns cache server started at port

캐쉬 서버 포트(메시지 전송 결과 공유)

upns socket server started at port

MQTT 서버 시작 기본포트 1883

Upns monitor server started at port

모니터링 리슨 포트

Server stopping

서버 중지중..(캐쉬 정보 파일로 저장)

Server stopped

서버 중지

connect cache server

캐쉬 서버 접속 성공

connect fail cache server

캐쉬 서버 접속 실패

Result log connect try server:

로그 서버 접속 시도 정보

Result log connect server

로그 서버 접속 성공

Reslut log connect fail server

로그 서버 접속 실패

ERROR

subscribe exception clientid

구독 프로토콜 예외발생

Result log Exception msg

전송 결과 전달중 예외 발생

broker exception clientid

MQTT 접속 예외 발생

6-3. 모니터 로그 (logger name=”monitor”)

Monitor 로그 정보

설명

INFO

CPU Usage

cpu 사용률

current session count

현재 세션 개수 접속자수

current topic count

현재 토픽 구독 개수

publish count

publish 요청 받은 개수

puback count

publish 후 puback 수신 개수

offline cache user

발송 실패 사용자 수

publish cache count

publish 후 응답 대기 건수