蜂灯科技基于对区块链技术的深度探索,决定开设技术分享专区,为进阶中的伙伴们打造一个学习、交流的共享平台。本期技术分享主题:链集群方案拓展。

产品功能简介

Daemon 作为 Lotus 集群中的节点进程,用于处理链上的共识信息,是各个集群与整体 Lotus 网络通信的网关,是 lotus 集群的重要组成部分。Daemon 的作用是:验证网络事务,管理钱包,可以执行和检索处理。由于 Daemon 在 Lotus 的集群中扮演着重要的角色,所以 daemon 服务的健康和稳定是非常重要的。本方案可以做到集群运行过程中 miner 机器可智能自动寻找集群中最优状态的 daemon,保证高可用,避免单点故障影响整体,还可在集群运行过程中无任何影响地进行 daemon 剪枝操作,也可在共识升级过程中平滑升级,无需集群停机。无论是在硬件运维还是软件运维的场景,既保证了集群的稳定和安全性能便于技术人员操作简单易行。

技术方案说明

在集群系统中,用于保证服务稳定的解决方案都是多实例的负载均衡。这里需要解决三个问题:问题一daemon 的接口验证机制每个节点都有各自不同的 JWT 作为接口权限验证,虽然服务接口内容本身是无状态的,由于存在这样的权限验证机制,使得服务做不到“无状态”。我们通过配置文件指定每个 daemon 节点的 JWT,在 daemon 启动的时候读取,加载进内存使用。问题二daemon 的状态监控如何确认 daemon 节点当前的工作状态,这是一个问题。传统的做法有检测端口、扫描日志、hello 接口测试,这样的方案在 Lotus 场景中,都或多或少存在一些漏洞。我们回归初心,重新审视 daemon 的核心功能,同步高度。****将每个 daemon 节点的当前高度实时写入数据库,保持最大高度的节点,一定是健康工作的节点。问题三miner 接口请求的转发 **miner 节点在启动服务之初,就需要跟 daemon 建立 tcp 长连接,后续接口调用如果需要发送 rpc 请求,如果重新初始化连接会造成很多连锁问题。我们给 miner 内置了一个 socket 转发服务,能够专门处理连接建立和转发的问题。上述三个解决方案可以极大做到链集群服务的高可用,可以保证不会因为单个 daemon 节点的维护而影响到整体集群的运转效率**。

部署说明

1. 需要获得lotus-beePro 版授权、开通 lotus 链集群功能 feature,需要 lotus 和 lotus-miner 程序配合使用。2. 需要连接数据库,配置环境变量。(daemon 机和 miner 机上都需要配置,配置好以后重启生效)

export DAEMON_CLUSTER=true _#开启链集群功能 _export DAEMON_SQL_PATH=/home/data/daemon-sql.json

3. 数据库配置文件:daemon-sql.json 的模版。(daemon 机和 miner 机上都需要配置)

{'name': 'beelant','addr': '172.16.1.1', // 数据库的访问地址'db': 'f0123',// 数据库名称'username': 'beelant',// 数据库账号'password': 'beelant',// 数据库密码'maxIdleConn': 0,'maxOpenConn': 100,'connMaxLifetime': 0}

4. daemon 机需要配置自身的 ip 和服务端口,用于 miner 访问,目前只支持单个 ip。

export DAEMON_URL=172.29.29.127:1234

5. 用第一台启动好的 daemon 的工作目录下,会生成一个文件“beePrivateKey”,将此文件复制到所有 Daemon 集群中的其他机器上,然后重启 daemon 服务。6. miner 上配置环境变量,然后重启 miner 服务。

export FULLNODE_API_INFO=(lotus_jwt_token):/ip4/127.0.0.1/tcp/8888/http#这里 ip 一定是本机 IP,端口是 8888

7. 配置完成。

更多产品信息以及咨询,请联系我们,欢迎为你答疑解惑!