管理Raspberry Pi集群
用pi-cluster复制多个镜像
pi-cluster脚本的位置: https://github.com/bg3mdo/picluster
里面python、shell脚本、C程序都有:
- dumptf2img:把做好的系统导为镜像。
- pishrink:缩小镜像体积中的空白空间。
- mtfclone:把一个镜像烧录到多个TF卡中
- ipconfgen:生成主机名与ip地址组合。
- ipconf2tf:生成的主机名与ip地址组合写到多个TF卡中
- ledservice:集群中多个树莓派供电状态的LED显示
步骤
系统做为镜像
bash dumptf2img.sh ~/workspace/pishrink/rpi.img
缩小空白空间
bash pishrink.sh ~/workspace/pishrink/rpi.img
复制镜像到TF卡
插入多个TF卡到USB hub上:
bash img2multitf.sh ~/workspace/pishrink/rpi.img sde sdf sdg .....
生成主机名与IP地址配对
修改ipconfgen.py
:
host_name = "pifarm" # 主机名 node_no = 24 # 节点的数量 node_st_ip = 100 # 地址开始位置 node_preip = '192.168.100' # 网段 node_mask = 24 # 掩码 node_dns1 = "192.168.100.1" # DNS node_dns2 = "" # DNS
调用:
python ipconfgen.py
会在confs
下生成多个目录每个目录对应一个配置
把配置应用到TF卡上
把前一个工具ipconfgen生成的confs
目录放到ipconf2tf的目录下:
python ipconf2tf.py
然后按提示输出每个TF卡对应的设备号与conf配置目录。
用ansible管理Raspberry Pi集群
安装
sudo apt-get install ansible
配置文件/etc/ansible/host
中定义多个组,每个组有多台机器:
[pifarm_collection] // 组的名字 192.168.1.1 // 每行一个IP 192.168.1.2 // 每行一个IP 192.168.1.3 // 每行一个IP
例:然后指定名为pifarm_collection
组中所有的机器都执行ping操作:
ansible pifarm_collection -m ping
等待回显每个机器操作的结果:
192.168.1.1 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.1.2 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.1.3 | SUCCESS => { "changed": false, "ping": "pong" }
或是指定重启:
ansible pifarm_collection -a "reboot" -b
等待回显每个机器操作的结果:
192.168.1.1 | SUCCESS => { "changed": false, "msg": "Failed to connect to the host via ssh: Shared connection to 192.168.1.1 closed." "unrachable": true } 192.168.1.2 | SUCCESS => { "changed": false, "msg": "Failed to connect to the host via ssh: Shared connection to 192.168.1.2 closed." "unrachable": true "ping": "pong" } 192.168.1.3 | SUCCESS => { "changed": false, "msg": "Failed to connect to the host via ssh: Shared connection to 192.168.1.3 closed." "unrachable": true "ping": "pong" }
或是更新系统:
ansible pifarm_collection -a "apt-get update" -b