안녕하세요?

오늘은 Hyperledger Fabric의 설정파일들에 대해서 설명하고자 합니다.
설정파일을 수정해야하는 경우는 일반적으로 다음과 같은 케이스가 될것입니다.

  • 멤버쉽 서비스에 클라이언트 및 Peer 등록
  • Validating Peer 및 non-validating Peer 설정
  • Validating Peer 에 대한 기본 환경 설정(Peer id, network id, root node 등)
  • 보안 설정 ( TLS 설정 )
  • 합의 알고리즘 모듈 설정

설정파일을 수정해야 하는 대상 서비스는 “멤버쉽 서비스”, “블록체인 서비스(Peer)” 입니다.
그런데, 이미 앞선 블로그에서 실습을 하면서 docker 명령에 -e 옵션을 통해서 환경변수를 각 블록체인의 서비스에 전달을 하여 사용을 했습니다.
즉, 우리가 블록체인 런타임을 구성하면서 설정해야하는 파라미터들은 오늘 설명할 내용처럼 직접 설정파일을 수정해서 사용해도 되고, 지금까지 해왔던데로 docker명령에서 파라미터로 전달해서 사용을해도 됩니다.

블록체인 서비스들의 설정파일을 직접 수정해서 사용하기 위해서는 설정 파일 수정이후 docker commit 명령을 통해서 새로운 이미지로 태깅을 해야합니다.
또한, 직접 수정했다고 하더라고 docker 명령에 -e 옵션으로 전달된 설정에 우선순위가 있습니다. 다시 말해, docker 명령으로 전달된 설정이 override 하게 되므로
필요에 따라 적절히 조합으로 사용하시면 되며, 대부분 가변적으로 변화해야 할 부분이 많은 값들에 대해서는 docker 명령의 옵션으로 사용하는게 편합니다. (대표적인 예로, Logging level )

1. 멤버쉽 서비스의 설정

멤버쉽 서비스는 앞서 설명한 것과 같이 Peer와 클라이언트에 대한 인증서 발급기관의 역할을 하며 Peer 및 클라이언트의 인증을 담당하는 서비스입니다.
여기에서는 다음과 같은 설정을 하게 됩니다.

  • 클라이언트, Peer을 위한 아이디 설정
  • 보안 설정 (TLS 사용여부)
  • 서비스 포트

멤버쉽 서비스의 설정파일 위치는 다음의 경로에 있습니다.

/opt/gopath/src/github.com/hyperledger/fabric/membersrvc/membersrvc.yaml

설정 파일을 수정하기 위해서 현재 실행중인 컨테이너 또는 실행중인 컨테이너가 없다면 새로 실행해서 컨테이너 안으로 접속합니다.

  • 컨테이너 실행 중일 경우
docker exec -it < 컨테이너 ID 또는 컨테이너 이름> bash
  • 컨테이너 새로 실행 해야 하는 경우
docker run -it hyperledger/fabric-membersrvc:x86_64-0.6.1-preview bash

접속하였으면 다음의 경로에 있는 설정 파일을 열어서 수정합니다.

# cd membersrvc
# vi membersrvc.yaml

설정파일을 열었으면 앞선 블로그에서도 강조하였였지만 .yaml, .yaml파일은 모든 공백은 스페이스이며 들여쓰기도 동일한 위치여야 한다는거 다시 기억하고 수정하시기 바랍니다.

일반적인 설정은 다음의 최상위 항목에서 수정하시면 됩니다.

  • server:
  • security:
  • logging:
  • eca:

오늘 블로그에서는 클라이언트의 추가 및 log level의 수정 위주로만 설명하겠습니다. ( 향후 보안 설정을 위한 블로그에서 멤버쉽 서비스와 Validating Peer에 대한 TLS 설정에 대해서 설명할 예정입니다. )
먼저 간단히, 로그 레벨을 수정하기 위해서는 logging: 하위 설정 항목에 값만 수정히시면 됩니다. 수정 가능한 로그레벨은 다음과 같습니다.

  • CRITICAL | ERROR | WARNING | NOTICE | INFO | DEBUG

여기에서는 멤버쉽 서비스의 모든 기능에 대해서 DEBUG로 설정해보겠습니다.

또한 클라이언트 추가를 해보겠습니다. 클라이언트 추가는 eca.users 항목에서 추가합니다. 아래의 그림은 수정하기 전 eca.users 에 설정된 내용의 일부입니다.

설정파일의 내용에 영문으로 설명되어 있지만 eca.users에서 클라이언트와 Peer등을 구분은 숫자로 구분되어 지고 아래와 같습니다.

  • 1: client
  • 2: peer
  • 4: validator
  • 8: auditor

그러므로, 클라이언트 추가를 위한 값은 1을 사용하면 되고, Validating peer 추가를 위해서는 4를 사용합니다. 또한, eca.afiliations 는 그룹에 대한 지정입니다.

afiliations는 유지한채 bank_a의 소속으로 클라이어트를 위한 ID( ID : test_user, PW : password )를 추가하겠습니다.

수정된 컨테이너를 새로운 이미지로 수정하기 전에 멤버쉽 서비스 구동 시 생성한 인증서 파일 및 캐시 파일들을 삭제하시는게 좋습니다.

인증서 파일을 삭제하기 위해서는 다음의 명령을 실행합니다.

# rm -rf /var/hyperledger/*

