Installationsmanual Mule


Installera Mule och påför generella runtimeberoenden

  1. Följ rekommenderad instruktion för att installera Mule på https://code.google.com/p/soi-toolkit/wiki/IG_RT_MuleESB.

  2. Ladda ner ActiveMQ-jar (ActiveMQ 5.9.1) från från följande länk och tillför den på:
    1. Mule-3.3.1: <MULE_HOME>/lib/shared/default/

      Mule-3.3.1: notera att det är viktigt att ActiveMQ-jar ligger under <MULE_HOME>/lib/shared/default/ för att inte orsaka problem med att applikationsloggar hamnar i fel logfiler (andra applikationers logfiler).

    2. Mule-3.7.0: <MULE_HOME>/lib/user/
      Not: shared-dir som används för Mule-3.3.1 är deprecated för Mule-3.7.0 
  3. Mule-3.7.0: Två patchar måste tillföras Mule 3.7.0, se "Anvisningar för rättningar av Mule" längre ned på denna sida.

Val av activeMQ-bibliotek

Det är bättre att följa Mulesofts rekommendationer och undvika activemq-all-x.x.x.jar och istället lägga in endast de jar-filer som behövs. Se https://docs.mulesoft.com/mule-user-guide/v/3.7/activemq-integration. Speciellt för EI rekommenderas detta starkt.


Minnesparametrar

Se över minnesinställningar för heapsize på Mule installationen

I NTjP, den nationella instansen av SKLTP används följande inställningar vad gäller heapsize för Mule på en server med 8GB arbetsminne.

<MULE_HOME>/conf/wrapper.conf

# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3
wrapper.java.initmemory=1536

# Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory=512
wrapper.java.maxmemory=1536

Se över minnesinställningar för MaxPermSize på Mule installationen

Java 8

Avsnittet nedan gäller endast Java 7, För Java 8 har denna parameter avvecklats. Vid uppstart av Mule fås ett varningsmeddelande (som kan ignoreras)

JavaHotSpot(TM)64-BitServer VM warning: ignoring option MaxPermSize=512m; support was removed in 8.0


Enligt http://www.mulesoft.org/jira/browse/MULE-6544 så sätts MaxPermSize till 256m. Om det finns behov av att uppdatera denna parameter, tex för att klara av fler applikationer i samma Mule instans, så behövs följande konfiguration uppdateras i filen <MULE_HOME>/bin/additional.groovy:

// increase max PermGen space size
// IBM JVM doesn't have a notion of the PermGen space
if (!System.properties."java.vm.vendor".toUpperCase().contains("IBM")) {
     w << "wrapper.java.additional.${paramIndex++}=-XX:MaxPermSize=512m\n"
}


verifiera ändringen genom att gå in i Mule Management Console och titta på värdet Perm Gen enligt bilden nedan.

Konfigurera loggning

log4j.properties

Default konfigureras loggning i Mule  i <MULE_HOME>/conf/log4j.properties. Varje applikation som driftsätts i Mule rekommenderas bära sin egen konfigurationsfil för loggning, som styr vart applikationen skall logga och hur det skall loggas.

Nedan en rekommenderad konfiguration av loggning i Mule:

# Default log level
log4j.rootCategory=INFO, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %d [%t] %c: %m%n


################################################
# You can set custom log levels per-package here
################################################


# Reduce noise for Mule High Availability 
log4j.logger.com.gigaspaces=ERROR
log4j.logger.com.j_spaces=ERROR
log4j.logger.com.sun.jini=ERROR
log4j.logger.net.jini=ERROR


# CXF is used heavily by Mule for web services
log4j.logger.org.apache.cxf=WARN

# Apache Commons tend to make a lot of noise which can clutter the log.
log4j.logger.org.apache=WARN
# Reduce startup noise
log4j.logger.org.springframework.beans.factory=WARN

# Mule classes
log4j.logger.org.mule=INFO
log4j.logger.com.mulesoft=INFO

wrapper.conf

I <mule_home>/wrapper.conf kan man konfigurera loggning, tex storlek på mule.log (mule_ee.log).

wrapper.conf
 #********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Format of output for the console.  (See docs for formats)
wrapper.console.format=M
# Log Level for console output.  (See docs for log levels)
wrapper.console.loglevel=INFO

# Log file to use for wrapper output logging.
wrapper.logfile=%MULE_BASE%/logs/%MULE_APP%.log

# Format of output for the log file.  (See docs for formats)
wrapper.logfile.format=M

# Log Level for log file output.  (See docs for log levels)
wrapper.logfile.loglevel=INFO

# Maximum size that the log file will be allowed to grow to before
#  the log is rolled. Size is specified in bytes.  The default value
#  of 0, disables log rolling.  May abbreviate with the 'k' (kb) or
#  'm' (mb) suffix.  For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=10m

# Maximum number of rolled log files which will be allowed before old
#  files are deleted.  The default value of 0 implies no limit.
wrapper.logfile.maxfiles=10

# Log Level for sys/event log output.  (See docs for log levels)
wrapper.syslog.loglevel=NONE


Stoppa och starta Mule

Hantera start och stop av Mule

soi-toolkits hemsida finns det instruktioner för hur Mule start/stop hanteras på ett rekommenderat sätt.

Säkerställ att applikationer startas i en viss ordning

