-
Sending Commands to Multiple EC2 Instances Using dsh
We moved Adafruit IO’s node.js services to a group of
t2.nanoEC2 instances, and I wanted to document mydshsetup. I used it reguarly a couple years ago for managing the backend workers when working on other services, but I had forgot how it was configured. It came in really handy when I needed to quickly check or kick anything on the servers.First, you will need to install
dshusingbrew,apt-get,yum, etc:$ brew install dshYou will need to make a couple config directories for your user:
$ mkdir -p ~/.dsh/groupCreate a new
dsh.conffile using your favorite text editor:$ vim ~/.dsh/dsh.confPaste the following config into
~/.dsh/dsh.conf, and save the file:showmachinenames = 1 remoteshell = sshNow, you can create a
dshgroup for the set of servers you would like to send commands to. Create a new file calledexamplein the~/.dsh/groupfolder using your favorite text editor:$ vim ~/.dsh/group/exampleEnter the host names for your servers, and save the file:
example-1.adafruit.com example-2.adafruit.com example-3.adafruit.com example-4.adafruit.comNow you can send commands (like
uptime) to all servers in the group using the following command:$ dsh -g example -w 'uptime' example-1.adafruit.com: 14:17:44 up 17:15, 0 users, load average: 0.08, 0.03, 0.05 example-2.adafruit.com: 14:17:43 up 16:36, 0 users, load average: 0.00, 0.01, 0.05 example-3.adafruit.com: 14:17:45 up 16:41, 0 users, load average: 0.00, 0.01, 0.05 example-4.adafruit.com: 14:17:45 up 16:41, 0 users, load average: 0.00, 0.01, 0.05Using
-wwill send the command to each server in the order they appear in the group config, and will wait for a response before continuing. If you want to send the commands concurrently to all servers in the list, use the-coption to send the command:$ dsh -g example -c 'uptime' example-1.adafruit.com: 14:22:42 up 17:20, 0 users, load average: 0.00, 0.01, 0.05 example-3.adafruit.com: 14:22:42 up 16:46, 0 users, load average: 0.00, 0.01, 0.05 example-2.adafruit.com: 14:22:41 up 16:41, 0 users, load average: 0.00, 0.01, 0.05 example-4.adafruit.com: 14:22:42 up 16:46, 0 users, load average: 0.10, 0.05, 0.05You can get an interactive shell for all servers in the group by using the
-cand-icommands together. Use CTRL-D to exit the session:$ dsh -g -c -i -
State of IO 3.18.16
Adafruit IO has been growing steadily, and we decided to add a changelog so it’s easier for users to see what we are up to. We will be posting here reguarly whenever we add or update features, and we will also be posting stats so you have more information about the growth of IO.
We have moved IO to a handful of Amazon EC2 instances, and we are finding it much easier to deal with increased load. The individual services are now split out into separate instances, which will allow us to scale horizontally.
Here’s a screenshot of what it looks like when we are monitoring the state of the new EC2 instances:

We have added IO to the Adafruit Status Page, which will allow you to check and see if any of IO’s components are currently down. You can also follow @adafruitstatus if you would like to be notified of outages.
Here are the stats for the past week:
* 24,290,428 inserts in the last 7 days * 8,997 users * ~6,700 online feeds (~18,200 feeds total) * ~50 inserts per second via MQTT * ~5 inserts per second via REST API
« Newer
Older »

