Jade Dungeon

管理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