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

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

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

$cat /etc/sysctl.conf

# General gigabit tuning:

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.ipv4.tcp_rmem = 4096 87380 16777216

net.ipv4.tcp_wmem = 4096 65536 16777216

net.ipv4.tcp_syncookies = 1

#this gives the kernel more memory for tcp

#which you need with many (100k+) open socket connections

net.ipv4.tcp_mem = 50576   64768   98152

net.core.netdev_max_backlog = 2500

# I was also masquerading the port comet was on, you might not need this

net.ipv4.netfilter.ip_conntrack_max = 1048576

$ cat /etc/security/limits.conf

* soft nproc 819200

* hard nproc 819200

* soft nofile 1048570

* hard nofile 1048570

# process별 port 제한 설정

$ vi /etc/sysctl.conf

net.ipv4.ip_local_port_range=1024 64000

(1024~64000 포트 사용가능)

$ sysctl -p

4. UPNS 설치

4-1. UPNS설치

  • 설치를 할 서버에 로그인

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

    ex) upns_3.5.tar.gz

  • 압축을 해제한다.

    ex) tar xvzf upns_3.5.tar.gz

4-2. UPNS 파일 목록

파일 경로

설명

Upns.jar

UPNS 데몬

Stop.sh

stop 스크립트

Upns_start.sh

Start 스크립트

Conf/config.xml

Upns 설정파일

Conf/ehcache.xml

캐쉬 설정파일

Conf/logback.xml

Upns log 설정파일

Conf/server_keystore.jks

서버 keystore (파일 경로 고정)

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가 실행 중인지 확인 할 수 있다

5-7. UPNS 버전 확인

$java –jar upns.jar –version

UPNS Verion : 3.0.1

6. Appendix

6-1. UPNS 설치 확인

6-1-1. 메시지 수신

메시지 수신, 전송 툴은 윈도우용입니다.

Cmd > mosquitto_sub.exe -h “serverip” -p 1883 -t test -q 1

Test_message

메시지 수신 대기 상태에서 메시지 전송을 하면 메시지 전달을 확인 할 수 있다.

6-1-2. 메시지 전송

Cmd > mosquitto_pub.exe -h “serverip” -p 1883 -t test -m test_message -q 0

6-2. UPNS 서버 Port 번호

서버

Listen

Port 번호

UPNS

Client 요청

1883

전송 메시지 공유

18883

모니터링 포트

18880

Result LOG

UPNS

10000(success), 10001(fail)

6-3. 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-4. 모니터 로그 (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 후 응답 대기 건수

6-5. SSL 통신을 위한 keystore, truststore 생성

패스워드는 msppush 로 설정

cmd> keytool -genkeypair -alias upns -keyalg RSA -validity 36000 -keystore server_keystore.jks

cmd> keytool -export -alias upns -keystore server_keystore.jks -rfc -file selfsignedcert.cer

cmd> keytool -import -alias upns -file selfsignedcert.cer -keystore upns_trust.jks