본 문서는 (주)유라클에서 제공하는 모피어스 제품군 중 “MSP Server Platform - Push”의 원활한 설치를 할 수 있도록 제품 설치에 관련한 설명과 수행 절차를 나타내는 것을 목적으로 한다. 본 문서는 Push 기능 중 UPNS 설치에 관한 내용을 기술하고 있다.
본 문서는 성능 개선, 기능 추가 등의 사항으로 내용이 변경 될 수 있다.
Server | 주요 역할 | 주요 기능 |
---|---|---|
UPNS | 메세지 전송기능 및 단말기 접속을 담당 하는 전용 서버 | 세션 관리 단말로 메세지 전송 접속 유지 현재 접속자 수 조회 발송 메시지 수 조회 수신 메시지 수 조회 로그 저장 |
설치를 하기 전 다음 사항이 준비 되어야 한다.
항목 | 설명 | 비고 |
---|---|---|
개발툴및유틸 | JAVA 1.6.0_26 |
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
다음 각 설치 항목 순으로 설치한다.
설치를 할 서버에 로그인
설치 파일을 설치할 디렉토리에업로드한다.
ex) upns_3.5.tar.gz
ex) tar xvzf upns_3.5.tar.gz
파일 경로 | 설명 |
---|---|
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 (파일 경로 고정) |
$ 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>
<receiver_sent_call_yn>Y</receiver_sent_call_yn> <!-- ehcache.xml에서 설정한 timeToLiveSeconds 시간 초과시 발송 실패처리하는 리시버API URL-->
<!-- 리시버 보낸 메세지 수신확인 URL--> <receiver_sent_msg_url>http://ip:port/rcv_register_sent_ack.ctl</receiver_sent_msg_url> <!-- 수신확인 Sleep time--> <receiver_sent_sleep_miltime>10</receiver_sent_sleep_miltime> </configuration> |
---|
$ 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> |
---|
$ 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> |
---|
upns_start.sh 스크립트 파일을 실행하여 upns를 실행한다.
$./upns_start.sh
stopl.sh 스크립트 파일을 실행하여 upns를 중지한다.
$./stop.sh
ps–ef \| grep upns
위 명령어로 upns가 실행 중인지 확인 할 수 있다
$java –jar upns.jar –version
UPNS Verion : 3.0.1
메시지 수신, 전송 툴은 윈도우용입니다.
Cmd \> mosquitto_sub.exe -h “serverip” -p 1883 -t test -q 1
Test_message
메시지 수신 대기 상태에서 메시지 전송을 하면 메시지 전달을 확인 할 수 있다.
Cmd \> mosquitto_pub.exe -h “serverip” -p 1883 -t test -m test_message -q 0
서버 | Listen | Port 번호 |
---|---|---|
UPNS | Client 요청 | 1883 |
전송 메시지 공유 | 18883 | |
모니터링 포트 | 18880 | |
Result LOG | UPNS | 10000(success), 10001(fail) |
로그레벨 | 로그내용 | 설명 |
---|---|---|
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: | 모니터링 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 접속 예외 발생 |
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 후 응답 대기 건수 |
패스워드는 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