UPNS 설치가이드¶
1. 개요¶
1-1. 목적¶
본 문서는 (주)유라클에서 제공하는 모피어스 제품군 중 “MSP Server Platform - Push”의 원활한 설치를 할 수 있도록 제품 설치에 관련한 설명과 수행 절차를 나타내는 것을 목적으로 한다. 본 문서는 Push 기능 중 UPNS 설치에 관한 내용을 기술하고 있다.
1-2. 고려 사항¶
본 문서는 성능 개선, 기능 추가 등의 사항으로 내용이 변경 될 수 있다.
2. UPNS 서버 구성도¶
2-1. UPNS 서버 구성 개념도¶
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 후 응답 대기 건수