자, 로그레벨 수정 및 클라이언트 ID 추가를 하였으면 컨테이너를 빠져나와 새로운 이미지를 생성하겠습니다.

다음 먼저 시작해 보는 블록체인 05 – 운영 모드에서 스마트 컨트랙(체인코드) 개발의 2번 항목에서도 컨테이너의 새로운 이미지로 commit하는 방법에 대해서 참조바랍니다.

1. 멤버쉽 서비스에 대한 컨테이너 ID 확인

다음의 명령을 통해서 컨테이너 ID를 확인합니다.(조회해서 나오는 리스트의 제일 마지막 컬럼에 있는 컨테이너 이름을 사용하여도 무방합니다.)

docker ps
2. 컨테이너 commit

위에서 확인한 컨테이너 ID 혹은 컨테이너 이름을 이용하여 새로운 이미지로 commit을 합니다.

docker commit 명령의 마지막 아규먼트는 생성하게 될 이미지 명:태그 입니다. 새로운 이미지 명을 주어도 되며, 현 예제에서는 원래 이미지 이름을 그대로 사용하겠습니다.

docker commit < 컨테이너 ID 또는 컨테이너 이름> hyperledger/fabric-membersrvc:latest

3. 컨테이너 재실행 및 테스트

새로 생성된 멤버쉽 서비스 이미지를 docker-compose 파일에 적용하여 컨테이너 재실행 한 뒤, registrar API 호출을 해서 사용자가 정상 등록되었는지 확인합니다.

peer를 위한 ID 또한 같은 방법으로 추가합니다. 다만, 입력해야할 포맷은 Validating Peer 의 경우 {{id: 4 패스워드}} 입니다.

2. Peer 서비스의 설정

멤버쉽 서비스에 이어 Peer 서비스의 설정을 해보겠습니다. Peer 서비스에서는 다음과 같은 항목들이 주로 설정되는 곳입니다.

  • REST Section
  • Logging Section
  • Peer Section

이 중 Peer Section 에서 서비스에 필요한 대부분의 설정들이 포함되어 있습니다.
설정파일의 위치는 아래와 같은 곳에 있습니다.

/opt/gopath/src/github.com/hyperledger/fabric/peer/core.yaml

멤버쉽 서비스와 동일하게 설정 파일을 수정하기 위해서 현재 실행중인 컨테이너 또는 실행중인 컨테이너가 없다면 새로 실행해서 컨테이너 안으로 접속합니다.

  • 컨테이너 실행 중일 경우
docker exec -it < 컨테이너 ID 또는 컨테이너 이름> bash
  • 컨테이너 새로 실행 해야 하는 경우
docker run -it hyperledger/fabric-peer:x86_64-0.6.1-preview bash

접속하였으면 다음의 경로에 있는 설정 파일을 열어서 수정합니다.

# cd peer
# vi core.yaml

그럼, 이 설정파일의 항목에 대해서 어떻게 읽으면 되는지 그리고 docker run 명령에 포함되는 환경변수와는 어떤 관계에 있는지부터 설명하겠습니다.
아래 운영모드에서 사용하는 docker-compose 파일과 Peer의 설정파일인 core.yaml 파일을 비교해보겠습니다.

vp0의 environment에 있는 환경변수 중 “- CORE_PEER_ID=vp0” 를 core.yaml 파일과 비교하면 아래 그림에서 “peer:” 하위에 있는 “id:”에 해당하는 항목입니다.
core.yaml에서는 peer.id 로 읽으시면 됩니다. docker-compose파일에서는 해당하는 항목에서 앞에 “CORE”를 붙여서 환경변수의 키값을 만들면 됩니다.
개발환경에서 사용하시는 docker-compose 파일과 core.yaml과 비교해 보시기 바랍니다.

membersrvc:
  image: hyperledger/fabric-membersrvc:x86_64-0.6.1-preview
  ports:
    - "7054:7054"
  command: membersrvc
vp0:
  image: hyperledger/peer:1.0
  ports:
    - "7050:7050"
    - "7051:7051"
    - "7053:7053"
  environment:
    - CORE_PEER_ADDRESSAUTODETECT=true
    - CORE_VM_ENDPOINT=https://192.168.99.100:2376
    - CORE_LOGGING_LEVEL=DEBUG
    - CORE_PEER_ID=vp0
    - CORE_PEER_PKI_ECA_PADDR=membersrvc:7054
    - CORE_PEER_PKI_TCA_PADDR=membersrvc:7054
    - CORE_PEER_PKI_TLSCA_PADDR=membersrvc:7054
    - CORE_SECURITY_ENABLED=true
    - CORE_SECURITY_ENROLLID=test_vp0
    - CORE_SECURITY_ENROLLSECRET=MwYpmSRjupbT
  links:
    - membersrvc
  command: sh -c "sleep 5; peer node start"

운영모드와 같이 multi node환경에서 반드시 노드별로 설정해야 할 항목은 다음입니다.

  • peer.id
  • vm.endpoint

그리고 멤버쉽 서비스를 사용하여 블록체인 네트워크 구성시 다음의 항목을 반드시 설정하여야 합니다.

  • security.enabled
  • security.enrollid
  • security.enrollsecret
  • peer.pki.eca_paddr
  • peer.pki.tca_paddr
  • peer.pki_tlsca.paddr

위의 부분을 유념해서 설정해보시기 바라며, 설정 항목 외 모든 절차는 멤버쉽 서비스 설정 때와 동일합니다.