r7 - 08 Feb 2010 - 10:11:42 - BeckyHYou are here: Wiki >  AppLogic27 Web > CatSwitchesURLSWCid
ALERT! AppLogic 2.7/2.8 Documentation The latest production release is AppLogic 3.0.30

URLSW - Url Port Switch - Implementation

Base Class

The LUX5 appliance image is used as the base class for URLSW appliance.

Class Volumes

URLSW itself is not sensitive to the volume configuration and will work on most any setup. Besides the nginx binary, it does not require any additional software to be able to start. Samba client is required for logging. The setup chosen for the 1.0 release is as follows: - boot volume, 110MB size, mounted as "/", writeable, instantiable. - usr volume, 160MB size, mounted as "/usr", read-only, common The boot volume contains a basic Linux installation as the one present on the LUX5 appliance.

In summary, URLSW's boot volume contains:

  • CentOS 5, as base OS image (as installed on the LUX5 appliance)
  • nginx version 0.7.62-1.el5
  • Samba client, for accessing files through the log terminal
  • sshd, used for logging into the component through the default interface (a part of CentOS? )
  • thttpd webserver, to serve control API requests

Packages for URLSW

Installed packages:

  • audit-libs-1.3.1-1.el5.i386.rpm (LGPL)
  • basesystem-8.0-5.1.1.el5.centos.noarch.rpm (public domain)
  • bash-3.1-16.1.i386.rpm (GPL)
  • beecrypt-4.1.2-10.1.1.i386.rpm (LGPL)
  • bzip2-1.0.3-3.i386.rpm (BSD)
  • bzip2-libs-1.0.3-3.i386.rpm (BSD)
  • centos-release-5-0.0.el5.centos.2.i386.rpm (GPL)
  • centos-release-notes-5.0.0-2.i386.rpm (GPL)
  • chkconfig-1.3.30.1-1.i386.rpm (GPL)
  • coreutils-5.97-12.1.el5.i386.rpm (GPL)
  • cpio-2.6-20.i386.rpm (GPL)
  • cracklib-2.8.9-3.1.i386.rpm (Artistic)
  • cracklib-dicts-2.8.9-3.1.i386.rpm (Artistic)
  • crontabs-1.10-8.noarch.rpm (Public Domain)
  • cyrus-sasl-lib-2.1.22-4.i386.rpm (Freely Distributable)
  • db4-4.3.29-9.fc6.i386.rpm (GPL)
  • device-mapper-1.02.13-1.el5.i386.rpm (GPL)
  • dhclient-3.0.5-7.el5.i386.rpm (distributable)
  • diffutils-2.8.1-15.2.2.i386.rpm (GPL)
  • e2fsprogs-1.39-8.el5.i386.rpm (GPL)
  • e2fsprogs-libs-1.39-8.el5.i386.rpm (GPL)
  • ed-0.2-38.2.2.i386.rpm (GPL)
  • elfutils-libelf-0.125-3.el5.i386.rpm (GPL)
  • ethtool-5-1.el5.i386.rpm (GPL)
  • expat-1.95.8-8.2.1.i386.rpm (BSD)
  • file-4.17-8.2.i386.rpm (distributable)
  • filesystem-2.4.0-1.el5.centos.i386.rpm (Public Domain)
  • findutils-4.2.27-4.1.i386.rpm (GPL)
  • gawk-3.1.5-14.el5.i386.rpm (GPL)
  • gdbm-1.8.0-26.2.1.i386.rpm (GPL)
  • glib2-2.12.3-2.fc6.i386.rpm (LGPL)
  • glibc-2.5-12.2.i386.rpm (LGPL)
  • glibc-common-2.5-12.2.i386.rpm (LGPL)
  • gpg-pubkey-e8562897-459f07a4.(none).rpm (pubkey)
  • grep-2.5.1-54.2.el5.i386.rpm (GPL)
  • gzip-1.3.5-9.el5.centos.i386.rpm (GPL)
  • info-4.8-14.el5.i386.rpm (GPL)
  • initscripts-8.45.14.EL-1.el5.centos.1.i386.rpm (GPL)
  • iproute-2.6.18-4.el5.i386.rpm (GNU GPL)
  • iputils-20020927-43.el5.i386.rpm (BSD)
  • krb5-libs-1.5-23.i386.rpm (MIT, freely distributable.)
  • less-394-5.el5.i386.rpm (GPL)
  • libacl-2.2.39-1.1.i386.rpm (LGPL)
  • libattr-2.4.32-1.1.i386.rpm (LGPL)
  • libcap-1.10-26.i386.rpm (BSD-like and LGPL)
  • libevent-1.1a-3.2.1.i386.rpm (BSD)
  • libgcc-4.1.1-52.el5.2.i386.rpm (GPL)
  • libgssapi-0.10-2.i386.rpm (GPL)
  • libhugetlbfs-1.0.1-1.el5.i386.rpm (LGPL)
  • libhugetlbfs-lib-1.0.1-1.el5.i386.rpm (LGPL)
  • libselinux-1.33.4-2.el5.i386.rpm (Public domain (uncopyrighted))
  • libselinux-python-1.33.4-2.el5.i386.rpm (Public domain (uncopyrighted))
  • libsemanage-1.9.1-3.el5.i386.rpm (GPL)
  • libsepol-1.15.2-1.el5.i386.rpm (GPL)
  • libstdc++-4.1.1-52.el5.i386.rpm (GPL)
  • libsysfs-2.0.0-6.i386.rpm (LGPL)
  • libtermcap-2.0.8-46.1.i386.rpm (LGPL)
  • libuser-0.54.7-2.el5.1.i386.rpm (LGPL)
  • libvolume_id-095-14.5.el5.i386.rpm (GPL)
  • logrotate-3.7.4-8.i386.rpm (GPL)
  • m2crypto-0.16-6.el5.1.i386.rpm (BSDish)
  • MAKEDEV-3.23-1.2.i386.rpm (GPL)
  • mcstrans-0.1.10-1.el5.i386.rpm (GPL)
  • mingetty-1.07-5.2.2.i386.rpm (GPL)
  • mktemp-1.5-23.2.2.i386.rpm (BSD)
  • module-init-tools-3.3-0.pre3.1.16.el5.i386.rpm (GPL)
  • ncurses-5.5-24.20060715.i386.rpm (distributable)
  • net-tools-1.60-73.i386.rpm (GPL)
  • newt-0.52.2-9.i386.rpm (LGPL)
  • nfs-utils-1.0.9-24.el5.i386.rpm (GPL)
  • nfs-utils-lib-1.0.8-7.2.z2.i386.rpm (GPL)
  • nginx-stable-0.7.62-1.el5.i386.rpm (BSD)
  • openldap-2.3.27-5.i386.rpm (OpenLDAP? )
  • openssh-4.3p2-16.el5.i386.rpm (BSD)
  • openssh-clients-4.3p2-16.el5.i386.rpm (BSD)
  • openssh-server-4.3p2-16.el5.i386.rpm (BSD)
  • openssl-0.9.8b-8.3.el5.i686.rpm (BSDish)
  • pam-0.99.6.2-3.14.el5.i386.rpm (GPL or BSD)
  • passwd-0.73-1.i386.rpm (BSD)
  • patch-2.5.4-29.2.2.i386.rpm (GPL)
  • pcre-6.6-1.1.i386.rpm (BSD)
  • perl-5.8.8-10.i386.rpm (Artistic or GPL)
  • popt-1.10.2-37.el5.i386.rpm (GPL)
  • portmap-4.0-65.2.2.1.i386.rpm (BSD)
  • procps-3.2.7-8.1.el5.i386.rpm (GPL)
  • psmisc-22.2-5.i386.rpm (BSD/GPL)
  • python-2.4.3-19.el5.i386.rpm (PSF - see LICENSE)
  • python-elementtree-1.2.6-5.i386.rpm (PSF)
  • python-sqlite-1.1.7-1.2.1.i386.rpm (GPL)
  • python-urlgrabber-3.1.0-2.noarch.rpm (LGPL)
  • readline-5.1-1.1.i386.rpm (GPL)
  • rpm-4.4.2-37.el5.i386.rpm (GPL)
  • rpm-libs-4.4.2-37.el5.i386.rpm (GPL)
  • rpm-python-4.4.2-37.el5.i386.rpm (GPL)
  • samba-client-3.0.28-0.el5.8.i386.rpm (GNU GPL Version 2)
  • samba-common-3.0.28-0.el5.8.i386.rpm (GNU GPL Version 2)
  • sed-4.1.5-5.fc6.i386.rpm (GPL)
  • setup-2.5.58-1.el5.noarch.rpm (public domain)
  • shadow-utils-4.0.17-12.el5.i386.rpm (BSD)
  • slang-2.0.6-4.el5.i386.rpm (GPL)
  • sqlite-3.3.6-2.i386.rpm (Public Domain)
  • sysfsutils-2.0.0-6.i386.rpm (GPL)
  • sysklogd-1.4.1-39.2.i386.rpm (GPL)
  • SysVinit? -2.86-14.i386.rpm (GPL)
  • tar-1.15.1-23.el5.i386.rpm (GPL)
  • tcpdump-3.9.4-11.el5.i386.rpm (BSD)
  • tcp_wrappers-7.6-40.2.1.i386.rpm (Distributable)
  • termcap-5.5-1.20060701.1.noarch.rpm (Public Domain)
  • tmpwatch-2.9.7-1.1.el5.1.i386.rpm (GPL)
  • tzdata-2006m-2.fc6.noarch.rpm (GPL)
  • udev-095-14.5.el5.i386.rpm (GPL)
  • usermode-1.88-3.el5.i386.rpm (GPL)
  • util-linux-2.13-0.44.el5.i386.rpm (distributable)
  • vim-minimal-7.0.109-3.i386.rpm (freeware)
  • vixie-cron-4.1-66.1.el5.i386.rpm (distributable)
  • wget-1.10.2-7.el5.i386.rpm (GPL)
  • which-2.16-7.i386.rpm (GPL)
  • xen-ukrnl-3.2.2-17.i386.rpm (GPL)
  • xen-umods-3.2.2-17.i386.rpm (GPL)
  • yum-3.0.5-1.el5.centos.2.noarch.rpm (GPL)
  • zlib-1.2.3-3.i386.rpm (BSD)

