Fast propagative task runner for systems which consist of a lot of servers.
Grifork runs defined tasks on the system in a way like tree's branching.
Give grifork a list of hosts, then it creates a tree graph internally, and runs tasks in a top-down way.
Grifork has two modes to work:
- Standalone mode. This requires grifork program only on the root server in the tree graph: i.e. the server which invokes tasks.
- Grifork mode. On the other hand, this requires grifork program to work on every node in the graph.
Take a look at each mechanism.
The image below illustrates a 3-depth tree of 13 nodes including root node.
We are running a task to copy a file tree to every host.
1st stage is completed: to copy them to nodes in 1st generation.
Now at 2nd stage, root node logins each of its children by ssh and kicks rsync program there, in order to copy the file tree from 1st to 2nd generation.
- Max concurrency of running task in standalone mode is the number of nodes at the generation which holds max. This is the last genaration or the genartion before the last.
The image below is similar to previous situation except that this is in grifork mode.
In this mode, parent nodes in the graph invokes grifork command on every child node via ssh, giving the graph tree which descends from each child node.
- Ruby v2
- ssh, rsync
git clone https://github.com/key-amb/grifork.git cd grifork bundle
edit Griforkfile ./bin/grifork [--[f]ile path/to/Griforkfile] [-n|--dry-run]
Griforkfile is DSL file for grifork which configures and defines the tasks to be executed by grifork.
Here is a small example:
branches 4 log file: 'grifork.log' hosts ['web1.internal', 'web2.internal', 'db1.internal', 'db2.internal', ...] local do rsync '/path/to/myapp/' end remote do rsync_remote '/path/to/myapp/' end
If you run
grifork with this Griforkfile, it just syncs
localhost to target
See example directory for more examples of Griforkfile.
And refer to Grifork::DSL as API document of Griforkfile.
IKEDA Kiyoshi firstname.lastname@example.org
The MIT License (MIT)
Copyright (c) 2016 IKEDA Kiyoshi