Det går att kontrollera vilken ordning applikationer skall startas i Mule, tex att Virtualiseringsplattformen skall startas före Engagemangsindex. Detta beskrivs här http://www.mulesoft.org/documentation/display/current/Application+Deployment. Notera att för att kunna använda en viss given startordning måste alla applikationer som skall startas upp anges i listan, det finns i nuläget ingen möjlighet att ange tex en applikation och * för att starta resten av applikationerna efter den första.

Ett exempel på hur detta ser ut i fallet VP startas före EI:

<MULE_HOME>/bin ./mule start -app vp-services-2.2.0-RC2:skltp-ei-application-mule-backend-app-1.0.0-RC6:skltp-ei-application-mule-frontend-app-1.0.0-RC6


Nedan är ett exempel från NTjP, där startordningen på applikationer definierats i ett script med filnamn start.sh.

Notera att det måste vara :'  i slutet av alla APPLICATIONS rader, utom den sista

#!/bin/bash

AMQ_HOME=/home/mule/tp/apache-activemq-5.6.0
MULE_HOME=/home/mule/tp/mule-enterprise-standalone-3.3.1

#Applikationer som skall startas upp och i angiven ordning
APPLICATIONS='vp-services-2.2.0:'
APPLICATIONS+='skltp-ei-application-mule-frontend-app-1.0.0:'
APPLICATIONS+='skltp-ei-application-mule-backend-app-1.0.0'

echo -n "Starting ActiveMQ 5.6.0..."
cd ${AMQ_HOME}/bin
./activemq start &>/dev/null

if [ $? == 0 ]; then
echo "OK!"
fi

echo -n "Starting Mule ESB 3.3.1 and applications in given order...${APPLICATIONS}..."
cd ${MULE_HOME}/bin

# Start without teststubs
#./mule start -app ${APPLICATIONS} 2>&1 >/dev/null
./mule start -app ${APPLICATIONS} >/dev/null

if [ $? == 0 ]; then
echo "OK!"
fi

exit 0

Tillåta uppkoppling till Mule med JMX

För att kunna koppla upp sig mot Mule med JMX krävs följande konfiguration av port och läsenord i <MULE_HOME>/conf/wrapper.conf. Läs mer om parametrar på http://www.mulesoft.org/documentation/display/current/JMX+Management.

wrapper.java.additional.4=-Dcom.sun.management.jmxremote.port=<port nr>
wrapper.java.additional.5=-Dcom.sun.management.jmxremote.password.file=%MULE_HOME%/conf/jmx.password
wrapper.java.additional.6=-Dcom.sun.management.jmxremote.ssl=false


Skapa filen %MULE_HOME%/conf/jmx.password enligt nedan och sätt lösenord på de 2 rollerna monitorRole och controlRole.

##############################################################
#    File permissions of the jmxremote.password file
##############################################################
#      Since there are cleartext passwords stored in this file,
#      this file must be readable by ONLY the owner,
#      otherwise the program will exit with an error.
#
# The file format for password and access files is syntactically the same
# as the Properties file format.  The syntax is described in the Javadoc
# for java.util.Properties.load.
# Typical password file has multiple  lines, where each line is blank,
# a comment (like this one), or a password entry.
#
#
# A password entry consists of a role name and an associated
# password.  The role name is any string that does not itself contain
# spaces or tabs.  The password is again any string that does not
# contain spaces or tabs.  Note that passwords appear in the clear in
# this file, so it is a good idea not to use valuable passwords.
#
# A given role should have at most one entry in this file.  If a role
# has no entry, it has no access.
# If multiple entries are found for the same role name, then the last one
# is used.
#
# In a typical installation, this file can be read by anybody on the
# local machine, and possibly by people on other machines.
# For # security, you should either restrict the access to this file,
# or specify another, less accessible file in the management config file
# as described above.
#
monitorRole <some password>
controlRole <some password>


Filen jmx.password skall endast ha rättigheter att kunna läsas av användaren, inga andra rättigheter, för att Mule skall starta. Detta kan man på linux åstadkomma med följande.

$chmod 400 jmx.password

Firewall tunnling av JMX

Lägg till nedan i ACTIVEMQ_HOME/bin/<operativsystem>/wrapper.conf (under de avkommenterade raderna ovan) och ändra "n" i "wrapper.java.additional.n" så att "n" för varje rad nedan är ett nummer i den befintliga sekvensen i filen.

# Firewall tunnelling of JMX
#-----------------------------------------------------------------------------
# Note: by default (Java 7) two ports are needed, the com.sun.management.jmxremote.port
#   and a second port which is dynamically allocated by the server.
#   To avoid dynamic allocation of the second port, add property
#   com.sun.management.jmxremote.rmi.port below and set it to the same port as
#   the first port for convenience (fewer holes in the firewall).
#   This is available in Java 7 > update 4 according to blog:
#     "Tunneling JMX in the 7u4 JDK", http://hirt.se/blog/?p=289
#   but the property is missing from the official Java docs for both Java 7 and 8:
#     http://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html
#-----------------------------------------------------------------------------
wrapper.java.additional.n=-Dcom.sun.management.jmxremote.rmi.port=<PORT NUMBER>


Anvisningar för rättningar av Mule

För skltp finns ett antal obligatoriska patchar för Mule. För aktuella patchar och installationsanvisningar, se Release Note - Patchar för Mule.

För Mule 3.7.0 se också Release notes SKLTP 3.0.0.