> For the complete documentation index, see [llms.txt](https://docs.nodeum.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.nodeum.io/data-archiving/install-and-deploy/nodeum-server-ip-migration-guide.md).

# Nodeum Server IP Migration Guide

### Overview

This guide describes the process for migrating a Nodeum Data Archiving server to a new IP address.&#x20;

### Pre-Migration Checklist

* [ ] Document the current IP address
* [ ] Identify the new IP address and subnet
* [ ] Plan maintenance window (services will be temporarily unavailable)
* [ ] Backup current configuration files
* [ ] Verify network connectivity from the new IP address
* [ ] Have access to Ansible playbooks that were previously applied
* [ ] Ensure root or sudo access is available

### Current State Assessment

#### Step 1: Identify Current Configuration

Check the current system IP address:

```bash
ip a
```

Expected output example:

```
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 10.3.1.175/24 scope global dynamic ens33
```

Review the Nodeum environment configuration:

```bash
cat /etc/nodeum_env
```

Note all IP addresses that need to be updated:

* `CORE_MYSQL_HOST` - MySQL/Database host IP
* `REFPARSER_MYSQL_HOST` - LTFS reference parser database host
* `SOLR_HOST` - Solr search engine host IP
* `CATALOG_INDEXER_MYSQL_HOST` - Catalog indexer database host IP

### Migration Steps

#### Step 2: Update System Network Configuration

Change the system IP address to the new IP on the network interface (e.g., using `nmtui`, `nmcli`, `netplan`, or any OS network manager software).

Verify the change:

```bash
ip a
```

#### Step 3: Update Nodeum Environment Configuration File

Update `/etc/nodeum_env` to replace all occurrences of the old IP address with the new IP address.

**Original entries (example with old IP 10.3.1.175):**

```ini
CORE_MYSQL_HOST=10.3.1.175
CORE_MYSQL_PORT=[HIDDEN]
CORE_MYSQL_USERNAME=[HIDDEN]
CORE_MYSQL_PASSWORD=[HIDDEN]
ENV_FUSE_ROOT_PERMISSION=[HIDDEN]
SCHEDULER_LISTENING=[HIDDEN]
NODEUM_RAILS=[HIDDEN]
SCHEDULER_KEY=[HIDDEN]
REFPARSER_LISTENING=[HIDDEN]
REFPARSER_MYSQL_HOST=10.3.1.175:3306
REFPARSER_MYSQL_USER=[HIDDEN]
REFPARSER_MYSQL_PASSWORD=[HIDDEN]
REFPARSER_MYSQL_DATABASE=[HIDDEN]
MOUNT_LISTENING=[HIDDEN]
MOUNT_KEY=[HIDDEN]
CATALOG_INDEXER_LISTENING=[HIDDEN]
SOLR_HOST=http://10.3.1.175:8983/solr
SOLR_COLLECTION=[HIDDEN]
CATALOG_INDEXER_MYSQL_HOST=10.3.1.175:3306
CATALOG_INDEXER_MYSQL_DATABASE=[HIDDEN]
CATALOG_INDEXER_MYSQL_USER=[HIDDEN]
CATALOG_INDEXER_MYSQL_PASSWORD=[HIDDEN]
```

**Updated entries (example with new IP 10.3.1.30):**

```ini
CORE_MYSQL_HOST=10.3.1.30
CORE_MYSQL_PORT=[HIDDEN]
CORE_MYSQL_USERNAME=[HIDDEN]
CORE_MYSQL_PASSWORD=[HIDDEN]
ENV_FUSE_ROOT_PERMISSION=[HIDDEN]
SCHEDULER_LISTENING=[HIDDEN]
NODEUM_RAILS=[HIDDEN]
SCHEDULER_KEY=[HIDDEN]
REFPARSER_LISTENING=[HIDDEN]
REFPARSER_MYSQL_HOST=10.3.1.30:3306
REFPARSER_MYSQL_USER=[HIDDEN]
REFPARSER_MYSQL_PASSWORD=[HIDDEN]
REFPARSER_MYSQL_DATABASE=[HIDDEN]
MOUNT_LISTENING=[HIDDEN]
MOUNT_KEY=[HIDDEN]
CATALOG_INDEXER_LISTENING=[HIDDEN]
SOLR_HOST=http://10.3.1.30:8983/solr
SOLR_COLLECTION=[HIDDEN]
CATALOG_INDEXER_MYSQL_HOST=10.3.1.30:3306
CATALOG_INDEXER_MYSQL_DATABASE=[HIDDEN]
CATALOG_INDEXER_MYSQL_USER=[HIDDEN]
CATALOG_INDEXER_MYSQL_PASSWORD=[HIDDEN]
```

**To update the file:**

Edit with nano or vi:

```bash
sudo vi /etc/nodeum_env
```

Or use sed to replace all occurrences (replace `10.3.1.175` with `10.3.1.30`):

```bash
sudo sed -i 's/10.3.1.175/10.3.1.30/g' /etc/nodeum_env
```

**Verify the changes:**

```bash
grep -n "10.3.1.30" /etc/nodeum_env
```

#### Step 4: Re-apply Ansible Playbook

After updating the configuration file, re-apply the Ansible playbook that was originally used to configure this server. This ensures all services are properly restarted and configured with the new IP addresses.

**Identify the playbook location and name:**

```bash
# Check ansible history or playbooks directory
ls -la /root/v-x-x/
```

**Execute the playbook:**

```bash
ansible-playbook install.yml
```

**Expected output:** The playbook should complete successfully with no errors. Services will restart during this process.

#### Step 5: Verify Services Are Running

After the playbook completes, verify all Nodeum services are running in accessing the UI / services page.&#x20;

#### Step 6: Verify Configuration Loaded

Confirm Nodeum environment is using the updated configuration:

```bash
cat /etc/nodeum_env | grep "CORE_MYSQL_HOST"
```

Should show the new IP address:

```
CORE_MYSQL_HOST=10.3.1.30
```

### Post-Migration Validation

* [ ] System IP address matches network configuration
* [ ] All services in `/etc/nodeum_env` reference the new IP
* [ ] Ansible playbook executed without errors
* [ ] Nodeum services are running and healthy
* [ ] MySQL database is accessible at new IP
* [ ] Solr search engine is accessible at new IP
* [ ] LTFS refparser is operational
* [ ] Catalog indexer is functional
* [ ] Web interface is accessible
* [ ] Verify DNS records if applicable (update hostname resolution if needed)

### Troubleshooting

#### Services Not Starting

* Verify all IPs in `/etc/nodeum_env` are correct
* Ensure network connectivity: `ping 10.3.1.30`
* Re-run the Ansible playbook

#### MySQL Connection Errors

* Verify MySQL is listening on the new IP: `netstat -tlnp | grep 3306`
* Check MySQL configuration for bind address
* Ensure firewall allows connections to port 3306

#### Scheduler/Mount/Catalog Indexer Not Running

* Check their respective listening ports are accessible
* Review `/etc/nodeum_env` for correct configuration
* Check system logs: `dmesg` or `journalctl`

### Rollback Procedure

If issues occur and you need to rollback:

1. Restore the original IP address on the network interface
2. Restore the backup of `/etc/nodeum_env` with original IPs
3. Re-run the Ansible playbook
4. Verify services restart correctly

```bash
# Restore from backup
sudo cp /etc/nodeum_env.backup /etc/nodeum_env

# Re-apply playbook
ansible-playbook /path/to/playbook.yml
```

### Key IP References in Nodeum

| Service          | Configuration Variable       | Default Port | Notes                              |
| ---------------- | ---------------------------- | ------------ | ---------------------------------- |
| MySQL (Core)     | `CORE_MYSQL_HOST`            | 3306         | Database for core Nodeum services  |
| MySQL (LTFS)     | `REFPARSER_MYSQL_HOST`       | 3306         | Database for LTFS reference parser |
| MySQL (Catalog)  | `CATALOG_INDEXER_MYSQL_HOST` | 3306         | Database for catalog indexer       |
| Solr             | `SOLR_HOST`                  | 8983         | Search and indexing engine         |
| Scheduler        | `SCHEDULER_LISTENING`        | 8081         | Job scheduling service             |
| Mount            | `MOUNT_LISTENING`            | 8082         | Mount management service           |
| Catalog Indexer  | `CATALOG_INDEXER_LISTENING`  | 8083         | Catalog indexing service           |
| Reference Parser | `REFPARSER_LISTENING`        | 8084         | LTFS reference parser service      |
| Rails Web UI     | `NODEUM_RAILS`               | 80/443       | Web interface                      |

### Notes

* All internal communication (listening addresses) should remain as `0.0.0.0` unless specified otherwise
* Only external connectivity references (MySQL hosts, Solr host) need to be updated to the new IP
* The hostname (`NODEUM_RAILS=http://nodeum-host:80`) can remain unchanged if DNS is properly configured
* Database passwords remain unchanged; only IP addresses are modified
* Services will restart during playbook execution; plan for brief downtime

### Support

For additional assistance or complex scenarios, contact Nodeum support with:

* Current configuration (`/etc/nodeum_env`)
* Service logs (journalctl output)
* Network configuration details
* Ansible playbook version information


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.nodeum.io/data-archiving/install-and-deploy/nodeum-server-ip-migration-guide.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
