System Considerations for RHN Satellite

This is part one of an ongoing series called, "The RHN Satellite Survival Guide."

tl;dr:  DB and RPM storage are the big system design concerns, not memory or OS install. Average channel size is up to 15K packages at 250KB per, meaning 3.5GB of DB table space per channel.  Actual RPM storage is about 30GB per channel.  Make sure you can grow each partition easily.

First up, the physical considerations.  The software is supported in either a VM or on bare metal, so the OS deployment options aren't really a big deal.  Memory can be an issue, but only with a lot of concurrently active clients, so if possible set it to the max of 8GB.

Storage is where we need to spend the most time in consideration.  There are only two directories we need to worry about in sizing, where the embedded DB lives and where the rpms land.  These are:

/rhnsat
/var/satellite

For DB sizing, there is a recommended minimum of 12GB, however, the DB can grow beyond that even in a typical environment.The main consumer of DB table space is the rpm listing for a channel.  A channel is comprised of 3 elements:

  • A software variant -- Server, Client, Workstation, etc.
  • A major version-- RHEL 5,6, etc.
  • An architecture -- x86, POWER, etc.

Pseudo-formula for sizing then becomes:

num. of channels x avg. package count x 250KB = est. DB table size

So, for Red Hat Enterprise Linux 5 Server (2 of the 3 elements) there are 5 supported architectures: x86 (32 bit), x86_64 (64 bit), Itanium, POWER and System z.  Each one is a separate channel.  The official docs talk about being able to use less than 12GB, but so far as I've seen those sizing assumptions are low.

Now, the official docs estimate that there are about 5000 packages in a channel, but with RHEL 5 coming up on it's fifth birthday, my Satellite server shows 14928 packages in RHEL 5 Server x86_64.  RHEL 6 x86_64 isn't quite two and already has edged over the 10K mark.  With each package in a channel taking ~250KB of table space, a single RHEL 5 channel needs 3.5GB.  Just the x86_64 architecture, RHEL 5 and 6 with Server and Workstation spins, eats 11GB without any trouble.  I'd say that 15000 packages is probably a better guideline for the average package count so let's update that formula to:

num. of channels x 3.5GB = est. DB table size

With the DB table space formula set, the second storage location is better specified in the official docs.  The newest guidance for RPM storage is 30GB per channel minimum.  Looking at the setup above, those same four channels want 120GB.  Actual usage for RPM storage is pretty close to the guidelines.

In either case, use storage that you can easily expand.  For the RPM storage, using a NAS like a NetApp Filer means you can seamlessly grow it as needed.  I also use the same landing spot for backups of the database and important configs, but we'll talk about backups in a different post.  As RPMs will be served to clients over HTTPS, high speed storage isn't a high priority since we've got a bottleneck downstream.

For the DB storage, you probably don't want to try to use NFS.  SELinux is a bit fussy about letting the embedded Oracle instance use NFS without proper massaging.  I'm working on an iSCSI LUN without problems, but an internal RAID that you can expand is another good option.  Either way, LVM is your friend.  I've got the NetApp Filer backing the iSCSI volume, so I can expand the LUN and rescan the bus (Read: service iscsi restart) to see the larger device.  I also migrated to iSCSI from a local disk, so that's a possibility should you wind up short initially.


If you're looking for an overview of RHN Satellite and system life-cycle management, I did a quick webinar with Kevin Chin from Red Hat a little while ago: Day-to-Day Red Hat Enterprise Linux Management Made Easy.  Take a look.