# Agent 설치

## 1. 설치 파라미터 설정

Agent 프로세스를 설치하기 위해 각 계정의 설정 정보를 `$PRS_HOME/install/prs_install_agent.cfg` 파일에 작성한다.

### **설정 템플릿 예시**

```ini
############################################
#
# ProSync Agent Configurations (Template)
#
############################################
# ID have to be unique in prs_instance.map.
# It will checked when execute prs_install_agent.sh.
# Because of multi-agent environment,
# HOSTNAME(defined in /etc/hosts) is not recommended, IP will be better.
# AGENT_HOST[%d]=192.xxx.xxx.xxx

# AGENT_ID is unique key in prosync
# All nodes have to use same AGENT_ID in same agent.

AGENT_CNT=1
AGENT_ID_0=agent
AGENT_HOST_0=localhost
AGENT_PORT_0=7600
#AGENT_CM_GROUP_0=0
#AGENT_CM_ID_0=0

#AGENT_ID_1=agent2
#AGENT_HOST_1=localhost
#AGENT_PORT_1=7601
#AGENT_CM_GROUP_1=1
#AGENT_CM_ID_1=1
```

### **파라미터 설명**

<table><thead><tr><th width="190.6666259765625">파라미터</th><th>설명</th></tr></thead><tbody><tr><td><code>AGENT_CNT</code></td><td>설치할 Agent의 개수를 지정한다. 지정한 수만큼 아래 항목을 추가로 작성해야 한다. <em>(필수)</em></td></tr><tr><td><code>AGENT_ID_[n]</code></td><td>각 Agent의 고유 ID를 지정한다. 숫자로 시작할 수 없으며, 고유하게 식별 가능한 이름을 설정해야 한다. <em>(필수)</em></td></tr><tr><td><code>AGENT_HOST_[n]</code></td><td>Agent가 설치될 호스트를 지정한다. Hostname보다 IP 주소를 사용하는 것을 권장한다. <em>(필수)</em></td></tr><tr><td><code>AGENT_PORT_[n]</code></td><td>Agent가 사용할 포트를 지정한다. <em>(필수)</em></td></tr><tr><td><code>AGENT_CM_GROUP_[n]</code></td><td>CM Failover 기능을 사용하는 경우, 해당 Agent가 속한 CM 그룹 이름을 지정한다.</td></tr><tr><td><code>AGENT_CM_ID_[n]</code></td><td>CM Failover 기능을 사용하는 경우, Agent가 연결될 CM의 ID를 지정한다. 각 그룹 내에서는 중복되지 않아야 하며, 그룹이 다를 경우 중복 가능하다.</td></tr></tbody></table>

### **설정 예시**

아래는 4개의 Agent를 설정한 예시이다:

```bash
AGENT_CNT=4

AGENT_ID_0=agent1
AGENT_HOST_0=172.17.0.1
AGENT_PORT_0=7600
AGENT_CM_GROUP_0=CM1
AGENT_CM_ID_0=0

AGENT_ID_1=agent2
AGENT_HOST_1=172.17.0.2
AGENT_PORT_1=7601
AGENT_CM_GROUP_1=CM1
AGENT_CM_ID_1=1

AGENT_ID_2=agent3
AGENT_HOST_2=172.17.0.3
AGENT_PORT_2=7602
AGENT_CM_GROUP_2=CM2
AGENT_CM_ID_2=0

AGENT_ID_3=agent4
AGENT_HOST_3=172.17.0.4
AGENT_PORT_3=7603
AGENT_CM_GROUP_3=CM2
AGENT_CM_ID_3=1
```

{% hint style="warning" %}
**주의**

`AGENT_ID`, `AGENT_HOST`, `AGENT_PORT`는 반드시 설정해야 하며, 중복되지 않도록 주의해야 한다.

\
멀티 노드 환경에서는 IP 기반 설정을 권장한다.

IP 주소 입력 시 VIP(Virtual IP) 대신 실제 IP 주소를 사용할 것을 권장한다.&#x20;
{% endhint %}