Contents of the release directory for URLSW:

Exported appliance image:

  • URLSW-1.0.3-1.tar

Automated build script: use this to automatically build URLSW appliance

  • URLSW-build.1.0.3-1.tar.bz2

Automated test suite: use this to test URLSW appliance

  • urlsw-test-1.0.3-1.tar.bz2

Source RPMs:

  • nginx-stable-0.7.62-1.el5.src.rpm - nginx source rpm
  • samba-3.0.28-0.el5.8.src.rpm - Samba source rpm
  • thttpd-2.25b.tar.gz - thttpd source

Theory of Operation

URLSW is a switch which distributes HTTP requests to different outputs based on matching the request URI or request headers against regexp’s parameterized on the appliance boundary. If incoming traffic does not match any regexp, it is forwarded through the aux terminal without modification. The responses for requests received on the outX and aux terminals is forwarded back through the in terminal.

Configuration

General

nginx is configured by using a file called nginx.conf . This file is created dynamically at start of appliance according to URLSW properties supplied by AppLogic by invoking parse_property_values.pl and make_nginx_conf.pl. If configuration modifies by using ctl interface, api scripts also invokes make_nginx_conf.pl to applying new configuration.

Log Files

Access Log

The user of URLSW can configure the appliance to use access log. URLSW will log all clients requests in common format with one additional field with information which server serve the request.

Appliance Implementation Details

The URLSW appliance contains the following files in the /appliance folder on its boot volume. These files are used to implement the appliance:

File Type Description
appliance.sh Bash script Appliance main controlling script - invoked when the appliance is booted.
check_disk_space.sh Bash script Script that checks for free space available on data volume and reports to dashboard
timezone.sh Bash script Script that sets appliance timezone
make_nginx_conf.pl Perl script Script that makes nginx configuration and restarts nginx if configuration file successfully passed verification
parse_property_values.pl Perl script Script that parses property values of the appliance and writes parsed regular expressions to auxiliary config files
healthchecker.pl Perl script Script that checks ability of backend servers to process the requests. If some backend server or servers fails, they will be automatically excluded fromnginx configuration.

Important Notes

-- AndriyMayevskyy - 15 Jan 2009

 
Copyright © CA 2005-2011. All Rights Reserved.
%