2017-12-11 11 views
2

공식 문서에서 첫 번째 네트워크 샘플 Building Your First Network을 실행하려고합니다. 이 샘플을 kafka 발주자 유형으로 실행해야합니다. 나는 (브로커 카프카로 변경 OrdererType 및 추가) configtx.yaml 파일을 편집이 경우고급 가재 패브릭 첫 번째 네트워크가 kafka와 작동하지 않고 TLS 사용

... 

# Orderer Type: The orderer implementation to start 
# Available types are "solo" and "kafka" 
OrdererType: kafka 

... 

Kafka: 
    # Brokers: A list of Kafka brokers to which the orderer connects 
    # NOTE: Use IP:port notation 
    Brokers: 
     - kafka:9093 

... 

를 들어 그리고베이스/고정 표시기 - 작성 - base.yaml에 카프카와 사육사 컨테이너를 추가

.... 

zookeeper: 
image: hyperledger/fabric-zookeeper 
container_name: zookeeper 
ports: 
    - 2181:2181 
networks: 
    - byfn 
kafka: 
image: hyperledger/fabric-kafka 
container_name: kafka 
environment: 
    - KAFKA_ADVERTISED_HOST_NAME=kafka 
    - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 
    - KAFKA_SSL_KEYSTORE_LOCATION=/var/private/ssl/kafka.server.keystore.jks 
    - KAFKA_SSL_KEYSTORE_PASSWORD=test1234 
    - KAFKA_SSL_KEY_PASSWORD=test1234 
    - KAFKA_SSL_TRUSTSTORE_LOCATION=/var/private/ssl/kafka.server.truststore.jks 
    - KAFKA_SSL_TRUSTSTORE_PASSWORD=test1234 
    - KAFKA_LISTENERS=PLAINTEXT://kafka:9092,SSL://kafka:9093 
    - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,SSL://kafka:9093 
    - KAFKA_MESSAGE_MAX_BYTES=103809024 
    - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024 
    - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false 
volumes: 
    - ./sample/server.keystore.jks:/var/private/ssl/kafka.server.keystore.jks 
    - ./sample/server.truststore.jks:/var/private/ssl/kafka.server.truststore.jks 
ports: 
    - 9093:9093 
    - 9092:9092 
networks: 
    - byfn 

그리고 또한 kafka 클라이언트 및 서버에 대한 암호화 데이터를 생성했습니다.

keytool -keystore server.keystore.jks -alias kafka -validity 365 -genkey -keyalg RSA -keysize 2048 -storepass test1234 -dname "cn=kafka" -keypass test1234 
keytool -keystore client.keystore.jks -alias orderer -validity 365 -genkey -keyalg RSA -keysize 2048 -storepass test1234 -dname "cn=orderer" -keypass test1234 
openssl req -new -x509 -keyout ca-key.pem -out ca-cert.pem -days 365 -subj "/CN=FAB5226" -nodes 
keytool -keystore server.truststore.jks -alias CARoot -import -file ca-cert.pem -storepass test1234 -noprompt 
keytool -keystore client.truststore.jks -alias CARoot -import -file ca-cert.pem -storepass test1234 -noprompt 
keytool -keystore server.keystore.jks -alias kafka -certreq -file server-cert-signing-request.pem -storepass test1234 
openssl x509 -req -CA ca-cert.pem -CAkey ca-key.pem -in server-cert-signing-request.pem -out server-cert-signed.pem -days 365 -CAcreateserial -passin pass:test1234 
keytool -keystore server.keystore.jks -alias CARoot -import -file ca-cert.pem -storepass test1234 -noprompt 
keytool -keystore server.keystore.jks -alias kafka -import -file server-cert-signed.pem -storepass test1234 -noprompt 
keytool -keystore client.keystore.jks -alias orderer -certreq -file client-cert-signing-request.pem -storepass test1234 
openssl x509 -req -CA ca-cert.pem -CAkey ca-key.pem -in client-cert-signing-request.pem -out client-cert-signed.pem -days 365 -CAcreateserial -passin pass:test1234 
keytool -importkeystore -srckeystore client.keystore.jks -destkeystore client.keystore.p12 -deststoretype PKCS12 -storepass test1234 -srcstorepass test1234 
openssl pkcs12 -in client.keystore.p12 -nodes -nocerts -out client-key.pem -passin pass:test1234 

그리고베이스 변경된 주문자 컨테이너 설정/고정 표시기 - 작성 - base.yaml

orderer.example.com: 
container_name: orderer.example.com 
image: hyperledger/fabric-orderer 
environment: 
    - ORDERER_GENERAL_LOGLEVEL=debug 
    - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 
    - ORDERER_GENERAL_GENESISMETHOD=file 
    - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block 
    - ORDERER_GENERAL_LOCALMSPID=OrdererMSP 
    - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp 
    # enabled TLS 
    - ORDERER_KAFKA_TLS_ENABLED=true 
    - ORDERER_KAFKA_TLS_PRIVATEKEY_FILE=/var/private/ssl/client-key.pem 
    - ORDERER_KAFKA_TLS_CERTIFICATE_FILE=/var/private/ssl/client-cert-signed.pem 
    - ORDERER_KAFKA_TLS_ROOTCAS_FILE=/var/private/ssl/ca-cert.pem 
    - ORDERER_KAFKA_VERBOSE=true 
    - ORDERER_KAFKA_SERVER=kafka 
    - ORDERER_KAFKA_BROKERS=[kafka:9093] 
    - ORDERER_GENERAL_TLS_ENABLED=true 
    - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key 
    - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt 
    - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] 
working_dir: /opt/gopath/src/github.com/hyperledger/fabric 
command: orderer 
volumes: 
    - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block 
    - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp 
    - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls 
    - ../sample/ca-cert.pem:/var/private/ssl/ca-cert.pem 
    - ../sample/client-cert-signed.pem:/var/private/ssl/client-cert-signed.pem 
    - ../sample/client-key.pem:/var/private/ssl/client-key.pem 
ports: 
    - 7050:7050 

그럼 내가 명령을

./byfn.sh -m up -s couchdb -a 

을 다음과 같이 샘플을 실행하고 오류 메시지가 시도 스크립트가 새 채널을 만들려고 할 때

Error: got unexpected status: SERVICE_UNAVAILABLE -- cannot enqueue

Error message when the script try to create new channel

이 오류를 해결하는 데 협조 해주세요.

+0

주문자 로그를 첨부하십시오. – yacovm

답변

0

문제가 해결되었습니다. cli 컨테이너에서 script.sh를 실행하기 전에 sleep 30을 추가했습니다. 파일 docker-compose-cli.yaml

command: /bin/bash -c 'sleep 30; ./scripts/script.sh ${CHANNEL_NAME} ${DELAY} ${LANG}; sleep $TIMEOUT' 
+0

안녕하세요 @ 엔지니어, 비슷한 문제가 있습니다 .. 컨테이너를 시작하기 위해 couchDB 이외의 다른 CLI를 사용하고 있지만 해결 방법이 없습니다 .. https://stackoverflow.com/questions/48861659/카피 카와 사용하기 tls - hyperbelger-fabric-first-network-not-working-by-kafka –