Создание виртуального кластера на базе Oracle VM VirtualBox и Red Hat Enterprise Linux 6.4 Server

Шаг 1 - Создание виртуальных машин

Создадим виртуальную машину с именем rhel-server-6.4-x86_64-host1. Объем оперативной памяти выделим в 1024 МБ. Объем виртуального жесткого диска выделим в 8 ГБ. Тип жесткого диска подойдет по умолчанию - VDI (VirtualBox Disk Image). Формат хранения также подойдет по умолчанию - динамический.


Аналогично создадим еще две виртуальные машины rhel-server-6.4-x86_64-host2 и rhel-server-6.4-x86_64-host3.

Шаг 2 - Установка ОС

Установим ОС на созданные виртуальные машины. Для этого воспользуемся образом rhel-server-6.4-x86_64-dvd.iso. Пароль подойдет простой например, redhat. Т.к. установка проходит на чистый виртуальный диск, то выберем установку с использованием всего диска (Use entire drive).


Шаг 3 - Настройка сети

Настроим сеть на Виртуальный адаптер хоста, и включим все доступные 4 адаптера. Это надо проделать с каждой виртуальной машиной.


Для внутренних сетей принято использовать следующие диапазоны IP-адресов:
  • 10.0.0.0 - 10.255.255.255
  • 172.16.0.0 - 172.31.255.255
  • 192.168.0.0 - 192.168.255.255
Первый блок адресов представляет одну сеть класса А, второй блок - 16 последовательных сетей класса В, а третий блок - 256 последовательных сетей класса С. 
Этих IP-адресов никогда нет в сети Интернет. Это так называемые "серые адреса", используемые только в локальных сетях с NAT.

Настройки для host-машины:
IP-адрес: 192.168.30.10, маска подсети: 255.255.255.0

Настройки для гостевых машин (host1, host2, host3):
  1. IP-адрес: 192.168.30.11, маска подсети: 255.255.255.0
  2. IP-адрес: 192.168.30.12, маска подсети: 255.255.255.0
  3. IP-адрес: 192.168.30.13, маска подсети: 255.255.255.0
На данном этапе назначим пока IP-адрес только сетевому интерфейсу eth0. Это делается следующим образом.

vi /etc/sysconfig/network-scripts/ifcfg-eth0
i
DEVICE=eth0
HWADDR=08:00:27:24:4E:3C
TYPE=Ethernet
UUID=279a71f8-44f2-4b3a-a71a-e521cf5ae0a4
ONBOOT="yes"
NM_CONTROLLED="no"
BOOTPROTO="none"
HOSTNAME="host1"
IPV6INIT="no"
MTU="1500"
IPADDR="192.168.30.11"
NETMASK="255.255.255.0"
ESC
:wq

service network restart
ping 192.168.30.10

Сразу включим доступ по SSH, потому что так удобнее управлять виртуальной машиной.
service sshd restart
chkconfig sshd on

Установим соответствующее имя хоста 
vi /etc/sysconfig/network
i
HOSTNAME=host1
ESC
:wq

hostname host1
hostname

Аналогичное надо сделать для виртуальных машин host2 и host3. А после надо будет прописать в /etc/hosts всю эту информацию (разумеется на каждой виртуальной машине).
vi /etc/hosts
i
192.168.30.11   host1
192.168.30.12   host2
192.168.30.13   host3

ESC
:wq

Шаг 4 - Настройка NTP

Создадим NTP Master Server, например, это будет host1. Выполняем на нем следующие команды:
yum install ntp
yum install nano
nano /etc/ntp.conf
# Use the local clock
server 127.127.1.0 prefer
fudge  127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
broadcastdelay 0.008

# Give localhost full access rights
restrict 127.0.0.1

# Give machines on our network access to query us
restrict 192.168.30.0 mask 255.255.255.0 nomodify notrap

service ntpd restart
chkconfig ntpd on

iptables -I INPUT -p udp --dport 123 -j ACCEPT
service iptables save
service iptables restart

На host2 и host3 выполним следующие команды:
yum install ntp
nano /etc/ntp.conf
# Point to our network's master time server
server 192.168.30.11

restrict default ignore
restrict 127.0.0.1
restrict 192.168.30.11 mask 255.255.255.255 nomodify notrap noquery

driftfile /var/lib/ntp/drift

service ntpd stop
ntpdate -u 192.168.30.11
service ntpd start
chkconfig ntpd on

Шаг 5 - Подключение RHEL репозитория с установочного диска

