2020년 9월 18일 금요일

[EOSIO] genesis.json 설명 (BP들의 투표를 위한 블록체인 환경정보)

샘플파일

========================================================================
{
  "initial_timestamp": "2018-03-02T12:00:00.000",
  "initial_key": "EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr",
  "initial_configuration": {
    "max_block_net_usage": 1048576,
    "target_block_net_usage_pct": 1000,
    "max_transaction_net_usage": 524288,
    "base_per_transaction_net_usage": 12,
    "net_usage_leeway": 500,
    "context_free_discount_net_usage_num": 20,
    "context_free_discount_net_usage_den": 100,
    "max_block_cpu_usage": 100000,
    "target_block_cpu_usage_pct": 500,
    "max_transaction_cpu_usage": 50000,
    "min_transaction_cpu_usage": 100,
    "max_transaction_lifetime": 3600,
    "deferred_trx_expiration_window": 600,
    "max_transaction_delay": 3888000,
    "max_inline_action_size": 4096,
    "max_inline_action_depth": 4,
    "max_authority_depth": 6
  },
  "initial_chain_id": "0000000000000000000000000000000000000000000000000000000000000000"
}
========================================================================
[출처] https://github.com/EOSIO/eos/blob/master/tutorials/bios-boot-tutorial/genesis.json

설명

  • max_block_net_usage
    • 블록에 대한 명령어의 최대 순 사용량
  • target_block_net_usage_pct
    • 최대 순 사용량의 목표 백분율 (1 % == 100, 100 % = 10,000)
  • max_transaction_net_usage
    • 계정 한도에 관계없이 체인이 허용하는 객관적으로 측정 된 최대 순 사용량
  • base_per_transaction_net_usage
    • 부수적 인 비용을 충당하기 위해 거래에 대해 청구되는 순 사용량의 기본 금액
  • net_usage_leeway
  • context_free_discount_net_usage_num
    • 문맥없는 데이터의 순 사용에 대한 할인 분자
  • context_free_discount_net_usage_den
    • 문맥없는 데이터의 순 사용에 대한 할인 분모
  • max_block_cpu_usage
    • 블록에 대해 청구 가능한 최대 CPU 사용량 (마이크로 초)
  • target_block_cpu_usage_pct
    • 최대 CPU 사용량의 목표 백분율 (1 % == 100, 100 % = 10,000)
  • max_transaction_cpu_usage
    • 계정 한도에 관계없이 체인이 허용하는 청구 가능한 최대 CPU 사용량 (마이크로 초)
  • min_transaction_cpu_usage
    • 체인에 필요한 최소 청구 가능 CPU 사용량 (마이크로 초)
  • max_transaction_lifetime
    • 입력 트랜잭션의 만료가 처음 포함 된 블록의 시간보다 앞서있을 수있는 최대 시간 (초)
  • deferred_trx_expiration_window
    • 지연된 트랜잭션이 만료 될 때까지 처음 실행할 수있는 시간 (초)
  • max_transaction_delay
    • 권한 확인에 의해 지연 요구 사항으로 부과 될 수있는 최대 시간 (초)
  • max_inline_action_size
    • 인라인 작업의 최대 허용 크기 (바이트)
  • max_inline_action_depth
    • 인라인 작업 전송에 대한 재귀 깊이 제한
  • max_authority_depth
    • 권한이 충족되는지 확인하기위한 재귀 깊이 제한

2019년 6월 21일 금요일

Kibana on Docker swarm

$ sudo  docker service \
        create \
        --network net \
        --hostname kibana \
        --replicas 1 \
        --env "SERVER_BASEPATH=/kibana" \
        --env "SERVER_NAME=kibana" \
        --env "ELASTICSEARCH_URL=http://es-master:9200" \
        --env "XPACK_GROKDEBUGGER_ENABLED=false" \
        --env "XPACK_SEARCHPROFILER_ENABLED=false" \
        --env "XPACK_GRAPH_ENABLED=false" \
        --env "XPACK_ML_ENABLED=false" \
        --env "XPACK_MONITORING_ENABLED=true" \
        --env "XPACK_REPORTING_ENABLED=false" \
        --env "XPACK_SECURITY_ENABLED=false" \
        --name kibana \
      docker.elastic.co/kibana/kibana:5.5.3

