Installing Server Node

 

Required Hardware Spec.

Single Server Node 기준

아래는 InfluxDB의 official 권고 사양을 참고한 normal workload(agent 당 하나의 어플리케이션을 모니터링)에 대한 기준 입니다.
또한, CH Portal + InfluxDB + Kapacitor + SaltStack Server가 한 대의 서버에 탑재되는 것으로 산정합니다.
단, 각 서버 및 에이전트 컴포넌트들(Introduction | Components Architecture)의 workload량 따라 가변적 입니다.

  • 100 ~ 250 agent nodes: 8core, 16GB Ram

  • ~ 500 agent nodes: 16core, 32GB Ram

  • ~ 1000 agent nodes: 24core+, 48GB+ Ram

또한, Kapacitor(data processing component)의 경우는 job할당 개수나 프로세싱 부하에 따라 전체 workload는 차이가 클 수 있습니다.

운영 중 실제 부하량에 따라 각 컴포넌트를 분리-확장(Scale-out)하는 방법으로 권고 합니다.

OS

  • CentOS 7 x86_64 기준

CloudHub에서 사용되는 Port

개념도

참고 아래에서 화살표를 받는 쪽Port Listening 상태로 표기함.

External Ports: Internet 구간

  • 443: CloudHub Portal에서 사용하는 웹 포트.

Internal Ports (Backend Server 간): Trusted Network 구간

  • 8000 : Salt-API Server - CH Server와 데이터 송수신.

  • 9094 : Kapacitor - InfluxDB와 데이터 송수신.

Intermediate Ports (Agent ↔︎ Backend Server 간): Semi-Trusted Network 구간

아래 포트들은 모니터링 대상 호스트들(MO: Managed Objects)과의 통신에 사용됩니다.
443 포트를 제외하고는 보안 위협이 될 수 있으므로,
Source IP 혹은 대역으로 ACL정책을 사용할 필요가 있습니다.

아래 설정 예시와 같이 firewalld filter를 사용하거나, 혹은 tcp_wrappers 등을 사용하여 hosts.allow, hosts.deny 등에 ACL을 설정할 수 있습니다.
(tcp_wrappers 설정 방법은 여기서는 다루지 않습니다. 필요한 경우, 인터넷 검색을 통하여 쉽게 사용법을 얻을 수 있으니 참고 바랍니다.)

  • 4505-4506 : Salt-Master - Salt-Minion과 데이터 송수신.

  • 8086 : InfluxDB - telegraf로부터 데이터 수신.

아래는 firewalld 설정 파일 예시이며,
주의 물리적인 보안 장비를 따로 사용하여 설정할 경우는 위 설명한 용도와 내용에 맞게 ACL을 설정하여 사용하여야 합니다.

<!-- /etc/firewalld/zones/public.xml --> <?xml version="1.0" encoding="utf-8"?> <zone> <short>Public</short> <description>For use in public areas.</description> <service name="ssh"/> <service name="dhcpv6-client"/> <port protocol="tcp" port="443"/> <rule family="ipv4"> <source address="xxx.xxx.xxx.0/24"/> <port protocol="tcp" port="4505-4506"/> <accept/> </rule> <rule family="ipv4"> <source address="xxx.xxx.xxx.xxx"/> <port protocol="tcp" port="8000"/> <accept/> </rule> <rule family="ipv4"> <source address="xxx.xxx.xxx.xxx"/> <port protocol="tcp" port="8086"/> <accept/> </rule> <rule family="ipv4"> <source address="xxx.xxx.xxx.xxx"/> <port protocol="tcp" port="9094"/> <accept/> </rule> </zone>

Install Pre-required Packages

Setting InfluxDB and Kapacitor containers via Docker Compose

[주의] CloudHub와의 호환성 유지

CloudHub는 위 InfluxDB와 Kapacitor의 임의의 버전에는 상하위 호환되지 않을 수 있습니다.

