JBOSS EAP üzerinde çoklu örnek(instance) kurulumu …

JBOSS EAP’ı çoklu örnek olarak çalıştırmanız gereken durumlar muhakkak olmuştur. Bu yazıda, Linux(CentOS 6) üzerinde kendi kullandığım yöntemi anlatıyor olacağım…

Çoklu kurulumda, aşağıdakileri sağlamayı amaçladım.

  1. Kolay yönetilebilir olmalı
  2. Bakımı kolay olmalı
  3. Gereksiz yer kaplamamalı… Aşağıda da göreceğiniz üzere, tüm JBOSS klasörünün değil sadece içindeki “standalone” isimli klasörün kopyasını kullanarak farklı örnekler oluşturdum.
  4. Farklı ihtiyaçlara(farklı JDK v.b) cevap verebilmeli…

Bunu sağlayabilmek için aşağıdaki yolu izledim.

/opt/java klasörü içerisine Oracle JAVA 6, JAVA 7 ve JAVA 8 JDK’larının hem 32 hem 64 bitlik versiyonlarını yükledim. Ayrıca CentOS 6 depolarından OpenJDK’nın 1.6, 1.7 ve 1.8 versiyonlarını indirdim ve /opt/java klasörü içerisine sembolik link olarak ekledim. OpenJDK ismine rağmen JDK olarak kullanılabilmek için hem düz hem de geliştirme(devel) paketine ihtiyaç duyuyor.

#yum install java-1.7.0-openjdk-devel java-1.8.0-openjdk-devel java-1.6.0-openjdk-devel java-1.7.0-openjdk java-1.8.0-openjdk java-1.6.0-openjdk

Oracle JDK’larını ise RPM olarak indirmedim, çünkü sistem ayarlarına gereksiz müdahalelerde bulunmalarını istemedim. JBOSS’un çalışması için gerekli olan JAVA_HOME değişkenini, çalıştırma betiklerinin içinde tanımladım. Böylesi, kodun farklı JAVA versiyonlarında nasıl davranacağını görmek açısından daha elverişli oldu.

Yukarıdaki işlemleri yaptıktan sonra, /opt/java klasörünün içeriği aşağıdaki gibi oldu.

[root@c6xm java]# ls -l
total 32
lrwxrwxrwx  1 root root   47 Sep 30 22:45 java-1.6.0-openjdk-1.6.0.36.x86_64 -> /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.36.x86_64
lrwxrwxrwx  1 root root   47 Sep 30 22:45 java-1.7.0-openjdk-1.7.0.85.x86_64 -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.85.x86_64
lrwxrwxrwx  1 root root   59 Sep 30 22:46 java-1.8.0-openjdk-1.8.0.51-3.b16.el6_7.x86_64 -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-3.b16.el6_7.x86_64
drwxr-xr-x  8 root root 4096 Mar 27  2013 jdk1.6.0_45.i586
drwxr-xr-x  8 root root 4096 Mar 27  2013 jdk1.6.0_45.x64
drwxr-xr-x  8 root root 4096 Apr 10 22:15 jdk1.7.0_79.i586
drwxr-xr-x  8 root root 4096 Apr 10 21:53 jdk1.7.0_79.x64
drwxr-xr-x  8 uucp  143 4096 Aug  4 21:01 jdk1.8.0_60.i586
drwxr-xr-x  8 uucp  143 4096 Aug  4 22:32 jdk1.8.0_60.x64

Daha sonra /opt/jboss klasörü içinde, JBOSS sunucusunu çalıştırmak için kullanacağım özel bir jboss kullanıcısı oluşturdum.

useradd -d /opt/jboss jboss

EAP 6.4’ü bu klasöün içine açıp, bu klasörü default isimli bir sembolik link olarak kopyaladım, bu sayede gerekirse, farklı JBOSS versiyonları ile de çalışmak daha kolay olacaktır. Bu hali ile /opt/jboss klasörünün içeriği aşağıdaki gibi oldu

[root@c6xm jboss]# ls -l
total 20
lrwxrwxrwx 1 jboss jboss 13 Sep 30 23:01 default -> jboss-eap-6.4
drwxrwxr-x 17 jboss jboss 4096 Oct 1 01:43 jboss-eap-6.4

JBOSS modeli olarak domain değil standalone modelini kullanmaya karar verdim. Bu sebeple, JBOSS örnekleri için standalone klasörünün 4 tane kopyasını oluşturdum.

