on Docker에서 IoT용 데이터스토어 준비 - Part1: Single Node 설치

on Docker에서 IoT용 데이터스토어 준비 - Part1: Single Node 설치

2022-10-04 last update

8 minutes reading 시계열 데이터베이스 카산드라 도커 IoT CoreOS
IoT용 데이터스토어로 사용할 수 있는 시계열 데이터베이스를 조사하고 있습니다. 오픈 소스 BluefloodKairosDB와 상용 IoT 플랫폼의 ThingWorx 백엔드에 Cassandra가 채용되고 있습니다.

IoT에 적합한 시계열 데이터베이스



IoT용 시계열 데이터베이스는 백엔드에 Cassandra나 MongoDB, HBase를 사용하는 경우가 많은 것 같습니다. 상용이라면 희귀 한 지목. 이 의 BaaS는 DynamoDB 를, TempoIQ 는 이전 TempoDB 라고 불렸지만, 회사명을 바꾸어 엔터프라이즈용 센서 데이터 분석에 특화한 서비스가 되었습니다.
  • Blueflood
  • KairosDB
  • InfluxDB
  • OpenTSDB
  • Druid
  • TempoIQ
  • ThingWorx

  • spotify/docker-cassandra



    IoT용 데이터스토어에는 Cassandra 기반이라면 궁합이 좋을 것 같은 생각이 들기 때문에, Docker에 Cassandra의 학습 환경을 준비하려고 합니다. Docker Registry Hub 에서 좋은 Docker 이미지를 찾습니다.
  • spotify/docker-cassandra
  • poklet/cassandra
  • abh1nav/docker-cassandra

  • 몇 가지를 발견했지만 Luigi 또는 Snakebite가 마음에 들었으므로 Spotify의 Docker 이미지를 사용해보십시오. Spotify는 재생 목록 개인화에 Cassandra를 사용합니다.
  • Personalization at Spotify using Cassandra
  • Spotify scales to the top of the charts with Apache Cassandra at 40k requests/second

  • CoreOS 호스트



    CoreOS 클러스터 중 하나에 로그인합니다. 잠시 로그인하지 않으면 버전이 522.4.0로 올랐습니다.
    $ cat /etc/os-release
    NAME=CoreOS
    ID=coreos
    VERSION=522.4.0
    VERSION_ID=522.4.0
    BUILD_ID=
    PRETTY_NAME="CoreOS 522.4.0"
    ANSI_COLOR="1;32"
    HOME_URL="https://coreos.com/"
    BUG_REPORT_URL="https://github.com/coreos/bugs/issues"
    

    Docker 버전은 1.3.3입니다.
    $ docker -version
    docker version
    Client version: 1.3.3
    Client API version: 1.15
    Go version (client): go1.3.2
    Git commit (client): 54d900a
    OS/Arch (client): linux/amd64
    Server version: 1.3.3
    Server API version: 1.15
    Go version (server): go1.3.2
    Git commit (server): 54d900a
    

    Single Node 시작



    spotify/docker-cassandra 의 Docker 이미지를 사용합니다. 최초의 Single Node 기동이므로, fleet의 unit 파일은 작성하지 않고 직접 docker run 로 기동합니다.
    $ docker run -d  --name cassandra spotify/cassandra
    
    docker ps 에서 부팅을 확인합니다.
    $ docker ps|head -2
    CONTAINER ID        IMAGE                                       COMMAND                CREATED             STATUS              PORTS                                                                           NAMES
    f955a0d522ce        spotify/cassandra:latest                    "cassandra-singlenod   44 seconds ago      Up 44 seconds       7001/tcp, 7199/tcp, 8012/tcp, 9042/tcp, 9160/tcp, 22/tcp, 61621/tcp, 7000/tcp   cassandra                                                                                 cassandra
    
    docker exec 에서 컨테이너 bash를 시작하여 Cassandra의 동작을 확인합니다.
    $ docker exec -it cassandra /bin/bash
    

    cassandra-cli 확인



    Cassandra 클라이언트의 cassandra-cli를 시작합니다. Cassandra 버전은 2.0.10입니다.
    $ cassandra-cli
    Connected to: "Test Cluster" on 127.0.0.1/9160
    Welcome to Cassandra CLI version 2.0.10
    
    The CLI is deprecated and will be removed in Cassandra 3.0.  Consider migrating to cqlsh.
    CQL is fully backwards compatible with Thrift data; see http://www.datastax.com/dev/blog/thrift-to-cql3
    
    Type 'help;' or '?' for help.
    Type 'quit;' or 'exit;' to quit.
    
    [[email protected]]
    

    RDB의 데이터베이스에 해당하는 키스페이스를 확인합니다.
    [[email protected]] show keyspaces;
    ...
    Keyspace: system_traces:
      Replication Strategy: org.apache.cassandra.locator.SimpleStrategy
      Durable Writes: true
        Options: [replication_factor:2]
      Column Families:
    

    cqlsh 확인



    SQL라이크에 문의할 수 있는 CQL을 확인합니다.
    $ cqlsh
    Connected to Test Cluster at localhost:9160.
    [cqlsh 4.1.1 | Cassandra 2.0.10 | CQL spec 3.1.1 | Thrift protocol 19.39.0]
    Use HELP for help.
    cqlsh>
    

    키스페이스를 확인합니다.
    cqlsh> DESCRIBE keyspaces;
    
    system  system_traces
    

    CQL에는 CREATE TABLE로 정의할 수 있는 테이블이 있습니다.
    cqlsh> DESCRIBE tables;
    
    Keyspace system
    ---------------
    IndexInfo                hints        range_xfers            sstable_activity
    NodeIdInfo               local        schema_columnfamilies
    batchlog                 paxos        schema_columns
    compaction_history       peer_events  schema_keyspaces
    compactions_in_progress  peers        schema_triggers
    
    Keyspace system_traces
    ----------------------
    events  sessions