###

***

## 2. Agent 설치

설정 파일(`prs_install_agent.cfg`)이 준비된 후에는 다음과 같이 설치 스크립트를 실행한다.

```bash
$ . prs_install_agent.sh [option] [config file]
```

### **사용 가능 옵션**

<table><thead><tr><th width="101.99996948242188">옵션</th><th>설명</th></tr></thead><tbody><tr><td><code>-h</code></td><td>도움말 출력</td></tr><tr><td><code>-c</code></td><td>사용할 환경설정 파일 지정 (기본값: <code>prs_install_agent.cfg</code>)</td></tr><tr><td><code>-y</code></td><td>기존 Agent 설정을 제거하고 새로 생성. <code>prs_instance.map</code>의 중복 항목도 교체됨</td></tr></tbody></table>

### **예시**

옵션 없이 기본 설정 파일로 설치를 수행하는 경우

```bash
$ cd $PRS_HOME/install
$ . prs_install_agent.sh
```

설치가 진행되면 시스템 환경 체크, 설정 파일 검증, `agent` 파일 생성 등의 단계가 자동으로 수행된다.

중간에 기존 설정 파일이 존재할 경우 덮어쓸지 여부를 묻는 메시지가 표시되며, 사용자가 Y/N으로 응답해야 한다.

**설치 예시**

```bash
********************************************************************************
* Agent Install Step (1/4)
* Check System Parameters 
********************************************************************************
* Checking system type... 
Linux

* Checking PRS_HOME... 
PRS_HOME: /home/prosync/example

********************************************************************************
* Agent Install Step (2/4)
* Check install agent config file   [prs_install_agent.cfg]  
* Check Instance file               [prs_instance.map] 
********************************************************************************
* Checking configuration file... 
[/home/prosync/example/install/prs_install_agent.cfg] exists.

* Checking Agent configuration... 
parameter check for Agent[0] Started 
    AGENT_ID: agent1
    AGENT_HOST: 172.17.0.1
    AGENT_PORT: 7600
    AGENT_CM_GROUP: CM1
    AGENT_CM_ID: 0
parameter check for Agent[0] Done 
parameter check for Agent[1] Started 
    AGENT_ID: agent2
    AGENT_HOST: 172.17.0.2
    AGENT_PORT: 7601
    AGENT_CM_GROUP: CM1
    AGENT_CM_ID: 1
parameter check for Agent[1] Done 
parameter check for Agent[2] Started 
    AGENT_ID: agent3
    AGENT_HOST: 172.17.0.3
    AGENT_PORT: 7602
    AGENT_CM_GROUP: CM2
    AGENT_CM_ID: 0
parameter check for Agent[2] Done 
parameter check for Agent[3] Started 
    AGENT_ID: agent4
    AGENT_HOST: 172.17.0.4
    AGENT_PORT: 7603
    AGENT_CM_GROUP: CM2
    AGENT_CM_ID: 1
parameter check for Agent[3] Done 

* Checking prs_instance.map file... 
[/home/prosync/example/config/prs_instance.map] exists.

********************************************************************************
* Agent Install Step (3/4)
* Writing agent config file         [/home/prosync/example/install/prs_install_agent.cfg]  
* Writing Instance file             [/home/prosync/example/config/prs_instance.map] 
* Total Agent Cnt                   [4] 
********************************************************************************
* Writing all agents.. cnt: 4
* Writing Agent.. Index:           0
* Writing Agent.. AGENT_ID:        agent1
* Writing Agent.. AGENT_HOST:      172.17.0.1
* Writing Agent.. AGENT_PORT:      7600
* Writing Agent.. AGENT_CM_GROUP:  CM1
* Writing Agent.. AGENT_CM_ID:     0
* Writing Agent configuration... 
File already exists... 
[/home/prosync/example/config/prs_agent_agent1.cfg]
Want to Delete ? (Y/N)
n
Skip deleteing...

* Writing Agent information... 
Agent information already exist
Want to Replace ? (Y/N)
n
Skipped... 


* Writing Agent.. Index:           1
* Writing Agent.. AGENT_ID:        agent2
* Writing Agent.. AGENT_HOST:      172.17.0.2
* Writing Agent.. AGENT_PORT:      7601
* Writing Agent.. AGENT_CM_GROUP:  CM1
* Writing Agent.. AGENT_CM_ID:     1
* Writing Agent configuration... 
/home/prosync/example/config/prs_agent_agent2.cfg not found. Writing files...
Done.

* Writing Agent information... 


* Writing Agent.. Index:           2
* Writing Agent.. AGENT_ID:        agent3
* Writing Agent.. AGENT_HOST:      172.17.0.3
* Writing Agent.. AGENT_PORT:      7602
* Writing Agent.. AGENT_CM_GROUP:  CM2
* Writing Agent.. AGENT_CM_ID:     0
* Writing Agent configuration... 
/home/prosync/example/config/prs_agent_agent3.cfg not found. Writing files...
Done.

* Writing Agent information... 


* Writing Agent.. Index:           3
* Writing Agent.. AGENT_ID:        agent4
* Writing Agent.. AGENT_HOST:      172.17.0.4
* Writing Agent.. AGENT_PORT:      7603
* Writing Agent.. AGENT_CM_GROUP:  CM2
* Writing Agent.. AGENT_CM_ID:     1
* Writing Agent configuration... 
/home/prosync/example/config/prs_agent_agent4.cfg not found. Writing files...
Done.

* Writing Agent information... 


* Creating var directory...
   * Already Created.
********************************************************************************
* Agent Install Step (4/4)
* Creating files for CM
********************************************************************************
AGENT_CM_ID detected
generating prs_0.sh...
PRS_HOME=/home/prosync/example
AGENT_ID=agent1
prs_0.sh has created in $PRS_HOME/bin/
AGENT_CM_ID detected
generating prs_1.sh...
PRS_HOME=/home/prosync/example
AGENT_ID=agent2
prs_1.sh has created in $PRS_HOME/bin/
AGENT_CM_ID detected
generating prs_0.sh...
PRS_HOME=/home/prosync/example
AGENT_ID=agent3
prs_0.sh has created in $PRS_HOME/bin/
AGENT_CM_ID detected
generating prs_1.sh...
PRS_HOME=/home/prosync/example
AGENT_ID=agent4
prs_1.sh has created in $PRS_HOME/bin/
Agent installation Done.
```