2018년 8월 30일 목요일

Docker로 Elasticsearch Cluster 만들기

** 엘라스틱을 사용하기 위해 memlock과 nofile을 변경해야 함
** 참고 : Default ulimit(memlock & nofile) settings (for Elasticsearch)
** 아래 내용은 docker swarm을 기반으로 함
Virtual memory areas 늘리기

$ sudo /etc/sysctl.confi
===== sysctl.conf =====
...
vm.max_map_count=262144
...
==========================
$ sudo reboot now

Master node

$ sudo docker service \
         create \
         --constraint node.role==manager \
         --reserve-cpu 2 \
         --reserve-memory 2g \
         --limit-cpu 2 \
         --limit-memory 2g \
         --network net \
         --hostname es-master \
         --replicas 1 \
         --mount type=bind,src=/etc/localtime,dst=/etc/localtime,readonly \
         --env "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
         --env "cluster.name=es_cluster" \
         --env "node.name=es-master" \
         --env "node.master=true" \
         --env "node.data=false" \
         --env "path.data=/usr/share/elasticsearch/data" \
         --env "path.logs=/usr/share/elasticsearch/logs" \
         --env "bootstrap.memory_lock=true" \
         --env "network.host=es-master" \
         --env "http.port=9200" \
         --env "http.cors.enabled=true" \
         --env "http.cors.allow-origin=*" \
         --env "transport.tcp.port=9300" \
         --env "discovery.zen.minimum_master_nodes=1" \
         --env "cluster.routing.allocation.disk.threshold_enabled=true" \
         --env "cluster.routing.allocation.disk.watermark.low=1000mb" \
         --env "cluster.routing.allocation.disk.watermark.high=500mb" \
         --env "xpack.ml.enabled=false" \
         --env "xpack.monitoring.enabled=true" \
         --env "xpack.security.enabled=false" \
         --env "xpack.security.audit.enabled=false" \
         --env "xpack.watcher.enabled=false" \
         --name es-master \
       docker.elastic.co/elasticsearch/elasticsearch:5.5.3

Data node
** {number}에 따라 data node를 여러개 만들 수 있음

$ sudo docker service \
         create \
         --reserve-cpu 2 \
         --reserve-memory 2g \
         --limit-cpu 2 \
         --limit-memory 2g \
         --network net \
         --hostname es-data-{number} \
         --replicas 1 \
         --mount type=bind,src=/etc/localtime,dst=/etc/localtime,readonly \
         --env "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
         --env "cluster.name=es_cluster" \
         --env "node.name=es-data-{number}" \
         --env "node.master=false" \
         --env "node.data=true" \
         --env "path.data=/usr/share/elasticsearch/data" \
         --env "path.logs=/usr/share/elasticsearch/logs" \
         --env "bootstrap.memory_lock=true" \
         --env "network.host=es-data-{number}" \
         --env "transport.tcp.port=9300" \
         --env "discovery.zen.ping.unicast.hosts=es-master" \
         --env "discovery.zen.minimum_master_nodes=1" \
         --env "cluster.routing.allocation.disk.threshold_enabled=true" \
         --env "cluster.routing.allocation.disk.watermark.low=1000mb" \
         --env "cluster.routing.allocation.disk.watermark.high=500mb" \
         --env "xpack.ml.enabled=false" \
         --env "xpack.monitoring.enabled=true" \
         --env "xpack.security.enabled=false" \
         --env "xpack.security.audit.enabled=false" \
         --env "xpack.watcher.enabled=false" \
         --name es-data-{number} \
       docker.elastic.co/elasticsearch/elasticsearch:5.5.3


