iScale
Tool to manage large clusters at Scalarium from command line.
While Scalarium offers a powerful web dashboard to manage your cluster you are usually a lot faster working from command line. iScale is there to provide a role-based approach for displaying data or opening shells for a single instance, all instances of a role or multiple roles in a single command.
Installation
- Download iScale files to local directory (used as
DIR
below). mv DIR/config/iScale.yml ~/.iScale
- Edit ~/iScale to add your Scalarium username, your Scalarium token and shortcuts to your cluster names.
cat DIR/config/ssh_config >> ~/.ssh/config
Dependencies
iScale depends on these gems to be available:
- rest-client
- json
- yaml
The open command depends that iScale runs on a Mac that has iTerm installed. Applescript is used to open the shells. All other commands run on any Linux or Unix machine.
Commands
Command pattern is always iScale <cluster shortcut> <command> [<names>]
but as always there is one exception: The deploy
command is called without specifying a cluster shortcut
(see below).
Cluster shortcuts can be defined in .iScale configuration file, otherwise specify the full name of the Scalarium cluster to use.
roles
Syntax: roles
Displays all roles of a cluster.
PROMPT$ iScale.rb staging roles
db-master: 6 instances
db-slave: 0 instances
hudson-slave: 1 instances
lb: 1 instances
monitoring: 1 instances
monitoring-master: 1 instances
rails-app: 0 instances
redis-masters: 5 instances
redis-slaves: 0 instances
load
Syntax: load <roles>|all
Executes uptime
on specified servers and displays load information in a list. <roles>
can be a single role or a list of roles.
PROMPT$ iScale.rb staging load db-master redis-masters
db-master
mws-xdb-m01: ssh -A [email protected] => load average: 0.07, 0.02, 0.00
mws-xdb-m02: ssh -A [email protected] => load average: 0.07, 0.02, 0.00
mws-xdb-m03: ssh -A [email protected] => load average: 0.07, 0.02, 0.00
mws-xdb-m04: ssh -A [email protected] => load average: 0.01, 0.01, 0.00
mws-xdb-mf1: ssh -A [email protected] => load average: 0.00, 0.00, 0.00
mws-xdb-testing1: ssh -A [email protected] => load average: 0.00, 0.00, 0.00
total load average: 0.04, 0.01, 0.00
total load: 0.22, 0.07, 0.00
redis-masters
mws-redis-m01a: ssh -A [email protected] => load average: 0.00, 0.00, 0.00
mws-redis-m02a: ssh -A [email protected] => load average: 0.00, 0.00, 0.00
mws-redis-m04c: ssh -A [email protected] => load average: 0.00, 0.00, 0.00
mws-redis-mu1: ssh -A [email protected] => load average: 0.00, 0.00, 0.00
mws-redis-mu2: ssh -A [email protected] => load average: 0.00, 0.00, 0.00
total load average: 0.00, 0.00, 0.00
total load: 0.00, 0.00, 0.00
cpu
Syntax: cpu <roles>|all
Executes iostat 3 2
on specified servers and displays cpu usage information in a list. <roles>
can be a single role or a list of roles.
PROMPT$ iScale.rb staging cpu db-master redis-masters
db-master cpu average: %user %nice %system %iowait %steal %idle
mws-xdb-m01: ssh -A [email protected] => 0.00, 0.00, 0.00, 0.00, 0.00, 100.00
mws-xdb-m02: ssh -A [email protected] => 0.00, 0.00, 0.17, 0.00, 0.00, 99.83
mws-xdb-m03: ssh -A [email protected] => 0.00, 0.00, 0.00, 0.00, 0.00, 100.00
mws-xdb-m04: ssh -A [email protected] => 0.00, 0.00, 0.00, 0.00, 0.00, 100.00
mws-xdb-mf1: ssh -A [email protected] => 0.17, 0.00, 0.00, 0.00, 0.00, 99.83
mws-xdb-testing1: ssh -A [email protected] => 0.00, 0.00, 0.17, 0.00, 0.00, 99.83
total cpu average: 0.03, 0.00, 0.06, 0.00, 0.00, 99.92
total cpu: 0.17, 0.00, 0.34, 0.00, 0.00, 599.49
redis-masters cpu average: %user %nice %system %iowait %steal %idle
mws-redis-m01a: ssh -A [email protected] => 0.00, 0.00, 0.00, 0.00, 0.00, 100.00
mws-redis-m02a: ssh -A [email protected] => 0.00, 0.00, 0.00, 0.00, 0.00, 100.00
mws-redis-m04c: ssh -A [email protected] => 0.00, 0.00, 0.00, 0.00, 0.00, 100.00
mws-redis-mu1: ssh -A [email protected] => 0.00, 0.00, 0.00, 0.00, 0.00, 100.00
mws-redis-mu2: ssh -A [email protected] => 0.00, 0.00, 0.00, 0.00, 0.00, 100.00
total cpu average: 0.00, 0.00, 0.00, 0.00, 0.00, 100.00
total cpu: 0.00, 0.00, 0.00, 0.00, 0.00, 500.00
open
Syntax: open <names>
Opens a shell using ssh -A
to all specified instances and immediately executes sudo -sEH
afterwards. This will allow you to use your local private key to connect to other instances within the cluster. <names>
is a list that can contain role or instances names. Unless <names>
is a single instance's name shell are opened in a new iTerm window.
PROMPT$ iScale.rb staging open db-master zeus mws-redis-mu1
opening new window...
execute
Syntax: execute <role> <command>
Opens a shell using your configured user name on each instance of specified <role>
and executes the specified <command>
.
PROMPT$ iScale.rb staging execute db-master uptime
################################ mws-xdb-mf1 #################################
14:11:40 up 65 days, 23:24, 0 users, load average: 0.00, 0.00, 0.00
############################## mws-xdb-testing1 ##############################
14:11:39 up 113 days, 4:01, 0 users, load average: 0.02, 0.06, 0.02
################################ mws-xdb-m01 #################################
14:11:39 up 139 days, 12:20, 0 users, load average: 0.00, 0.00, 0.00
################################ mws-xdb-m02 #################################
14:11:39 up 211 days, 35 min, 0 users, load average: 0.00, 0.00, 0.00
################################ mws-xdb-m03 #################################
14:11:39 up 211 days, 35 min, 0 users, load average: 0.00, 0.00, 0.00
################################ mws-xdb-m04 #################################
14:11:39 up 211 days, 34 min, 0 users, load average: 0.00, 0.00, 0.00
deploy
Syntax: deploy <application
Starts deployment of an application. Check the Scalarium web site on progress. Be careful is multiple applications have the same name!
PROMPT$ iScale.rb deploy "MW SSL"
{"migration_instance_id":null,"recipes":null,"status":"running","command":"deploy","shift_between_restarts":0,"revision":null,"created_at":"2011/07/08 16:20:45 +0000","custom_json":null,"updated_at":"2011/07/08 16:20:45 +0000","comment":null,"successful":null,"completed_at":null,"migrate":null,...}
md5sum
Syntax: md5sum <role> <file>
Compares md5sum
output for specified <file>
on every instance of <role>
. Results are grouped together to quickly check if one or more instances have a different (configuration) file deployed.
PROMPT$ iScale.rb staging md5sum db-master /home/ubuntu/some.properties
6x 9028c2a1f3d95c9396ba1f218570f58f: mws-xdb-m01 mws-xdb-m02 mws-xdb-m03 mws-xdb-m04 mws-xdb-mf1 mws-xdb-testing1