The Perfect Small Business Server(+Failover)

From ArchWiki
Revision as of 00:01, 15 August 2011 by GaryMaurizi (Talk | contribs)

Jump to: navigation, search

In this guide, we will be building ourselves a 'redundant/Highly Available' Home/Small Business server(Cluster). We will be using two physical nodes(computers)running the same exact services in an 'active/passive'(master/slave/Failover) HeartBeat "cluster". We will refer to these two computers as "node1" & "node2". As I am writing this guide the latest Arch Linux install image is Arch_2010_05(I am using the 32bit/i686 image) though I imagine we are soon due for a new image. Again, this article was written on: 08/14/2011, August 14th, 2011. I will personally speak for the accuracy of this article, I developed this guide step-by-step on my own personal servers and I have since re-built both machines following this guide to the letter, they are 100% functional, fairly secure, and my "Highly Available" services have not had a single moment of downtime since being initially powered on.

  • I am personally working on the following translations of this guide: Italian, French, German, Spanish. Anyone with the linguistic skills to help/provide other translations PLEASE feel free do so.

Thank You,
--GaryMaurizi 20:01, 14 August 2011 (EDT)


On each node we will be installing & setting up the following services/daemons:

  • DNS: Bind in a Chroot, with ProBIND PHP Web GUI To edit DNS Zones.
  • Web: Apache, With SSL.
  • PHP: PHP5.
  • Database: MySQL(i), With PHPMyAdmin Web GUI To create/edit/delete Databases & Users.
  • IMAP/POP3/(S): Dovecot for Incoming Mail/accounts (w/ Secure IMAP/POP3(?S).
  • SMTP/(S): Postfix for Outgoing Mail (+Dovecot-SSL w/ PostfixAdmin Web GUI).
  • RoundCubeMail: Simple, Sleek WebMail/Web GUI with sieve/spam filters & identities.
  • Horde: OpenSource GroupWare & Mail Web GUI Similiar to M$ Exchange in Features/Functionality.
  • Firewall: IPTables with the UFW: Uncomplicated Firewall FrontEnd, (optionally: with UFW'S GTK GUI: GUFW).

Following are the IP Adresses, Hostnames, & Domain Name we'll use to refer to our machines, change these to suit your own needs, for this guide we will have TWO "virtual/shared Highly Available/Failover IP Addresses & Hostnames/Domains, we do this because some DNS registrars require a MINIMUM of TWO unique NameServers, if yours does NOT, you may use a single HA Address as such: '>', for this guide our addresses will be:

  • node1.example.dom ==> (Hostname / IP of our 1st Machine)
  • node2.example.dom ==> (Hostname / IP of our 2nd Machine)
  • ha1.example.dom ====> (Hostname / IP of our 1st "Virtual/H.A" Address)
  • ha2.example.dom ====> (Hostname / IP of our 2nd "Virtual/H.A" Address)

Arch Linux Installation:

Here is a quick overview of instructions for a very basic arch linux installation that will work with this guide, if you already have arch linux setup, chances are you only need to change your hostname in /etc/rc.conf & edit: /etc/hosts, here we go:

Boot from CD & begin the Arch Linux Installation (AIF):

# Template:Codeline

Perform A regular Installation, with the following options (NOT IN ORDER):

  • TIMEZONE: Your Local Time (Regular/Hardware Clock, NOT NTP)
  • NET INSTALL: We will use DHCP initially, and input our static info after reboot (optionally, set up static now).
  • MIRROR: Choose the fastest IN-SYNC mirror, see:
  • PACKAGES: Select BOTH Base & Base-Devel Package/Groups (MANDATORY)
  • PARTITIONING: Use GUIDED/Entire Disk Partitioning, Make Swap 1/2 the of amount of RAM. Use Defaults for /boot, /home, /
  • CONFIGURATION: After Package install, DON'T configure anything, just set ROOT PASSWORD
  • BOOTLOADER: USE/SET UP GRUB boot loader(Usually you will install on SDA)

REBOOT: the machine, and REMOVE the installation disc.

# Template:Codeline

Network Configuration

We will now go over basic Networking setup so we can bring both our nodes online, get them up-to-date, and connect to them from another location via SSH, if your machine is already up & running with networking, please feel free to skip this section, just make sure you have the proper definitions in /etc/hosts & the proper hostname in /etc/rc.conf, now, here we go:

EDIT: /etc/rc.conf so that it reflects the proper hostnames, your hostnames should be: node1 for your first machine, node2 for the second:

# Template:Codeline


EDIT: /etc/hosts so that it reflects the proper hostnames, domain names & IP addresses for our cluster:

# Template:Codeline


REBOOT: To set the proper HostNames / DomainNames & bring up networking:

# Template:Codeline

Pacman Configuration

We will now Upgrade our pacman package manager database, check that we are using the proper repositories & insure that our system is up-to-date, we will only be using the stable repo's for our two nodes, please do not enable any of the testing repositories and complain that something is not working! you've been warned! ;P here we go:

INPUT: the following commands to upgrade our pacman-database:

# Template:Codeline

EDIT: the /etc/pacman.conf file to make sure that we are using the proper repositories:

# Template:Codeline


Note: if you are on a 64bit/x86_64 system/architecture, you may wish to ADD: the multilib repository for 64bit packages LIKE THIS:


INPUT: the following command to download our enabled repositories & insure that our system is fully up-to-date:

# Template:Codeline

REBOOT: Once more, just for good measure(probably not neccesary):

# Template:Codeline

You should now have a very basic Arch Linux installation up & running on both of your machines/nodes, if you have any trouble installing Arch Linux, or need further assistance, see the OFFICIAL Arch Linux INSTALLATION Guide here:

Install & Configure SSH:

We will now install SSH/OpenSSH so that we may connect to our nodes from a 3rd machine & manage the rest of our installation/configuration from one(single) keyboard/mouse/monitor, you may continue to work in your current environment if you like however, but you should still install & configure ssh:

INPUT: the following command to install SSH/OpenSSH:

# Template:Codeline

EDIT: the file: /etc/ssh/sshd_config and make sure it reflects the following: Template:File

INPUT: the following command to test & make sure ssh/sshd is working:

# Template:Codeline
Note: if you have any problems configuring SSH/SSHD/sshd_config file see:

EDIT: the file: /etc/rc.conf and add sshd to the END of your daemons array so that our SSH Server starts at boot-time: Template:File

You should now have your SSH server/daemon up and running, continue on to the next step!

Install & Configure Apache:

We will now install & configure Apache with PHP, we will