How do you setup a environment that support the continuous deliver of enterprise Java applications? How do you manage the large number of machines that are involved? How do you enable self-service, continuous delivery of applications onto the platform? In this blog post we will give a description of an open source Java Application Platform as a Service that we created for our customer, using VMware, Redhat Enterprise Linux, Apache WebServer, JBoss Enterprise Application Platform, JBoss Operations Network, Puppet, Deployit, F5 Load Balancer and a Layer7 SecureSpan gateway.
Data Center Quality PlatformThe customer wanted a data center quality Java Application Platform with the following features:
- Standard configuration
- Standardized provisioning
- Standardized deployment
- Centralized monitoring
- Centralized access control
- Virtual environment
- Proving technology
Current situationAs the current Java application platform was based on HP-UX on Itanium, the customer was facing high cost for hardware, software licenses and fading support from software vendors. As all applications ran on a HP Superdome, it was very difficult to add resources to individual applications. In addition, development teams spend too much time taking their software through the development, test and acceptance environments, resulting in slow delivery of software into production. Finally, it was difficult to provide 24x7 availability because all applications are running on a single machine.
Java Application PlatformThe following figure illustrate the solution architecture of the java application platform. In the following paragraphs we will describe the purpose of the most important components.
Dual Data Center – HPNot shown in the figure, is the hardware setup of the platform. It consists of HP blades setup in two data centers on two different locations. This provides the basic infrastructure for 24x7 availability and fault tolerance.
VMware ESXVMware ESX is deployed on top of the hardware in the dual data center. This provides us with the ability to create virtual machines and provide high availability in case of single server of single site failures. It also allows us the quickly scale up virtual machines and increase the resources assigned to individual virtual machines. For all machines in the platform we use a single VMware template image. This image is installed with RedHat Enterprise Linux and a puppet client.
PuppetPuppet fully automates system management. It is used for the installation of software packages, conformity tests and day to day system administration tasks. For every type of node, we have a puppet plan. When the machines boots, the puppet agent provisions the machine with all the necessary software and configuration according to the plan for that machine. The use of Puppet completely automates and standardizes the configuration, ensures 100% reproducibility of the configuration and is fast. Provisioning of a new machine from the template to full operational mode is done in a matter of minutes.
JBoss EAPJBoss Enterprise Application Platform is the Enterprise Java applications server for all java applications. The installation and configuration is done by Puppet and uses the official RedHat RPMs. Puppet configures JBoss to ensure that :
- JBoss management applications authenticate users against Active Directory, providing a single point of authorization for operations.
- A JBoss Oracle database schema is automatically provisioned for that specific instance of JBoss, providing persistence for the JBoss server system state.
- All Business Applications can authenticate users using SAML against the Layer7 Identity provider, providing a single point of authentication and authorization for their customers.
- The JBoss instance is added to the pool in the F5 Load balancer
- The application server is added to the Deployit infrastructure inventory, providing the tenants of the platform with the ability to deploy applications to the server.
JBoss Operations NetworkJBoss Operations Network (JON) is used for monitoring all the resources in the platform. By default, Puppet installs a JON agent on every machine. This agent scans the inventory of the machine and reports it to the JON server. JON has a very good support for high availability and fail over. By simply adding a JON server machine, agents will automatically distribute themselves across the servers and failover if necessary. Each JON server also runs a JON agent, making sure that unavailability of a JON server is also covered. In JON we created a number of alert templates for different resource types (os, apache, jboss, jon, puppet, etc.) that will monitor and report critical conditions on the system. All error messages from the JBoss servers logs are reported as incidents. All alerts and clearing conditions from JBoss Operations network are reported via SNMP to TNG Unicenter. Through the use of JBoss Operations Network all machines, servers and resources in the platform are automatically added to the centralize monitoring system.
DeployitDeployit is used for the automated deployment of applications onto the platform. It automatically deploys all the application components in a stack to the appropriate containers. Deployit :
- deploys static content and proxy configuration to the apache webservers,
- deploys enterprise java application components to all individual JBoss servers in the farm,
- executes SQL scripts to the database,
- configures the F5 loadbalancers to add or remove servers or applications to the pool,
- applies environment specific changes to the application configuration.