新出了树莓派4,性能方面可以说对于老的 3B+ 的版本可以说是有全面的提升。但价格方面 4G 内存配置的就已经需要 50$,已经逼近台 x86 的准系统。同时因为树莓派是裸板,如果想要在生产环境使用,后面还需要自己增加存储、外壳等,全套上去其实性价比已经不高。
个人在家里部署了几台树莓派用来做小的应用服务器以及网关,详细看这里。在社区讨论新的树莓派4的时候,网友无意间说道「为什么不考虑下斐讯的N1?」
由于原先的 Prometheus 和 Grfana 是在台虚拟机里,从安全的角度叫上说监控还是使用单独的硬件更加合适些,所就立马入了台 N1 用来当作单独的监控系统。
硬件
购买的渠道先不说了,总之你总能办法到手的,普遍价格依据成色从几十到一百出头不等。由于是矿难的遗留物,所以建议还是买带包装以及三码合一的产品,差价其实并不是很大。
下面硬件方面,我们对比斐讯的 N1 和树莓派3B+做个对比:
/ | 斐讯 N1 | 树莓派 3B+ |
---|---|---|
CPU 和平台 | Amlogic ARM64 | BCM2835 ARMv7 |
内存 | 2G | 1G |
存储 | 自带 8g EMMC | 另外安装 SD 卡 |
外观 | 自带外壳 | 裸板,需要外壳自行购买 |
价格 | 100+ | 裸板200+,外壳和存储另算 |
总体来说,对于性能(平台)以及性价比方面,斐讯 N1 都是要比树莓派3B+要强不少的,尤其是 EMMC 是非常加分的项目。具体性能方面,可以参考这篇文档这里不放具体的指标和数字了。
系统
目前二手市场上很多卖家都提供了刷机服务,我这边为了节省时间直接让卖家给刷了 Armbian 系统。
到手以后 SSH 上去发现存储空间有些不对,还需要些调整。原先还有部分 Android 的文件在其他的分区,可以直接执行 blkid
查看可以的块设备。
大概有那么几个块设备可以使用:
/dev/cache
/dev/tee
/dev/system
/dev/data
可用的几个:/dev/data
是目前的根分区,我们不用动它,而 /dev/tee
这个分区太小没有使用的价值,所以个人将 /dev/system
格式化为 ext4 mount 到了 /home
以及将 /dev/cache
作为 swap 分区备用(512MB 有点鸡肋)。
Filesystem Size Used Avail Use% Mounted on
udev 789M 0 789M 0% /dev
tmpfs 180M 17M 164M 10% /run
/dev/data 4.4G 2.4G 2.0G 56% /
tmpfs 900M 0 900M 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 900M 0 900M 0% /sys/fs/cgroup
tmpfs 900M 0 900M 0% /tmp
/dev/system 1.2G 294M 855M 26% /home
log2ram 50M 13M 38M 25% /var/log
tmpfs 180M 0 180M 0% /run/user/1000
以及 free(已经运行了部分服务的情况):
total used free shared buff/cache available
Mem: 1.8G 205M 837M 28M 756M 1.5G
Swap: 511M 0B 511M
所以,总体分区调整配置完了以后,大概是这样子总计占用的空间大概 7G 不到一点,但其实足够日常使用了(其实是不想在系统瘦身这块花更多的时间)。
调整完分区,然后关闭不必要的服务和启动项。关闭和删除红外线服务:
systemctl disable lircd.service lircd-setup.service lircd.socket lircd-uinput.service lircmd.service
apt remove -y lirc
关闭 NFS 服务,在集群里已经有 NFS 服务器了,所以不需要:
systemctl disable nfs-server
禁止图形界面启动的 Hook,这个其实没必要操作,但为了避免自启动有些图形应用:
systemctl disable graphical.target
后面添加清华的镜像源,安装 Docker CE
等操作就不复述了。这样子,重启以后系统层面的配置就完成了。
配置
下面主要说下这个机子安装 Prometheus 和 Grafana 遇到的些坑。首先,就是平台的问题,由于是 ARM64 的设备,所以直接用 Docker 镜像(默认 x86/amd64)是行不通的,需要使用针对平台的 Docker 镜像。
下面是我简单的 docker-compose 配置,注意镜像的名称:
services:
prometheus:
image: prom/prometheus-linux-arm64:v2.10.0
container_name: prometheus
hostname: prometheus
user: "root"
restart: unless-stopped
volumes:
- /etc/hosts:/etc/hosts:ro
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./targets.json:/prometheus-targets.json:ro
- prometheus-storage:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=6month'
- '--storage.tsdb.retention.size=2GB'
- '--web.enable-lifecycle'
ports:
- 9090:9090
grafana:
image: grafana/grafana:6.2.5
container_name: grafana
hostname: grafana
user: "root"
restart: unless-stopped
links:
- prometheus
volumes:
- /etc/hosts:/etc/hosts:ro
- grafana-storage:/var/lib/grafana
- grafana-provisioning:/etc/grafana/provisioning
ports:
- 3000:3000
depends_on:
- prometheus
因为机子的存储容量较少,针对 Prometheus 最好追加个容量方面的限定参数,例如我这边配置了:
- '--storage.tsdb.retention.time=6month'
- '--storage.tsdb.retention.size=2GB'
6个月或者总容量到达 2GB 的时候自动清除老的数据,默认 Prometheus 清除时间为 15d,很多刚开始接触 Prometheus 的同学表示为什么会「丢数据」也是因为这个原因。
注意到 Alert Manager
和 Node Exporter
以及 Push GateWay
都没有加入 Docker 的部署。原因一来是官方没有针对 ARM64 平台的镜像,二来这些服务相对比较简单、同时数据也不用纳入 Docker Volume 管理,因此就直接下载安装包运行。
后续
安装配置好了以后,上面跑了十几个 Job 用来 Pull 各个节点的状态负载其实并不高:
总体来说,用来监控十几个节点的小集群常规数据是足够了的,还能带起 Grafana 服务。说起来,这些只要一百出头三顿麦当劳的价格,性价比超高。
由于还是担心存储的问题(一般来说是足够了),我还是给它增加了块 64G 的 U 盘(存储比机子贵),挂在 /var/lib/docker
专门用来跑 Docker 服务以及保存 Docker Volume 使用,这样子安心多了。
由于价格便宜,我后面又追加了几台 N1 机器当作备用机以及单独的集群。估计以后 Docker Build 出来的镜像都是 ARM 平台的了(例如我单独给树莓派维护的 Syncthing 镜像),谁叫它性价比高呢。
- eof -