Sunday, September 15, 2013

WebLogic Whole Server Migration

Oracle WebLogic Server memiliki fitur yang bernama whole server migration. Migration di sini mengacu kepada proses memindahkan WebLogic instance yang tergabung dalam sebuah WebLogic cluster dari mesin yang satu ke mesin lainnya. Tujuan dari fitur ini adalah untuk menjamin deployment yang memiliki transaksi JMS dan JTA, seperti pada keluarga Oracle SOA Suite, dapat dilanjutkan ketika salah satu node mengalami kegagalan.

Node Manager dibutuhkan untuk dapat menjalankan fitur ini, di mana tugasnya adalah:
  1. Inisialisasi konfigurasi server migration. Proses migrasi akan gagal jika WebLogic instance dijalankan tanpa melalui Node Manager.
  2. Mengontrol siklus hidup WebLogic instance (start, stop, suspend, dsb.)
  3. Mengaktifkan dan menonaktifkan virtual IP (VIP) address dari WebLogic instance pada mesin yang menjadi tanggung jawabnya.
  4. Mount dan unmount shared disk untuk managed server domain (MSERVER_HOME).
Pada kesempatan kali ini, saya akan membuat simulasi sederhana tentang fitur migrasi ini. Pada simulasi ini saya telah mengkonfigurasi sebuah domain yang berisi sebuah cluster BAM_Cluster dengan 2 buah instance WLS_BAM1 dan WLS_BAM2. Hanya ada 2 VIP pada konfigurasi ini, yaitu milik AdminServer dan WLS_BAM1, karena engine dari BAM bersifat singleton service. Sehingga hanya WLS_BAM1 saja yang dapat berpindah dari mesin BAMHOST1 ke mesin BAMHOST2. Node Manager sudah terkonfigurasi pada masing-masing mesin.

Langkah-langkahnya adalah sebagai berikut:

1. Membuat Tabel ACTIVE pada Database


Status dari WLS_BAM1 dan WLS_BAM2 tersimpan pada sebuah tabel database secara periodik akan di-update. Ketika sebuah instance tidak meng-update tabel tersebut, diasumsikan instance tersebut mengalami kegagalan dan jika instance tersebut termasuk ke dalam migratable server maka instance tersebut akan dipindahkan ke mesin yang lain. Jalankan SQL script pada $WL_HOME/server/db/oracle/920/leasing.ddl untuk membuat tabel ACTIVE.

2. Membuat Data Source untuk Tabel ACTIVE (Opsional) 


Langkah ini opsional jika tabel ACTIVE berada pada koneksi data source yang telah ada sebelumnya di WebLogic. Jika diletakkan pada skema database yang belum terdaftar, daftarkan terlebih dahulu ke data source yang baru.

3. Konfigurasi Hak Akses oracle dan Environment Variable


Seperti yang telah disebutkan sebelumnya, Node Manager berperan dalam mengaktifkan dan menonaktifkan VIP pada sebuah mesin. Agar dapat melakukan hal tersebut, Node Manager membutuhkan akses sudo tanpa password untuk menjalankan perintah /sbin/ifconfig dan /sbin/arping. Tambahkan 2 baris berikut pada file /etc/sudoers dengan menggunakan perintah visudo.
Defaults:oracle !requiretty
oracle ALL=NOPASSWD: /sbin/ifconfig,/sbin/arping
Update variabel PATH, sebaiknya diletakkan di file ~/.bashrc:
PATH=$MSERVER_HOME/bin/server_migration:$PATH
PATH=$WL_HOME/common/bin:$PATH
PATH=$WL_HOME/common/nodemanager:$PATH
export PATH

4. Menambahkan Konfigurasi Node Manager


Tambahkan 3 baris berikut pada file konfigurasi nodemanager.properties:
Interface=bond1
NetMask=255.255.255.0
UseMACBroadcast=true
Interface yang dimaksud di atas adalah network interface yang digunakan untuk VIP dari WLS_BAM1. Jika VIP yang digunakan adalah eth0:1, maka masukkan eth0 pada konfigurasi. Restart Node Manager di kedua mesin setelah melakukan update tersebut.

5. Konfigurasi Server Migration


Whole server migration dapat dilakukan pada sebuah cluster, sehingga untuk mengaktifkannya buka konfigurasi BAM_Cluster kemudian pilih Configuration -> Migration. Pada bagian "Candidate Machines for Migratable Servers", pilih BAMHOST1 dan BAMHOST2. Pilih Database pada bagian Migration Basis dan arahkan Data Source for Automatic Migration ke data source yang telah ada atau telah dibuat pada langkah ke-2. Save.
Navigasi ke informasi instance WLS_BAM1, kemudian pilih Configuration -> Migration. Check Automatic Server Migration Enabled, kemudian pilih hanya BAMHOST2 pada Candidate Machines, karena kita hanya akan mengaktifkan WLS_BAM1 untuk dimigrasikan ke BAMHOST2. Pilih Save, Activate Changes. 