###

***

## **3. 설치 결과 확인**

설치가 완료되면 다음 디렉터리에서 결과 파일을 확인할 수 있다.

```bash
$ cd $PRS_HOME/config
$ ls -al
total 51
drwxr-xr-x  3 users users 4096 Apr 16 15:42 .
drwxr-xr-x 15 users users 4096 Apr 14 15:08 ..
-rw-r--r--  1 users users  367 Feb 27 19:22 prs_agent_agent1.cfg
-rw-r--r--  1 users users  367 Apr 16 15:32 prs_agent_agent2.cfg
-rw-r--r--  1 users users  367 Apr 16 15:32 prs_agent_agent3.cfg
-rw-r--r--  1 users users  367 Apr 16 15:32 prs_agent_agent4.cfg
-rw-r--r--  1 users users 1272 Apr 16 15:32 prs_instance.map
drwxr-xr-x  2 users users 4096 Apr 14 15:08 templates
-rw-r--r--  1 users users    5 Feb 27 13:06 variant
```

#### **주요 파일 설명**

* `prs_agent_<agent_id>.cfg`: 개별 Agent의 설정 파일
* `prs_instance.map`: 전체 Agent들의 연결 정보를 관리하는 매핑 파일

### **생성된 설정 파일 예제**

#### **prs\_instance.map** 예시