[root@c6xm /]# cd /opt/jboss/default/
[root@c6xm default]# cp -r standalone standalone01
[root@c6xm default]# cp -r standalone standalone02
[root@c6xm default]# cp -r standalone standalone03
[root@c6xm default]# cp -r standalone standalone04
[root@c6xm default]# chown -R jboss.jboss /opt/jboss
[root@c6xm default]# ls -l
total 480
drwxrwxr-x 3 jboss jboss   4096 Mar 27  2015 appclient
drwxrwxr-x 4 jboss jboss   4096 Mar 27  2015 bin
drwxrwxr-x 3 jboss jboss   4096 Mar 27  2015 bundles
drwxrwxr-x 5 jboss jboss   4096 Mar 27  2015 docs
drwxrwxr-x 5 jboss jboss   4096 Mar 27  2015 domain
-rw-rw-r-- 1 jboss jboss    419 Mar 27  2015 JBossEULA.txt
-rw-rw-r-- 1 jboss jboss 363815 Mar 27  2015 jboss-modules.jar
-rw-rw-r-- 1 jboss jboss  26530 Mar 27  2015 LICENSE.txt
drwxrwxr-x 3 jboss jboss   4096 Mar 27  2015 modules
drwxrwxr-x 8 jboss jboss   4096 Oct  1 02:14 standalone
drwxrwxr-x 8 jboss jboss   4096 Oct  1 01:17 standalone01
drwxrwxr-x 8 jboss jboss   4096 Oct  1 01:19 standalone02
drwxr-xr-x 8 jboss jboss   4096 Oct  1 22:49 standalone03
drwxr-xr-x 8 jboss jboss   4096 Oct  1 22:49 standalone04
-rw-rw-r-- 1 jboss jboss     66 Mar 27  2015 version.txt
drwxrwxr-x 4 jboss jboss   4096 Mar 27  2015 welcome-content

Ve içeriği aşağıdaki gibi olan 4 tane shell betiği hazırladım.

#!/bin/bash

export JAVA_HOME="/opt/java/jdk1.7.0_79.x64"
export PATH=$PATH:$JAVA_HOME/bin

export JBOSS_HOME=/opt/jboss/default
export PATH=$PATH:$JBOSS_HOME/bin

$JBOSS_HOME/bin/standalone.sh -Djboss.server.base.dir=$JBOSS_HOME/standalone01 -Djboss.bind.address=0.0.0.0 -Djboss.socket.binding.port-offset=10000

Betiklerin birbirinden tek farkları “-Djboss.server.base.dir=$JBOSS_HOME/standalone01” yerine standalone02, standalone03 ve standalone04 klasörlerini işaret etmeleri ve “-Djboss.socket.binding.port-offset=10000” ile 10000 olarak belirtilen port ofset değeri yerine 20000, 30000 ve 40000 değerlerini kullanmaları oldu. Port ofset değerlerini unutmamak gerekiyor yoksa port çakışması nedeni ile JBOSS örnekleri ayağa kalkmayacaktır.

Betiklerde tam yol belirttiğim için betiklerin nerede bulunduğunun bir önemi olmayacaktır ama anlaşılırlık ve konfor açısından, standalone01.sh, standalone02.sh, standalone03.sh ve standalone04.sh isimlerini kullanarak /opt/jboss klasörü içinde oluşturmak gayet mantıklı olacaktır.

jboss kullanıcısı olarak “screen” uygulaması içinde çalıştırılacak bu betikler devamlı açık kalabilir ve “screen” oturumlarına düzgün mantıklı isimler vererek bu oturumlara daha sonra kolayca erişebilirsiniz de …

[jboss@c6xm ~]$ screen -S standalone01

Aşağıda OpenJDK 8 kullanılarak çalıştırılmış olan JBOSS örneğinin ekranı gözükmektedir, port ofset değeri 10000 verildiği için 18080 portundan çalışmaktadır.

[jboss@c6xm ~]$ bash /opt/jboss/standalone01.sh
=========================================================================

JBoss Bootstrap Environment

JBOSS_HOME: /opt/jboss/default

JAVA: /opt/java/java-1.8.0-openjdk-1.8.0.51-3.b16.el6_7.x86_64/bin/java

