I’m trying to setup a small cluster with three nodes. I’m using libcluster as I have before. But my nodes doesn’t have a usable hostname. The VPS came with a hostname like this: ip-123-123-123-123. I’ve changed the hostname on the VPS but it doesn’t get picked up in the app when I restart it. I’ve restarted the server. And i can see that the hostname has changed on the server it self.
I’m seeing in the logs when it starts that it’s using the old hostname, which included the IP of the vps. So I get this error:
21:36:48.538 [error] ** System running to use fully qualified hostnames **
: ** Hostname ip-x-x-x-x is illegal **
The app is built using Mix release. From the docs I can see that I should be able to set RELEASE_DISTRIBUTION and RELEASE_NODE env variables. I’ve set them to the following:
This is what I found when looking for what makes an hostname valid as opposed to illegal. Maybe you’re missing the resolvable and reachable part.
Long names need the hostname to be resolvable and reachable, in other words it needs to either be an IP address or a valid DNS name. In the case of an IP address, it is already resolved so it only needs to be reachable from the current host. In the case of a DNS name, it needs to be resolvable by any one of the DNS resolution mechanisms on the host (/etc/hosts, /etc/resolve.conf, etc.) to an IP address which is reachable from the current host.
The hostname is indeed resolvable and reachable. But it doesn’t seem to pick up the hostname at all in my app. That’s the problem I think.
It keeps using the original hostname the VPS had when it was first setup. Now the hostname has changed to something that is reachable from the outside world as well. But it doesn’t seem to pick up the host name even though I set it explicitly with tne RELEASE_NODE env variable.
So, how are you setting up the nodes configuration?
What exactly do you mean by nodes configuration? Then only thing I’m trying now is to make sure my node has the right hostname (using RELEASE_NODE & RELEASE_DISTRIBUTION ) so I can connect to it from another node. After that I’m setting up libcluster.
This is a bit grasping for straws here, but are you sure the correct environment variable values reach the release startup scripts (and the application)? I’ve set up libcluster successfully in AWS Fargate using RELEASE_DISTRIBUTION and RELEASE_NODE and this was one of the hurdles. Unfortunately I don’t know Lightsail that much.
To debug this you can try to sprinkle echo statements in shell scripts and perhaps check the app environment if you have access to the Elixir shell.
I really appreciate your input. Thank you so much for taking the time to grasp for straws.
So I’ve looked a bit more into it. From what I can see, when I look at the process systemctl starts up using the environment variables, it seems to set the correct --name param to the domain that is reachable from the outside world.
But still, the app complains that another Hostname is set, which is not legal. I can’t connect to the running app because it never finishes starting.