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:
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.