# MASS 矿池维护指北
# 矿池角色

# Stratum
## 目录结构
|
|- log/ 目录存储 Stratum Server 的日志,注意定期清理
|- PoC_stratum 可执行程序 Stratum 主体
|- cert.pem 根证书 用于认证合法的 Manager
|- stratum1.crt stratum1.key 证书及密钥
|- log_config.conf Boost::Log 配置文件 建议不动
|- stratum_config.json Stratum 配置文件
## 配置文件
``` JSON
{
"listen_port": 1234,
"manager_ip" : "172.16.47.32",
"manager_port": 2223,
"certs_info": {
"cert_file" : "stratum1.crt",
"key_file": "stratum1.key",
"key_passphrase": "",
"verify_cert_file": "cert.pem"
},
"keepalive_times" : 3,
"keepalive_interval": 8,
"io_thread_nums": 4,
"comp_thread_nums": 2,
"reconnect_interval": 1,
"upload_miners_info_interval": 10,
"log_level": 0,
"calc_slots": 20,
"transfer_body_buffer_size": 81920
}
```
其中需要调整的配置有,其余建议不动:
`listen_port`: 监听端口,用于矿机连接
`manager_ip` 和 `manager_port`: port 为固定 2223,不要调整。
`certs_info`: 根据实际文件名调整
`io_thread_nums`: IO 线程数量,根据 CPU 核心数酌情调整
`comp_thread_nums`: 计算任务线程数量,根据 CPU 核心数酌情调整
## 注意事项
stdout 有部分debug信息输出,请忽略
stratum server 偶尔 crash(频次极低,原因暂未排查), 建议使用 systemd 等管理工具配置自动重启。
# Manager
## 目录结构
|
|- log/ 目录存储 Manager 的日志,注意定期清理
|- PoC_manager 可执行程序 PoC_manager 主体
|- cert.pem 根证书 用于认证合法的 Stratum Server 及 FullNode
|- manager.crt manager.key 证书及密钥
|- log_config.conf Boost::Log 配置文件 建议不动
|- manager_config.json Manager 配置文件
## 配置文件
```json
{
"listen_port": 2224,
"certs_info": {
"cert_file" : "manager.crt",
"key_file": "manager.key",
"key_passphrase": "",
"verify_cert_file": "cert.pem"
},
"db_info": {
"host": "",
"username": "",
"password": "",
"database": ""
},
"io_thread_nums": 1,
"comp_thread_nums": 1,
"log_level": 0,
"transfer_body_buffer_size": 81920
}
```
其中需要调整的配置有,其余建议不动:
`listen_port`: FullNodes 监听端口,用于 FullNode 连接
`certs_info`: 根据实际文件名调整
`db_info`: 根据数据库实际情况调整
`io_thread_nums`: IO 线程数量,根据 CPU 核心数酌情调整
`comp_thread_nums`: 计算任务线程数量,根据 CPU 核心数酌情调整
## 矿机在线 API
`GET` `http://ip_of_manager:8080/online`
## 注意事项
stdout 有部分debug信息输出,请忽略
建议使用 systemd 等管理工具配置自动重启。
# 数据库
## 字段
表名和字段名足够清晰明确,请直接查看数据库表结构。
## 注意事项
表`share_logs` 建议定期清理,此次提供一个"每日将 `share_logs` 重命名为日期命名的 `share_logs` 表并新建 `share_logs` 表"的脚本,建议使用 systemd-timer 每日定时执行
``` bash
#!/bin/bash
set -x
date=$(date '+%Y_%m_%d')
echo $date
mysql -h {host} -u {username} -p'{passwrod}' -D {database name} -e "rename table sharelogs to sharelogs_$date; CREATE TABLE sharelogs LIKE sharelogs_$date;"
echo "done."
```
# 注意事项
请关注数据库、Manager、Stratum 的运行情况,酌情扩容或排查问题,从以往经验来看,数据库出问题的概率较大。
# Kernel 参数调整建议
`/etc/sysctl.conf`
```
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_no_metrics_save=1
net.core.somaxconn = 262144
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
```
`/etc/security/limits.conf`
```
root soft nofile 262144
root hard nofile 262144
* soft nofile 262144
* hard nofile 262144
```