반드시 CloudHub Release(https://github.com/snetsystems/cloudhub/releases)페이지에서 설치할 CloudHub 버전과 호환되는 InfluxDB와 Kapacitor 버전을 확인한 후, 해당 버전으로 설치해야 합니다.

예>
InfluxDB가 1.8.0, Kapacitor가 1.5.4라면,
아래 6번을 수행한 후, sandbox/.env 파일을 아래와 같이 수정합니다.
INFLUXDB_TAG=1.8.0
KAPACITOR_TAG=1.5.4
이후, 아래 7번을 수행합니다.

  1. Docker 설치 확인

    • 버전 : Docker version 18.09.4 이상

      $ docker --version Docker version 18.09.4, build d14af54266
    • 버전이 낮으면 이전 버전을 삭제 후 설치

      • 이전 버전 삭제

        $ yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
      • 저장소 설정 및 추가

      • Install Docker Engine - Community

  2. Docker log rotation 설정

    • logrotate을 사용하여 Docker Log를 관리 합니다.

    • Log 파일 경로 : /var/lib/docker/containers/*/*.log

    • Log 설정 파일 : $ vim /etc/logrotate.d/docker-container

      daily : 매일 log를 rotate 합니다.
      rotate 7 : 최대 log.1, log.2 등 7개의 파일을 보관합니다.
      missingok : log가 없는 경우 에러 없이 다음 rotate로 넘어갑니다.
      dateext : log 파일에 YYYYMMDD 형식의 확장자를 추가합니다.
      compress : 이전 log를 압축합니다.
      notifempty :  log 내용이 없으면 rotation 하지 않습니다.

  3. Docker 실행

  4. Docker Compose 설치 확인

    • 버전 : Docker Compose version 1.24 이상

    • 버전이 낮거나 미 설치 시 Docker Compose 설치

      • 파일 다운로드

      • 다운로드 파일에 권한 적용

      • 버전 확인

  5. Git 설치

  6. Snetsystems/Sandbox Download

  7. Sandbox 실행

Setting SaltStack for master

Yum install

  1. SaltStack 저장소 등록

  2. Salt-Master, Salt-API, Salt-Minion 설치

  3. Config 설정

    1. Salt-Master의 Config 와 Salt-API의 Config 파일을 설정해야 합니다.

    2. Salt-Master : $ vim /etc/salt/master.d/master.conf

    3. 주의 Host에 여러 Interface가 있을 경우 Salt-Minion과 연결 가능한 네트워크 Interface IP로 설정해야 합니다.
      ex) interface: 61.254.65.58
      아래 예와 같이 any(0.0.0.0)로 설정해도 master ↔︎ minion 간 통신은 문제가 없으나,
      CloudHub UI에서 원하지 않는 IP로 표시될 수 있습니다.

    4. Salt-Minion : $ vim /etc/salt/minion.d/minion.conf

  4. 계정 생성 및 패스워드 설정
    아래 추가된 password는 추후 salt-api authentication을 위한 pam_token를 발급 받는데 쓰이므로, 잘 기억해두어야 합니다.

  5. 서비스 시작

For off internet

  • 상단 설치 과정은 인터넷이 허용되는 환경에서의 Pre-required Packages 설치 방법입니다.

  • 인터넷이 안되는 폐쇄망 환경에서 Package Deployment on Private Network(Server)설치 방법 입니다.

Download telegraf into salt file_roots path on salt-master

아래 링크에서 설치하고자 하는 버전을 다운로드 할 수 있습니다.

Download URL: https://github.com/snetsystems/telegraf/releases

Install CloudHub Portal

Download

아래 링크에서 설치하고자 하는 버전을 다운로드 할 수 있습니다.

Download URL: https://github.com/snetsystems/cloudhub/releases

Install CloudHub admin portal package

  • 설치명령어

    • $ sudo yum localinstall cloudhub-0.9.1~17fe47a.x86_64.rpm

  • Log 파일

    • service로 데몬 실행 시 log file : /var/log/cloudhub

    • systemd로 데몬 실행 시 log file: /var/log/messages

  • Environment or Argument file path

    • 실행(help) 옵션

      • $ cloudhub -h

    • 파일 : /etc/default/cloudhub

    • Argument 설정: 예> 61.250.122.xx

  • 서비스 시작/정지/재시작

    • $ sudo systemctl {start|stop|restart} cloudhub

  • 서비스 확인

Enabling HTTPS on CloudHub Portal

  • http가 기본으로 설정되어 있으며 https로 변경 하려면 cloudhub.service 중단 후 설정파일을 수정하고 'systemctl daemon-reload'를 하여 서비스를 재시작 합니다.