mkdir /mnt/cdrom
mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom
vi /etc/yum.repos.d/rhel_repo.repo
i
[rhel_repo]
name=RHEL_6.4_x86_64_Disc
baseurl="file:///mnt/cdrom/"
enabled=1
gpgcheck=0

ESC
:wq
yum clean all
yum update
yum repolist

Шаг 6 - Установка Apache Tomcat

yum search java | grep 'java-'
yum install java-1.7.0-openjdk.x86_64

yum install scp
scp -P 22 ~/apache-tomcat-7.0.34.tar.gz root@host2:~/
scp -P 22 ~/apache-tomcat-7.0.34.tar.gz root@host3:~/

tar -xvzf ~/apache-tomcat-7.0.34.tar.gz -C /opt/
ln -s /opt/apache-tomcat-7.0.34/ /opt/tomcat

yum install nano 
nano /etc/init.d/tomcat
#!/bin/sh
#
# tomcat Starts Tomcat.
#
#
# chkconfig: 345 88 12
# description: Apache Tomcat Server.
### BEGIN INIT INFO
# Provides: $tomcat
### END INIT INFO
ulimit -Hn 16384
ulimit -Sn 16384

CATALINA_HOME=/opt/tomcat; export CATALINA_HOME

start() {
 echo -n "Starting Tomcat: "
 $CATALINA_HOME/bin/startup.sh
 sleep 2
}
stop() {
 echo -n "Stopping Tomcat: "
 $CATALINA_HOME/bin/shutdown.sh
}

# See how we were called.
case "$1" in
 start)
 start
 ;;
 stop)
 stop
 ;;
 restart)
 stop
 start
 ;;
 *)
 echo $"Usage: tomcat {start|stop|restart}"
 exit
 esac

Ctrl + O
Enter
Ctrl + X
chmod +x /etc/init.d/tomcat
service tomcat start
chkconfig tomcat on

nano /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
Ctrl + O
Enter
Ctrl + X
service iptables restart


Шаг 7 - Установка ActiveMQ

Скопируем на каждый узел кластера следующие файлы:
  • ~/apache-activemq-5.8.0-bin.tar.gz

Для распространения файлов по сети с host1 на host2, host3 можно использовать следующие команды:
scp -P 22 ~/apache-activemq-5.8.0-bin.tar.gz root@host2:~/
scp -P 22 ~/apache-activemq-5.8.0-bin.tar.gz root@host3:~/

Установка (на каждом хосте):
tar -xvzf ~/apache-activemq-5.8.0-bin.tar.gz -C /opt/
ln -s /opt/apache-activemq-5.8.0 /opt/activemq
nano /opt/activemq/conf/activemq.xml
...
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" useJmx="true">
...
<managementContext createConnector="true" connectorPort="11099"/>
...
<kahaDB directory="${activemq.data}/kahadb" enableJournalDiskSyncs="true"/>
...
<memoryUsage limit="512 mb"/>
...

nano /etc/init.d/activemq
 #!/bin/bash
 #
 # activemq Starts ActiveMQ.
 #
 #
 # chkconfig: 345 88 12
 # description: ActiveMQ is a JMS Messaging Queue Server.
 ### BEGIN INIT INFO
 # Provides: $activemq
 ### END INIT INFO


 # Set activemq related environment
 ACTIVEMQ_HOME=/opt/activemq

# Invoke ActiveMQ
 $ACTIVEMQ_HOME/bin/activemq $1


chmod +x /etc/init.d/activemq
chkconfig activemq on

service activemq start

nano /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8161 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 61616 -j ACCEPT

service iptables restart

Шаг 8 - Установка Mule ESB

Скопируем на каждый узел кластера следующие файлы:
  • ~/mule-ee-distribution-standalone-3.3.1.tar.gz
  • ~/mmc-agent-mule3-app-3.3.1.zip
  • ~/mmc-console-3.3.1
  • ~/mule-ee-distribution-standalone-3.4.1.tar.gz
  • ~/mmc-console-3.4.1.war
  • ~/mule-ee-license.lic

Для распространения файлов по сети с host1 на host2, host3 можно использовать следующие команды:
scp -P 22 ~/mule-ee-distribution-standalone-3.3.1.tar.gz root@host2:~/
scp -P 22 ~/mmc-agent-mule3-app-3.3.1.zip root@host2:~/
scp -P 22 ~/mmc-console-3.3.1.war root@host2:~/
scp -P 22 ~/mule-ee-distribution-standalone-3.4.1.tar.gz root@host2:~/
scp -P 22 ~/mmc-console-3.4.1.war root@host2:~/
scp -P 22 ~/mule-ee-license.lic root@host2:~/