JAVA_OPTS: -server -XX:+UseCompressedOops -verbose:gc -Xloggc:"/opt/jboss/jboss-eap-6.4/standalone01/log/gc.log" -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -Xms1303m -Xmx1303m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Djboss.modules.policy-permissions=true

=========================================================================

OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
23:13:13,626 INFO [org.jboss.modules] (main) JBoss Modules version 1.3.6.Final-redhat-1
23:13:14,017 INFO [org.jboss.msc] (main) JBoss MSC version 1.1.5.Final-redhat-1
23:13:14,246 INFO [org.jboss.as] (MSC service thread 1-3) JBAS015899: JBoss EAP 6.4.0.GA (AS 7.5.0.Final-redhat-21) starting
23:13:16,584 INFO [org.xnio] (MSC service thread 1-3) XNIO Version 3.0.13.GA-redhat-1
23:13:16,599 INFO [org.xnio.nio] (MSC service thread 1-3) XNIO NIO Implementation Version 3.0.13.GA-redhat-1
23:13:16,603 INFO [org.jboss.as.server] (Controller Boot Thread) JBAS015888: Creating http management service using socket-binding (management-http)
23:13:16,647 INFO [org.jboss.remoting] (MSC service thread 1-3) JBoss Remoting version 3.3.4.Final-redhat-1
23:13:16,708 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool -- 31) JBAS010280: Activating Infinispan subsystem.
23:13:16,783 INFO [org.jboss.as.jsf] (ServerService Thread Pool -- 37) JBAS012615: Activated the following JSF Implementations: [main, 1.2]
23:13:16,829 INFO [org.jboss.as.naming] (ServerService Thread Pool -- 39) JBAS011800: Activating Naming Subsystem
23:13:16,837 INFO [org.jboss.as.security] (ServerService Thread Pool -- 44) JBAS013371: Activating Security Subsystem
23:13:16,857 INFO [org.jboss.as.connector.logging] (MSC service thread 1-4) JBAS010408: Starting JCA Subsystem (IronJacamar 1.0.31.Final-redhat-1)
23:13:16,876 INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 27) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3)
23:13:16,892 WARN [org.jboss.as.txn] (ServerService Thread Pool -- 46) JBAS010153: Node identifier property is set to the default value. Please make sure it is unique.
23:13:16,903 INFO [org.jboss.as.webservices] (ServerService Thread Pool -- 48) JBAS015537: Activating WebServices Extension
23:13:16,940 INFO [org.jboss.as.security] (MSC service thread 1-3) JBAS013370: Current PicketBox version=4.1.1.Final-redhat-1
23:13:17,030 INFO [org.jboss.as.mail.extension] (MSC service thread 1-2) JBAS015400: Bound mail session [java:jboss/mail/Default]
23:13:17,038 INFO [org.jboss.as.naming] (MSC service thread 1-1) JBAS011802: Starting Naming Service
23:13:17,869 INFO [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-3) JBWEB003001: Coyote HTTP/1.1 initializing on : http-/0.0.0.0:18080
23:13:17,915 INFO [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-3) JBWEB003000: Coyote HTTP/1.1 starting on: http-/0.0.0.0:18080
23:13:18,033 INFO [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on 127.0.0.1:19999
23:13:18,091 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-2) JBAS015012: Started FileSystemDeploymentService for directory /opt/jboss/default/standalone01/deployments
23:13:18,092 INFO [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on 0.0.0.0:14447
23:13:18,150 INFO [org.jboss.ws.common.management] (MSC service thread 1-4) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.3.4.Final-redhat-1
23:13:18,270 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-3) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]
23:13:18,349 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:19990/management
23:13:18,350 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:19990
23:13:18,350 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.4.0.GA (AS 7.5.0.Final-redhat-21) started in 5489ms - Started 154 of 192 services (58 services are lazy, passive or on-demand)

jboss kullanıcı ile toplamda 4 farklı screen oturumu kullanarak ve de tabii ki farklı port ofset değerleri vererek 4 örneği ya da RAM durumunuz yeterli ise çok daha fazla örneği aynı anda çalıştırabilirsiniz. Hatta JBOSS klasörünün içinde bulunan bin/init.d klasöründeki jboss-as.conf ve jboss-as-standalone.sh dosyalarını uygun bir şekilde düzenleyerek, aynı anda birçok JBOSS örneğini servis olarak da çalıştırabilirsiniz…

Bir Cevap Yazın