```bash
#--------------------------------------------------------
# ProSync Instances Map (prs_instance.map)
#
# Generated by Dummy Time: 04-16T14:22:21.920319
#

AGENT=(ID=agent1)(HOST=172.17.0.1)(PORT=7600)(CM_GROUP=CM1)(CM_ID=0)

#--------------------------------------------------------
# Appended by prs_install_agent.sh at Wed Apr 16 03:32:37 PM KST 2025
#

AGENT=(ID=agent2)(HOST=172.17.0.2)(PORT=7601)(CM_GROUP=CM1)(CM_ID=1)

#--------------------------------------------------------
# Appended by prs_install_agent.sh at Wed Apr 16 03:32:37 PM KST 2025
#

AGENT=(ID=agent3)(HOST=172.17.0.3)(PORT=7602)(CM_GROUP=CM2)(CM_ID=0)

#--------------------------------------------------------
# Appended by prs_install_agent.sh at Wed Apr 16 03:32:37 PM KST 2025
#

AGENT=(ID=agent4)(HOST=172.17.0.4)(PORT=7603)(CM_GROUP=CM2)(CM_ID=1)
                                                                          
```

#### **prs\_agent\_agent1.cfg** 예시

```bash
################################################################################
# ProSync Agent Configurations (Template)
################################################################################
LISTENER_PORT=7600
LOG_LEVEL=3
LOG_DIR=/home/prosync/example/var/agent/agent1/log
LOG_BACKUP_DIR=/home/prosync/example/var/agent/agentA/log/backup
```

###

***

## 4. CM Failover  스크립트 설정

CM Failover 기능을 사용하기 위해 `AGENT_CM_GROUP[n]` 및 `AGENT_CM_ID[n]`을 설정한 경우, 설치 시 `$PRS_HOME/bin` 경로에 `prs_<AGENT_CM_ID>.sh` 형식의 스크립트 파일이 자동 생성된다.

이 스크립트 파일에는 Agent 기동을 위한 환경 변수를 설정해야 하며, 반드시 `TB_HOME` ,`AGENT_ID` 등을 환경에 맞게 수정해야 한다.

#### &#x20;`$PRS_HOME/bin/prs_0.sh`예시

```bash
#!/bin/sh

export TB_HOME=
export PRS_HOME=/home/prosync/example
AGENT_ID=agent1
TIMEOUT_CNT=7
source $PRS_HOME/bin/prs_cm.sh
export logdir=$PRS_HOME/var

echo "------------------------------------------------------------" >> $logdir/cmagent.log
echo "`date +%Y/%m/%d\ %H:%M:%S` cm agent Start (Agent Command $1)" >> $logdir/cmagent.log
case $1 in
START)
    echo "start $TIMEOUT_CNT $AGENT_ID" >> $logdir/cmagent.log
    start $TIMEOUT_CNT $AGENT_ID
    rc=$?
    ;;
PROBE)
    echo "probe $TIMEOUT_CNT $AGENT_ID" >> $logdir/cmagent.log
    probe $TIMEOUT_CNT $AGENT_ID
    rc=$?
    ;;
DOWN)
    echo "stop $TIMEOUT_CNT $AGENT_ID" >> $logdir/cmagent.log
    stop $TIMEOUT_CNT $AGENT_ID
    rc=$?
    ;;
KILL)
    echo "stop $TIMEOUT_CNT $AGENT_ID" >> $logdir/cmagent.log
    stop $TIMEOUT_CNT $AGENT_ID
    rc=$?
    ;;
NOTI)
    rc=0
    ;;
COMMIT)
    echo "send $TIMEOUT_CNT $AGENT_ID ${@:2}" >> $logdir/cmagent.log
    send $TIMEOUT_CNT $AGENT_ID ${@:2}
    rc=$?
    ;;

*)
    ;;
esac
echo "result :  $rc" >> $logdir/cmagent.log
echo "`date +%Y/%m/%d\ %H:%M:%S` cm agent End  (Agent Command $1)" >> $logdir/cmagent.log


exit $rc

```

###
