# Lotus 服务器初始化
在使用机器之前,我们需要先统一把所有的机器初始化环境:
- 安装好 lotus 运行依赖库。
- 初始化并挂载好磁盘,主要是挂载 Worker 的 SSD/NVME 缓存盘,多张磁盘需要组 RAID 整列。
- 如果有 GPU 的机器还需要安装 GPU 驱动。
以上操作我们都可以通过原语云的 【任务面板】 来一次性批量完成。
提示
如果你的机器之前已经跑过集群了,那可能你的机器已经初始化过了,就可以跳过此步骤。此外你还需要做一件事情,就是把你之前用做 lotus/lotus-miner/lotus-worker 的 repo
目录所在磁盘设备重新挂载到 /yuanyu
目录下。具体详细的操作文档请阅读原语云集群迁移
# 01-安装 Lotus 运行依赖
安装 Lotus 运行依赖,并设置服务器时区,同步时间。
双击
任务面板
, 新建任务.点击
更多操作
下来菜单,编辑任务代码.复制第 1 步下载文件的内容,粘贴到代码输入框,保存代码
点击
更多操作
下来菜单,选择运行
.选择节点分发方式.
选择你需要推送脚本运行的节点,点击
确定
按钮.最后,输入服务密码之后即可执行.
脚本执行成功之后,右上角会弹出提示框.
可以导出脚本执行日志,查看执行结果.
# 02-安装 GPU 驱动
有 GPU 的机器都需要安装 GPU 驱动才可以正常工作。安装 GPU 驱动的步骤跟上面安装依赖差不多,只不过在编辑代码的时候,脚本引擎选择 Bash
, 然后把下面的脚本输入到代码编辑框中。
apt install nvidia-driver-460
安装完成之后记得禁止 GPU 驱动升级, 否则 GPU 驱动自动升级的话,会导致 GPU 无法调用,需要重启系统。
mv /etc/apt/apt.conf.d/20auto-upgrades /etc/apt/apt.conf.d/disabled.20auto-upgrades
mv /etc/apt/apt.conf.d/50auto-upgrades /etc/apt/apt.conf.d/disabled.50auto-upgrades
# 03-设置系统 ulimit 参数
随着扇区数量越来越多,在做时空证明的时候需要打开的文件也会越来越多,通常一个 Partition 超过 1024 个扇区之后 Miner 就会报 too many open files 错误,导致时空证明提交失败。daemon 在同步文件过多的时候也会出现类似的错误。这是因为系统默认的 ulimit
大小只有 1024.
提示
原语云在启动 miner
和 daemon
进程的时候会自动设置程序的 ulimit
为 1024000
, 所以,通常你是不需要手动去设置 ulimit 参数的,但是目前没有针对不同的系统做大规模的测试,如果你发现启动应用的时候没有生效,请自行手动设置。
你可以通过如下方式去检测当前 lotus/lotus-miner
进程的 max open files
参数具体是多少:
- 获取
lotus/lotus-miner
程序的进程 IDps aux|grep lotus-miner
- 查看进程的
max open files
参数(假设你的 lotus-miner 的进程 ID 为 1234):grep "Max open files" /proc/1234/limits # 会输出类似下面的信息 #Limit Soft Limit Hard Limit Units Max open files 10240 1048576 files
如果你的 max open files
值小于 65535 的话(不管是 Soft Limit 还是 Hard Limit),你可能需要把值设置得大一点,设置方法如下:
如果只是临时修改 ulimit 我们可以使用如下操作:
ulimit -n 1024000
如果要永久设置,操作就复杂一些。
2.1. 首先,需要设置系统层面的 ulimit。
echo 'fs.file-max = 1024000' | sudo tee -a /etc/sysctl.conf sudo sysctl -p # 立即生效
2.2. 然后在修改用户层的配置:
sudo tee -a /etc/security/limits.conf << EOF * hard nofile 1024000 * soft nofile 1024000 root hard nofile 1024000 root soft nofile 1024000 EOF
2.3. 然后修改 Systemd 层:
sudo sed -i '/DefaultLimitNOFILE/c DefaultLimitNOFILE=1048576' /etc/systemd/*.conf sudo systemctl daemon-reexec
改完记得要重启才能生效!!!
# 04-挂载磁盘
提示
1、如果你之前已经用官方或者其他方案搭建好了集群,现在想迁移到原语的服务来搭建,那么很可能你的机器的磁盘已经初始化了(已经挂载),那么您可以跳过磁盘初始化步骤。
2、原语云的应用的数据和日志都是默认存储在 /yuanyu
路径下,所以如果你是自己挂载磁盘的话,请务必记住把最大磁盘(数据盘)重新挂载到 /yuanyu
路径下,以免造成空间不足。
我们提供了一个 Ark
语言写的脚本,可以自动根据你的条件扫描出所有的未挂载的磁盘,并自动组建好 RAID0
,自动挂载并写入到 /etc/fstab
文件中。
警告
此操作会擦除磁盘所有数据,请谨慎操作。 如果过滤脚本只找到一块符合要求的磁盘,会直接格式化并挂载,如果找到多块磁盘,则会先组建 RAID0 再挂载。 已经挂载的磁盘不会处理。
下载 mount_disk.lua。
双击
任务面板
, 新建任务.点击
更多操作
下来菜单,编辑任务代码.复制第 1 步下载文件的内容,粘贴到代码输入框,保存代码
提示
你可能需要根据机器的具体情况修改
disk_min_size
和disk_max_size
这两个变量,分别表示最大磁盘大小和最小磁盘大小, 默认值分别为5TiB
和9TiB
(刚好可以筛选出 8TiB 的磁盘), 用来辅助你需筛选出符合你要求的磁盘,防止误把其他磁盘格式化了。如果你的是4TiB
的磁盘的话,这里你可以改成3TiB
到5TiB
。-- 下面两个变量可以帮助你筛选出你需要挂载的磁盘, -- 设置你需要挂在磁盘的最大 size 和 最小 size, 9TiB(5368709120000) and 9TiB(9684354560000) local disk_min_size = 5368709120000 local disk_max_size = 9684354560000 -- raid0 挂载路径 local disk_mount_path = "/yuanyu" -- 磁盘扫描策略,默认是使用 qark 来收集磁盘信息的, -- 但是如果你想要在 raid 的基础上再组 raid, 则建议你使用另外一个可选值:fdisk local disk_scan_policy = "qark"
点击
更多操作
下来菜单,选择运行
.选择节点分发方式.
选择你需要推送脚本运行的节点,点击
确定
按钮.最后,输入服务密码之后即可执行.
脚本执行成功之后,右上角会弹出提示框.
可以导出脚本执行日志,查看执行结果.
看到日志里面有类似:
/dev/md0 19T 30G 19T 1% /yuanyu
的结果,就说明磁盘挂载成功了。
# 05-配置 qark-client http 服务器 新功能
我们在 qark-client
内部实现了一个轻量级且极为安全的 http 服务器。所有的 Lotus 相关软件和 API, Token 文件都直接通过该服务器下载即可,使用和配置都极为方便。
- 服务器的根目录在
/var/www/html
。 - http 服务监听的端口是
17181
(来过我们公司的朋友应该对这个数字有点熟悉O(∩_∩)O~)。 - lotus 可执行程序的下载根目录是
http://<ip>:17181/lotus/
而不是http://<ip>:17181/
<ip>
为内网 IP
注意
虽然我们的 http 服务器在下载敏感信息的时候需要权限验证,比如在下载 JSON-RPC 的 API 和 Token 文件的时候会做权限认证,只有 qark-client
内部才能访问,但是我们还是建议您不要把 17181
端口暴露到外网。
← Lotus 快速部署 Lotus 基础运维 →