Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

Deploy Hyperledger blockchain on Docker swarm

Làm blockchain một thời gian mới nhận ra sai lầm tuổi trẻ khi thấy món này từ trước tới nay chủ yếu là chém gió demo chứ thực tế ứng dụng thì vô cùng mờ mịt, nên quyết định bỏ để sang làm món DevOps. Nhưng đời người đâu học được chữ ngờ, sau 3 năm rửa tay gác kiếm món blockchain thì lại có vụ cần làm, lại là demo tiếp. Tuy không interest nhưng đã có $ nhét vô mồm lại đang thời Covid đói rách thì nhắm mắt múc tất.

Sản phẩm demo là một hệ thống eKYC sử dụng blockchain Hyperledger. KYC là gì thì search Google sẽ có nhiều kết quả. Còn hiểu nhanh theo kiểu giaosucan’s blog thì đại loại là khi bạn ra ngân hàng gửi tiền tiết kiệm thì ngân hàng phải biết bạn là ai, nhà cửa quê quán ở đâu, để tránh trùng phải phần tử IS khủng bố. Thông tin của bạn như tên tuổi, ID, số điện thoại sẽ được lưu trên blockchain thay vì lưu database truyền thống.

Một mạng Blockchain Hyperledger thì có các thành phần sau là

  • Certificate Authority or CA dùng để quản lý user certificate như user registration, user enrollment 
  • Peer là blockchain node dùng để lưu các transaction

Orderer để sắp xếp các transaction, tạo block mới trong chuỗi chain 

Demystifying Hyperledger Fabric (1/3): Fabric Architecture | by Phuwanai  Thummavet | Coinmonks | Medium

Như vậy theo kiến trúc trên, 1 mạng BC cần deploy sẽ có 2 peer node 1 CA và 1 Orderer node. Mạng này được deploy from scratch trên Azure. Như vậy cần 4 con VM azure đặt tên là ekyc01, ekyc02, ekyc03, ekyc04

Do Hyperledger Fabric sử dụng docker nên có 2 cách để deploy mạng BC là dùng docker swarm và K8s  Bài viết này hướng dẫn cách sử dụng docker swarm

Docker Swarm là một nhóm các máy chạy Docker và tập hợp lại với nhau thành một cluster. Các máy tham gia vào swarm được gọi là worker node. Các node này chỉ có khả năng cung cấp khả năng hoạt động chứ không có quyền quản lý các node khác

Step 1) Cài đặt docker swarm

Vì dùng docker nên trước tiên phải install docker lên từng VM 

Chú ý những port mà docker swarm sử dụng

  • TCP port 2377 for cluster management communications
  • TCP and UDP port 7946 for communication among nodes
  • UDP port 4789 for overlay network traffic

Do đó trên mỗi VM phải open firewall cho những pod này

firewall-cmd --permanent --zone=public --add-port=2377/tcp --add-port=7946/tcp --add-port=7946/udp --add-port=4789/udp
firewall-cmd --reload

Các components của Hyperledger được viết dưới dạng docker-compose file 

Step 2) Setup docker swarm

Docker swarm hoạt động theo kiến trúc manager – worker nên cần setup một leader node trước

Ví dụ con ekyc02 là manager node, run lệnh dưới

docker swarm init
Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token <token> 172.18.2.5:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

Sau đó những VM còn lại run lệnh docker swarm join để join docker swarm. Nếu các VM đã join thành công có thể thấy kết quả như ở dưới

Step 3) Setup docker network

Do các docker container  chạy trên các node  khác nhau nên cần setup network để các docker container này kết nối với nhau

Docker network có nhiều dạng khác nhau như Host, bridge, overlay. 

Bridge là dạng mặc định được dùng các container chạy trên cùng 1 Docker daemon host

Host là các container dùng chung host networking

Overlay dùng để kết nối nhiều docker daemon với nhau cho nên loại overlay được sử dụng trong trường hợp này

Tạo một network là fabcricnetwork có driver là overlay

docker network create --attachable --driver overlay fabricnetwork

cho phép một standalone container có thể attach vào network

Output như dưới là docker network được setup thành công

Bước tiếp theo là generate folder crypto-config & config bằng script cryptogen của fabric

Deploy các container 

docker stack deploy -c ekyc-zookeeper.yml ekyc-zk

docker stack deploy -c ekyc-kafka.yml ekyc-kafka

docker stack deploy -c ekyc-order.yml ekyc-orderer

docker stack deploy -c ekyc-couchdb.yml ekyc-couchdb docker stack deploy -c ekyc-peer.yml ekyc-peer
docker stack deploy -c ekyc-cli.yml ekyc-cli
docker stack deploy -c ekyc-ca.yml ekyc-ca

Đây là các file docker compose tương tự như https://github.com/hyperledger/fabric-samples/blob/master/test-network/docker/docker-compose-test-net.yaml để deploy Hyperledger component 

Có 1 điểm chú ý muốn docker container run trên VM nào thì thêm thuộc tính này ở trong docker-compose file

placement:
constraints:
- node.hostname == ekyc01

Các container đã được deploy thành công

Trong trường hợp có lỗi có thể verify bằng logs

journalctl -u docker.service -n 30 | grep <service_id>

Bước cuối cùng là thực hiện các bước dưới bằng hyperledger cli

Tạo channel
peer channel create
Join peer vào channel
peer channel join
Install chain code vào peer và init chaincode trên từng peer
peer chaincode install
peer chaincode instantiate

Vậy là mạng BC đã được deploy thành công trên docker swarm, bạn có thể việc code để invoke chaincode function trong BC hyperledger

Đăng nhận xét

0 Nhận xét