2018년 8월 28일 화요일

Docker Swarm Cluster 만들기

--- In nodes
$ sudo docker network \
       create \
       --subnet 172.171.0.0/16 \
       --gateway 172.171.0.1 \
       -o com.docker.network.bridge.enable_icc=false \
       -o com.docker.network.bridge.enable_ip_masquerade=true \
       -o com.docker.network.bridge.name=docker_gwbridge \
     docker_gwbridge

--- In manager node
$ sudo docker swarm init --advertise-addr MANGER_IP_ADDRESS

--- In worker node
$ sudo docker swarm join --token TOKEN_KEY MANGER_IP_ADDRESS:2377

--- Verify
$ sudo docker node ls

--- Set overlay network
$ sudo docker network \
       create \
       --attachable \
       --driver=overlay \ 
       --subnet=172.172.0.0/24 \
       --ip-range=172.172.0.0/24 \
       --gateway=172.172.0.1 \
     NETWORK_NAME

Docker 설정

Enable the remote API for dockerd

$ sudo mkdir -p /etc/systemd/system/docker.service.d
$ sudo vim /etc/systemd/system/docker.service.d/override.conf
===== override.conf =====
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
...
==========================
$ sudo systemctl daemon-reload
$ sudo service docker restart

Default ulimit(memlock & nofile) settings (for Elasticsearch)

$ sudo vim /etc/security/limits.conf
===== limits.conf =====
...
* - memlock unlimited
* - nofile 65536
...
==========================

$ sudo mkdir -p /etc/systemd/system/docker.service.d
$ sudo vim /etc/systemd/system/docker.service.d/override.conf
===== override.conf =====
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --default-ulimit memlock=-1 --default-ulimit nofile=65536
...
==========================
$ sudo systemctl daemon-reload
$ sudo service docker restart

Change default (/var/lib/docker) to another directory

$ sudo mkdir -p /etc/systemd/system/docker.service.d
$ sudo vim /etc/systemd/system/docker.service.d/override.conf
===== override.conf =====
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -g /another/directory
...
=============================
$ sudo systemctl daemon-reload
$ sudo service docker restart

Docker CE 설치

Docker CE for Ubuntu 설치

** OS 버전(64bit): Bionic 18.04 (LTS) or Artful 17.10 or Xenial 16.04 (LTS) or Trusty 14.04 (LTS)

Install using the repository
----------------------------------------
$ sudo apt-get update
$ sudo apt-get install \
                    apt-transport-https \
                    ca-certificates \
                    curl \
                    software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository \
                    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
                    $(lsb_release -cs) \
                    stable"
----------------------------------------

Install Docker CE
----------------------------------------
$ sudo apt-get update
$ sudo apt-get install docker-ce

--- Starts automatically
--- Verify
$ sudo docker run hello-world
----------------------------------------

Docker CE for CentOS 설치

** OS 버전: CentOS 7이상

Install using the repository
----------------------------------------
$ sudo yum install -y yum-utils \
                    device-mapper-persistent-data \
                    lvm2
$ sudo yum-config-manager \
                    --add-repo \
                    https://download.docker.com/linux/centos/docker-ce.repo
----------------------------------------

Install Docker CE
----------------------------------------
$ sudo yum update
$ sudo yum install docker-ce

--- Start Docker
$ sudo systemctl start docker

--- Verify
$ sudo docker run hello-world
----------------------------------------

Configure Docker to start on boot

----------------------------------------
--- Enable
$ sudo systemctl enable docker

--- Disable
$ sudo systemctl disable docker
----------------------------------------


참고

2018년 3월 8일 목요일

RESTful API Design (검색API)

Global search
  • /search?q=word
Scoped search
  • /products/search?q=word

참고
  • https://apigee.com/about/blog/technology/restful-api-design-tips-search