Dell NativeEdge: Manual Witness Node Installation
Summary: This document provides step-by-step instructions for installing Ubuntu 24.04 LTS Server from ISO media and configuring it as a Dell NativeEdge Witness Node. The installation uses minimal packages to optimize performance and security. The usual and recommended method for installing a Dell NativeEdge Witness Node is to use the free blueprint provided in the NativeEdge blueprint catalog. This manual installation guide is intended for users who, for specific reasons, must create a witness node manually instead of using the automated blueprint deployment. ...
Instructions
Purpose
The Witness Node serves as a critical component in the NativeEdge distributed architecture, requiring specific network, security, and time synchronization configurations. After cluster creation, the cluster primary nodes handle the witness node's Lifecycle Management (LCM). The steps described in this document are only required to create a ready-to-be-used Witness node for NativeEdge 2-Nodes Clusters.
Prerequisites and requirements
Hardware requirements
- Processor: 64-bit x86 processor with minimum two cores
- Memory: 4-GB RAM minimum
- Storage: 20-GB available disk space minimum
- Network: Active network interface card
Software requirements
- Ubuntu 24.04 LTS Server ISO image
- Network configuration details (IP address, netmask, gateway, DNS servers)
- Customer-defined password for witness-user account (minimum eight characters and must contain letters and numbers)
Access requirements
- Physical or remote console access to the target system
Install Ubuntu 24.04 LTS Server.
- Boot from Ubuntu 24.04 LTS ISO
-
- Insert the Ubuntu 24.04 LTS Server ISO media or mount it to your virtual machine
- Boot the system from the ISO media
- At the boot menu, select "Install Ubuntu Server"
- Select language and keyboard
-
- Select your preferred language (default: English)
- Select your keyboard layout (default: English (US))
- Press Enter to continue
- Configure the network
-
- When prompted for network configuration, select "Edit IPv4" on your primary network interface
- Choose "Manual" configuration method
- Enter the following network details:
- Subnet: Enter your subnet in CIDR notation (for example, 192.168.1.0/24)
- Address: Enter the static IP address for this witness node
- Gateway: Enter the gateway IP address
- Name servers: Enter DNS server addresses (comma-separated)
- Select "Save" to apply the configuration
- Configure storage
- Select "Use an entire disk" for storage configuration
- Choose the target disk for installation
- Review the storage layout and select "Done"
- Confirm the destructive action by selecting "Continue"
- Profile Setup
-
- Enter the following information:
- Your name: Witness Administrator
- Your server's name: witness-node (or as per your naming convention)
- Pick a username: Installer (temporary account)
- Choose a password: Enter a secure temporary password
- Confirm your password: Reenter the password
- Enter the following information:
- Configure SSH
-
- When prompted for SSH setup, select "Install OpenSSH server"
- Press Space to enable the checkbox
- Do not import SSH identity at this stage
- Select "Done" to continue
- Featured Server Snaps
-
- Do not select any additional snaps to maintain a minimal installation
- Select "Done" to finish the installation
- Complete installation
-
- The installation process begins. This may take 10-15 minutes.
- Once complete, select "Reboot Now"
- Remove the installation media when prompted
- The system reboots into the newly installed Ubuntu 24.04 LTS Server
Post-Installation Configuration
Log in to the system using the temporary installer account created during installation. Perform the following configuration steps in order:
- Update system packages
sudo apt update
sudo apt upgrade -y
- Configure a static network (If not done during installation)
If network configuration was not completed during installation, configure it now:
-
- Identify your network interface:
ip link show
-
- Edit the
netplanconfiguration file:
- Edit the
sudo nano /etc/netplan/00-installer-config.yaml
-
- Configure the static IP address (replace values with your network details):
network:
version: 2
ethernets:
ens160: # Replace with your interface name
dhcp4: no
addresses:
- 192.168.1.100/24 # Replace with your IP/netmask
gateway4: 192.168.1.1 # Replace with your gateway
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
-
- Apply the network configuration:
sudo netplan apply
-
- Verify the network configuration:
ip addr show ip route show ping -c 4 <gateway-ip>
- Install the required packages
-
- Install all necessary packages for the witness node:
sudo apt-get install -y chrony ceph-mon ceph-common wipe iproute2 net-tools iputils-ping iptables ebtables tcpdump traceroute conntrack
-
- Verify the installation:
dpkg -l | grep -E 'chrony|ceph-mon|ceph-common'
- Configure
chronytime synchronization
-
- Configure
chronywith your Network Time Protocol servers:
- Configure
sudo nano /etc/chrony/chrony.conf
-
- Add or modify the Network Time Protocol server entries (replace with your organization's Network Time Protocol servers). At least one Network Time Protocol server (with a line starting with server) is mandatory or the witness is rejected at cluster creation:
# Dell Network Time Protocol Servers
server ntp1.dell.com iburst
server ntp2.dell.com iburst
# Fallback public Network Time Protocol servers
pool 2.ubuntu.pool.ntp.org iburst maxsources 4
# Allow local time to be used if Network Time Protocol servers are unreachable
local stratum 10
# Record the rate at which the system clock gains or loses time
driftfile /var/lib/chrony/drift
# Enable kernel synchronization of the real-time clock
rtcsync
# Step the system clock instead of slew if adjustment is larger than 1 second
makestep 1 3
-
- Restart and enable
chrony:
- Restart and enable
sudo systemctl restart chrony
sudo systemctl enable chrony
-
- Verify
chronysynchronization:
- Verify
sudo chronyc tracking
sudo chronyc sources
- Create witness user account
witness-user account with a customer-defined password.
Important: This account is temporary, and NativeEdge physical nodes only use it once during cluster creation initiation. After the cluster is successfully created, the NativeEdge system automatically deletes this account.
-
- Create the
witness-useraccount:
- Create the
sudo adduser --disabled-password --gecos "Witness Service Account" witness-user
-
- Set a custom password for the
witness-useraccount:
- Set a custom password for the
Note: You must provide this password during the NativeEdge cluster creation process. Store it securely until cluster initialization is complete.
-
-
- Minimum length: Eight characters
- Must contain both letters (a-z, A-Z) and numbers (0-9)
- Example: Witness2024, Node1234, Edge5678
-
sudo passwd witness-user
-
- Add the user to the
sudogroup and configurepasswordlesssudoaccess:
- Add the user to the
sudo usermod -aG sudo witness-user
-
- Configure
passwordlesssudoforwitness-user:
- Configure
witness-user to perform all root commands without password prompts, which are required for NativeEdge cluster initialization.
echo "witness-user ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/witness-user
sudo chmod 440 /etc/sudoers.d/witness-user
-
- Generate SSH key pair for
witness-user:
- Generate SSH key pair for
sudo -u witness-user ssh-keygen -t rsa -b 4096 -f /home/witness-user/.ssh/id_rsa -N "" -C "witness-user@$(hostname)"
-
- Verify SSH key generation:
sudo ls -la /home/witness-user/.ssh/
Expected output:
-
-
- id_rsa (private key)
- id_rsa.pub (public key)
- authorized_keys (for incoming connections)
-
- Prepare iptables
-
- Add the below content in the
/etc/iptables.ruleswith owner beingroot:rootand permissions at 0644:
- Add the below content in the
*filter
:INPUT DROP [120:8633]
:FORWARD DROP [0:0]
:OUTPUT DROP [2533:382155]
-N LOGGING_INPUT
-N LOGGING_OUTPUT
-N LOGGING_FORWARD
-N CUSTOM_FILTER_INPUT_CHAIN
-N CUSTOM_FILTER_OUTPUT_CHAIN
-N CUSTOM_FILTER_FORWARD_CHAIN
-A INPUT -i lo -j ACCEPT
-A INPUT -s 127.0.0.0/8 -j DROP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m multiport --dports 67,68,123,53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m conntrack --ctstate INVALID -j DROP
-A OUTPUT -p udp -m multiport --dports 67,68,123,53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -j CUSTOM_FILTER_INPUT_CHAIN
-A INPUT -j LOGGING_INPUT
-A OUTPUT -j CUSTOM_FILTER_OUTPUT_CHAIN
-A OUTPUT -j LOGGING_OUTPUT
-A FORWARD -j CUSTOM_FILTER_FORWARD_CHAIN
-A FORWARD -j LOGGING_FORWARD
-A LOGGING_INPUT -m limit --limit 10/min -j LOG --log-prefix "IPTables-INPUT-Dropped: " --log-level 4
-A LOGGING_OUTPUT -m limit --limit 10/min -j LOG --log-prefix "IPTables-OUTPUT-Dropped: " --log-level 4
-A LOGGING_FORWARD -m limit --limit 10/min -j LOG --log-prefix "IPTables-FORWARD-Dropped: " --log-level 4
-A LOGGING_INPUT -j DROP
-A LOGGING_OUTPUT -j DROP
-A LOGGING_FORWARD -j DROP
COMMIT
-
- Add the below content in the file
/etc/systemd/system/iptables-restore.service:
- Add the below content in the file
[Unit]
Description=Restore iptables rules
Before=network-pre.target
Wants=network-pre.target
[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables.rules
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
-
- Ensure the file
/etc/systemd/system/iptables-restore.serviceownership isroot:rootand file permission being 0644 - Run the below command once all the values are set, to make them persistent across reboots.
systemctl start iptables-restore systemctl enable iptables-restore
- Ensure the file
- Disable Ubuntu disruptive packages and automated updates
-
- Run:
apt-get remove -y unattended-upgrades update-notifier-common apport snapd packagekit fwupd ubuntu-pro-client ubuntu-pro-client-l10n
systemctl disable --now apt-daily-upgrade.timer apt-daily.timer dpkg-db-backup.timer fwupd-refresh.timer motd-news.timer
systemctl disable --now ModemManager.service packagekit.service
-
- Reboot is recommended to ensure that all services are in place and running
Verification
Perform the following verification steps to ensure proper configuration:
- Network Verification
- Verify IP address configuration
ip addr show
-
- Verify gateway configuration
ip route show
-
- Test network connectivity
ping -c 4 <gateway-ip>
ping -c 4 8.8.8.8
Expected Result: IP address, netmask, and gateway are correctly configured; ping tests succeed.
chronyVerification- Check
chronyservice status
- Check
sudo systemctl status chrony
-
- Verify time synchronization
sudo chronyc tracking
-
- Check NTP sources
sudo chronyc sources -v
Expected Result: chrony service is active and running; system time is synchronized with NTP servers.
- User Account Verification
- Verify
witness-userexists
- Verify
id witness-user
-
- Verify user home directory and SSH keys
ls -la /home/witness-user/
-
- Verify
passwordlesssudoconfiguration
- Verify
sudo cat /etc/sudoers.d/witness-user
-
- Test user login (from another terminal)
su - witness-user
-
- Test
passwordlesssudo(aswitness-user)
- Test
sudo whoami
Expected Result: User witness-user exists with proper home directory, SSH keys, and can perform sudo commands without password prompts.
- SSH Server Verification
- Verify SSH service status
sudo systemctl status sshd
-
- Verify that SSH is listening on port 22
sudo ss -tlnp | grep :22
-
- Test SSH connection from remote host
ssh witness-user@<witness-node-ip>
Expected Result: SSH service is active and listening; remote SSH connection succeeds.
Additional Information
Optional: Install packages offline.
If the witness server does not have Internet access, download the required packages on an Internet-connected Ubuntu system and transfer them to the witness server:
- Download packages on an Internet-connected system:
apt-get download chrony ceph-mon ceph-common wipe iproute2 net-tools iputils-ping iptables ebtables tcpdump traceroute conntrack
- Download dependencies:
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances chrony ceph-mon ceph-common wipe iproute2 net-tools iputils-ping iptables ebtables tcpdump traceroute conntrack | grep "^\w")
- Create a package archive:
tar -czf witness-packages.tar.gz *.deb
- Transfer to witness server (using USB, SCP, or other method)
- Install packages on witness server:
sudo dpkg -i *.deb
Install all Packages:
tar -xzf witness-packages.tar.gz
Fix any missing dependencies (if needed):
sudo apt-get install -f
Troubleshooting
Network Issues
Problem: Unable to reach a gateway or external network.
Solution:
- Verify that the network interface is up:
ip link show
sudo ip link set <interface> up
- Check
netplanconfiguration:
sudo netplan --debug apply
- Verify the routing table:
sudo netplan --debug apply
SSH Connection Issues
Problem: Unable to connect using SSH.
Solution:
- Verify that the SSH service is running:
sudo systemctl status sshd
sudo systemctl restart sshd
- Check firewall rules:
sudo ufw status
sudo ufw allow ssh
- Verify SSH configuration:
sudo sshd -t
chrony Synchronization Issues
Problem: Time is not synchronizing.
Solution:
- Check
chronystatus:
sudo systemctl status chrony
sudo chronyc tracking
- Verify NTP server connectivity:
sudo chronyc sources -v
- Force time synchronization:
sudo chronyc makestep
User Authentication Issues
Problem: Cannot log in as witness-user.
Solution:
- Verify that a user account exists:
id witness-user
- Reset the password if needed:
sudo passwd witness-user
- Check SSH
authorized_keyspermissions:
sudo ls -la /home/witness-user/.ssh/