
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
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
- Install git:
- Install docker
- Install docker compose
- Install golang (Do chaincode của hyperledge sử dụng golang)
- sudo apt-get install firewalld
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:2377To 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-kafkadocker stack deploy -c ekyc-order.yml ekyc-ordererdocker stack deploy -c ekyc-couchdb.yml ekyc-couchdb docker stack deploy -c ekyc-peer.yml ekyc-peerdocker stack deploy -c ekyc-cli.yml ekyc-clidocker 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 createJoin peer vào channelpeer channel joinInstall chain code vào peer và init chaincode trên từng peerpeer chaincode installpeer 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
0 Nhận xét