scp -P 22 ~/mule-ee-distribution-standalone-3.3.1.tar.gz root@host3:~/
scp -P 22 ~/mmc-agent-mule3-app-3.3.1.zip root@host3:~/
scp -P 22 ~/mmc-console-3.3.1.war root@host3:~/
scp -P 22 ~/mule-ee-distribution-standalone-3.4.1.tar.gz root@host3:~/
scp -P 22 ~/mmc-console-3.4.1.war root@host3:~/
scp -P 22 ~/mule-ee-license.lic root@host3:~/

Установка (на каждом хосте):
tar -xvzf ~/mule-ee-distribution-standalone-3.3.1.tar.gz -C /opt/
tar -xvzf ~/mule-ee-distribution-standalone-3.4.1.tar.gz -C /opt/
Переключаться между версиями можно следующим образом:
unlink /opt/mule
ln -s /opt/mule-enterprise-standalone-3.3.1 /opt/mule

unlink /opt/mule
ln -s /opt/mule-enterprise-standalone-3.4.1 /opt/mule

Автозагрузка (на каждом хосте):
nano /etc/init.d/mule
 #!/bin/bash
 #
 # mule Starts Mule ESB.
 #
 #
 # chkconfig: 345 88 12
 # description: Mule ESB.
 ### BEGIN INIT INFO
 # Provides: $mule
 ### END INIT INFO

# Set Mule related environment
 MULE_HOME=/opt/mule

# Invoke Mule
 $MULE_HOME/bin/mule $1


chmod +x /etc/init.d/mule
chkconfig mule on

Настройка файрвола (на каждом хосте):
nano /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8585 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7777 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 1099 -j ACCEPT
service iptables restart

Настройка wrapper.conf (на каждом хосте, вместо host1 надо подставлять имя хоста):

nano /opt/mule-enterprise-standalone-3.3.1/conf/wrapper.conf
После строки:
wrapper.java.additional.3=-Djava.net.preferIPv4Stack=TRUE
надо добавить строки:
wrapper.java.additional.4=-Dcom.sun.management.jmxremote
wrapper.java.additional.5=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.6=-Dcom.sun.management.jmxremote.ssl=false
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1099
wrapper.java.additional.8=-Djava.rmi.server.hostname=host1
wrapper.java.additional.9=-Dmule.verbose.exceptions=true
wrapper.java.additional.10=-Dspring.profiles.active=default,pilot


Установка лицензии (на каждом хосте):
/opt/mule/bin/mule -installLicense ~/mule-ee-license.lic

Запуск (на каждом хосте):
service mule start

Устанавливаем агента (на каждом хосте):
cp ~/mmc-agent-mule3-app-3.3.1.zip /opt/mule-enterprise-standalone-3.3.1/apps/

Устанавливаем консоль (только на host1):
cp ~/mmc-console-3.3.1.war /opt/tomcat/webapps/
или
cp ~/mmc-console-3.4.1.war /opt/tomcat/webapps/
username: admin
password: admin
Две консоли сразу нельзя поставить потому что они будут конфликтовать используя общую папку /mmc-data

Ход установки консоли можно проследить:
tail -f /opt/tomcat/logs/catalina.out

Очистка после удаления кластера:
rm -f /opt/mule-enterprise-standalone-3.3.1/.mule/mule-cluster.properties
rm -f /opt/mule-enterprise-standalone-3.3.1/.mule/mmc-agent-mule3-app-3.3.1/truststore.jks

Шаг 8 - Установка VoltDB

tar -xvzf ~/LINUX-voltdb-ent-3.5.0.1.tar.gz -C /opt/
ln -s /opt/voltdb-ent-3.5.0.1/ /opt/voltdb

yum install screen

Создание отдельного "экрана" для запуска в нем Enterprise Manager:
screen -S enterprise_manager 
/opt/voltdb/management/enterprise_manager.sh 
nano ~/.voltdb/license.xml
Ctrl + a
d

Подключение к уже имеющемуся "экрану":
screen -ls 
если detached то screen -r enterprise_manager 
иначе screen -x enterprise_manager 
Ctrl + A
d

nano /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21212 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21211 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3021 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 4567 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9090 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2181 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5555 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5556 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5557 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9091 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1099 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 44444 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9000 -j ACCEPT
service iptables restart

http://192.168.30.11:9000/
admin:voltdb

Настроим SSH без пароля.