6. Validasi dan Simulasi


Start WLS_BAM1 dan WLS_BAM2 melalui WebLogic Administration Console, kemudian amati output dari nodemanager.log dari kedua mesin. Simulasikan shutdown pada WLS_BAM1 dengan cara meng-kill proses tersebut dengan perintah kill -9 <PID>. Lakukan perintah kill sebanyak 2 kali untuk memicu proses server migration. Berikut adalah potongan log pada BAMHOST1:
<Sep 11, 2013 9:21:10 AM> <INFO> <Successfully removed 10.11.12.13 from bond1:1.><Sep 11, 2013 9:21:10 AM> <INFO> <Successfully removed 10.0.56.66 from bond1:1.>
<Sep 11, 2013 9:21:10 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Server failed so attempting to restart (restart count = 1)>
<Sep 11, 2013 9:21:10 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Sleeping for 30 seconds before attempting to restart server>
<Sep 11, 2013 9:21:40 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Starting WebLogic server with command line: /u02/app/oracle/admin/BAM_Domain/mserver/BAM_Domain/bin/startWebLogic.sh >
<Sep 11, 2013 9:21:40 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Working directory is '/u02/app/oracle/admin/BAM_Domain/mserver/BAM_Domain'>
<Sep 11, 2013 9:21:40 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Rotated server output log to "/u02/app/oracle/admin/BAM_Domain/mserver/BAM_Domain/servers/WLS_BAM1/logs/WLS_BAM1.out00015">
<Sep 11, 2013 9:21:40 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Server error log also redirected to server log>
<Sep 11, 2013 9:21:40 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Server output log file is '/u02/app/oracle/admin/BAM_Domain/mserver/BAM_Domain/servers/WLS_BAM1/logs/WLS_BAM1.out'>
<Sep 11, 2013 9:21:44 AM> <INFO> <Successfully brought 10.11.12.13 with netmask 255.255.255.0 online on bond1:1>
<Sep 11, 2013 9:21:56 AM> <INFO> <Successfully removed 10.11.12.13 from bond1:1.>
<Sep 11, 2013 9:21:56 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Server failed during startup so will not be restarted>
Sedangkan pada BAMHOST2 log-nya adalah seperti ini:
<Sep 11, 2013 9:22:15 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Boot identity properties saved to "/u02/app/oracle/admin/BAM_Domain/mserver/BAM_Domain/servers/WLS_BAM1/data/nodemanager/boot.properties">
<Sep 11, 2013 9:22:15 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Startup configuration properties saved to "/u02/app/oracle/admin/BAM_Domain/mserver/BAM_Domain/servers/WLS_BAM1/data/nodemanager/startup.properties">
<Sep 11, 2013 9:22:15 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Rotated server output log to "/u02/app/oracle/admin/BAM_Domain/mserver/BAM_Domain/servers/WLS_BAM1/logs/WLS_BAM1.out00002">
<Sep 11, 2013 9:22:15 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Server error log also redirected to server log>
<Sep 11, 2013 9:22:15 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Starting WebLogic server with command line: /u02/app/oracle/admin/BAM_Domain/mserver/BAM_Domain/bin/startWebLogic.sh >
<Sep 11, 2013 9:22:15 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Working directory is '/u02/app/oracle/admin/BAM_Domain/mserver/BAM_Domain'>
<Sep 11, 2013 9:22:15 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Rotated server output log to "/u02/app/oracle/admin/BAM_Domain/mserver/BAM_Domain/servers/WLS_BAM1/logs/WLS_BAM1.out00003">
<Sep 11, 2013 9:22:15 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Server error log also redirected to server log>
<Sep 11, 2013 9:22:15 AM> <INFO> <BAM_Domain> <WLS_BAM1> <Server output log file is '/u02/app/oracle/admin/BAM_Domain/mserver/BAM_Domain/servers/WLS_BAM1/logs/WLS_BAM1.out'>
<Sep 11, 2013 9:22:19 AM> <INFO> <Successfully brought 10.11.12.13 with netmask 255.255.255.0 online on bond1:1>

Pada log tersebut terlihat Node Manager pada BAMHOST1 mencoba untuk me-restart instance WLS_BAM1 setelah 30 detik. Setelah proses di-kill untuk yang kedua kalinya, Node Manager tidak melakukan restart kembali. Node Manager pada BAMHOST2 menerima pesan bahwa WLS_BAM1 dalam kondisi yang gagal pada BAMHOST1 kemudian mencoba untuk mengaktifkan VIP WLS_BAM1 pada BAMHOST2 dan men-startup WLS_BAM1. Pada posisi akhir, instance WLS_BAM1 telah aktif pada BAMHOST2.

Selamat mencoba. :)

No comments:

Post a Comment