Windows - Multiple Nodes on Single Machine

So I been trying to figure out the best course of action to take in the event of my disk becoming full. This is just so I am prepared. I am running a windows server. I use this server daily for my own personal use, reason on why it’s running 24/7. Most of the time it’s light usage. I should look into setting up another ethernet adapter dedicated for local traffic and the other for internet, one day when I figure that out.

I have only 2 options available for this setup. Mainly due to it having to stay as windows server and limited RAM & CPU resources.

  1. Setup RAID Volume on windows storage pool. I can just expand storage as needed by adding more disks. Only a single node to manage, get auto updates. I do waste disk space but rather have more up time anyways.

  2. Multiple storagenode.exe process’s (Multiple Nodes). I understand I can run multiple process’s using the same app as long as the configuration and data locations are different for each. One node per HDD. I would have to manage multiple nodes. Configure multiple ports. This would require a lot more monitoring and configuration vs the raid setup. The only problem with this is figuring a way to do automatic updates because I can only check on the machine twice a day at the most. I do understand that the updater will stop only the coded update service name in the app.

I did saw in another form post is to use dependencies on the windows services to stop other windows services nodes, this would allow an update and start them all up again afterwards. If the other nodes are relying on that single exe to run from, in theory they all should update. I do have an app that can let me create windows services easily besides editing them except for adding/editing dependencies.

I don’t know how I would setup multiple nodes services with dependencies. If anyone has done this, leave a reply. The only way to test my theory is to do a live test.

I will use option 2 only if I can get auto updates working, if not, it looks like I be stuck with using RAID due to my setup which I have no problem with using.

@SpyShadow thanks for exposing your use case.

Currently, I would suggest to be stuck in one single storage node instance per machine (physical or virtual). We designed the Windows installer bearing in mind that one single storage node will run in the machine.

Can more than one storage node run in the Windows same machine? Maybe, but we don’t know as we haven’t planned nor tested.

Are we going in the future to support it? As far as I know, I haven’t heard about it, but we consider the use cases of our SNOs and prioritize tasks, so it may eventually happen.

1 Like

I have win GUI, 5 Nodes on 1 windows PC, work fine.
only 1 problem last 4 need to update manualy, as updater is not configurable and service name is hardcoded. Also UPS to mantain small power issues.

I agree with @ifraixedes
Alternatively you can use docker to set up the nodes. That will allow you to run multiple nodes in a way that is supported right now.

Docker eat more memory.
GUI i never seen over 30-40MB Ram

@BrightSilence I already tried to setup docker and I was unable to get it working. Personally I don’t feel comfortable messing with it. I do know it’s a virtual machine running on hyper v. I am trying to avoid using any virtual machines.

@ifraixedes The reason for adding more nodes would be for expanding the storage because of the existing disk becoming full. I have the option of either using RAID (Waste Space) or Run Multiple process’s on the same machine.

I did tested the ability to run multiple nodes and it indeed can work as long as you configure everything correctly. As @Vadim mentioned, it’s the updater that’s the issue. I would not have time to update the thing. So it has to be automatic. I am going to see if I can setup the storagenode services correctly with dependencies on the other storagenodes. If all the nodes are loading the single storagenode.exe into memory and relying on the single storagenode service for start/stop control, updating should work.

If you do relations, then if first node go down, then all nodes go down, so i not added this relations.

Guess that’s a risk I might have to take. I don’t know if it what I am doing is even going to work correctly in the first place. Mostly I be testing the updater and seeing if the service dependencies work.

If I can’t get this to work, then I am stuck using the RAID option. I know that will work, I be able to expand the storage easily, quickly. It does suck I lose out on some capacity with this method but I know it would work.

I already have a plan to even expand my storage to a 2nd chassis in case the main get’s full physically. I have a 15 bay chassis, Rosewill RSV-L4500. I am currently using 13 slots. 12 are on my own personal storage raid pool. One HDD is being used for storj. If I fill it up, to continue to expand, I would get a 2nd chassis and install a SAS Expander while the server would have a SAS Host Bus Adapter Card, this be connected to each other. The drives would appear as if it’s connected to the machine physically.

i think it is posible to make app or skript, that will check your first node version, and if it newer then stop other nodes, update and start them.

I been messing with the dependencies for a few hours now. I had to find some code on the internet to make a dummy app to play around with on windows services.

So far I got it to where if “start” command is sent to a single service, they all start up. I am now trying to figure out how to get the same service to stop them all too.

So it looks like I be stuck having to restart the other nodes when an update happens. The primary node would get it’s update like normally. Only it’s related service would stop and start to do the update. Other’s would continue to run. They be configured to use the same exe from the primary. I would just have to restart those node for them to load up the new exe.

So I would have to restart all nodes after an update to be sure they are updated. Problem is, it can be hours before I notice they are out of date due to being away from the machine.

So it’s probably best for me to go with the software RAID setup just to avoid dealing with having to do updates all the time.

but we consider the use cases of our SNOs and prioritize tasks

Well, from reading the forums you should know by now that using multiple HDDs is a more than common use case.

All the RAID or drive pooling considerations run into some sort of problem/limitation that could be foregone by allowing 1 node per HDD/CPU just like back in the day with v1. And yes, I do know why you went away from that approach - still, this left us with a currently unsolved issue (in my personal case it leads to 50% of my free HDDs collecting dust instead of being used)

You are free to run multiple nodes with docker.
The Windows GUI doesn’t have this builtin ability.

Docker NEVER worked for me, so no.

Also, in v1 I was able to simply click “add Node”, choose a port and i was good to go. Making it so much more complicated in v3 simply is a step back.

Docker never worked for me either.

How long can a node be out of date before being disqualified?

If I setup multiple nodes on my windows machine, there is only a few times of the day I be around the PC. That be the time I can do a manual update (Restarting All Services).

To think about it, I could setup a task scheduler job that could launch a batch script that would simply restart all node services at 1 am or something. The updater will still update at least one of the nodes, the task job would restart the rest so they can load up updated app.

I could possibly tell it to restart at 12:00 AM or PM all the time.

Batch Script be very simple, each service can be a single line
net stop storagenode1 && net start storagenode1

I already have a batch script setup for automatically stopping the services and renaming the logs.

At the moment they are not disqualifying nodes for downtime, but I wouldn’t expect that to last forever. The current terms and conditions at https://storj.io/storj-share-terms/ require at least 99.3% availability per month (5 hours max downtime monthly). I would not be surprised if they tweaked those numbers soon though as they move from beta to launch.

You could have your batch file compare the auto updated node to the manual updated node to see if a restart is needed using the fc (file compare) command. This example compares two text files: C:\1.txt and c:\2.txt

@echo off
fc C:\1.txt c:\2.txt > nul
if errorlevel 1 (
echo The two files are different
) ELSE (
echo The two files are the same
)

I would prefer not to have to depend on a batch file for my node to be updated its better to just start with a single node. But if you notice there’s always a minimal version so you would have time to get them updated one at a time. Even running linux would be a better choice if you wanted to run more then one node, unless this is your main machine that you use everyday but I wouldn’t recommend doing it that way.

I could setup a task scheduler job that could launch a batch script that would simply restart all node services at 1 am or something

My batch script somehow requires admin privileges, what did you do about that issue?

I have my placed in the same folder as the program. I am using windows server. I never got the prompt probably due to me using the administrator account on the PC.

I never got the prompt probably due to me using the administrator account on the PC

I never get the prompt either, but the script only works when i manually run it as admin. Thanks for the link, will check that out later :slight_smile: