IPMP adalah singkatan dari IP Multi Path. Penjelasan sederhananya, IPMP menggabungkan beberapa network interface untuk mendapatkan redundansi IP. Misalnya kita punya server yang memiliki port e1000g0
& e1000g1
; e1000g0
berada di system board sementara e1000g1
adalah port tambahan yang berada di PCI card. Kita bisa menggunakan 2 port tersebut untuk membuat sebuah virtual IP. Virtual IP inilah yang akan dikenal oleh dunia luar, dengan kata lain user yang ingin mengakses server ini cukup tahu virtual IP-nya.
Untuk memudahkan penamaan kita bisa mengubah nama data link masing-masing interface tersebut. Saya pernah tulis tentang fitur Solaris 11 yang bisa mengganti memisahkan interface fisik & data link di tulisan sebelumnya.
root@solaris11:~# dladm rename-link net0 onboard0
root@solaris11:~# dladm rename-link net1 pci0
Pada tulisan ini saya akan berbagi bagaimana caranya membuat IPMP interface dengan menggunakan interface onboard0
& pci0
tadi.
root@solaris11:~# dladm show-phys
LINK MEDIA STATE SPEED DUPLEX DEVICE
pci0 Ethernet unknown 0 unknown e1000g1
net2 Ethernet unknown 0 unknown e1000g2
onboard0 Ethernet unknown 0 unknown e1000g0
net3 Ethernet up 1000 full e1000g3
root@solaris11:~#
root@solaris11:~# dladm show-phys -P | egrep "e1000g0|e1000g1"
pci0 e1000g1 Ethernet -----
onboard0 e1000g0 Ethernet -----
root@solaris11:~#
Misalkan kita ingin memiliki “virtual IP” 172.16.103.100 untuk IPMP interface tadi. Masing-masing interface yang membentuk IPMP interface juga akan memiliki IP; IP yang dipakai oleh interface onboard0
& pci0
akan dikenal sebagai test address. Dalam contoh ini interface onboard0
akan menggunakan test address 172.16.103.101 & interface pci0
akan menggunakan IP 172.16.103.102.
Test address digunakan oleh masing-masing interface untuk memastikan konektifitas server dengan dunia luar. Masing-masing interface akan menggunakan test address untuk memastikan koneksi ke target address 172.16.103.1. Target address yang paling mudah diset adalah IP gateway. Untuk memastikan konektifitas masing-masing interface akan mengirimkan paket ICMP menuju target address. ICMP ini sama dengan yang dipakai oleh perintah ping
. Jadi bisa juga dikatakan masing-masing interface akan melakukan ping
pada target address. Bila hasil testnya tidak mendapatkan jawaban, maka interface tersebut akan memberi tahu IPMP bahwa dirinya tidak punya koneksi ke dunia luar & harap jangan menggunakan dirinya untuk sementara waktu. IPMP tidak akan menggunakan interface yang bersangkutan untuk berkomunikasi dengan dunia luar. Bila kedua interface gagal mendapatkan reply, maka IPMP akan down sehingga server ini terputus koneksinya dengan dunia luar. Pada saat itu, semua user tidak bisa mengakses server ini.
Langkah pertama membuat IPMP adalah dengan membuat IPMP group
; misalkan kita sebut grupnya “oam0
“. Grup ini yang akan menyatukan interface onboard0
& pci0
. Perintahnya untuk membuat IPMP group
adalah seperti berikut ini :
root@solaris11:~# ipadm create-ipmp oam0
Lalu kita buat IP interface pada masing-masing data link (onboard0
& pci0
) dengan perintah seperti berikut :
root@solaris11:~# ipadm create-ip onboard0
root@solaris11:~# ipadm create-ip pci0
Setelah masing-masing link sudah memiliki IP interface, kita perlu mendaftarkannya ke dalam IPMP group
oam0
:
root@solaris11:~# ipadm add-ipmp -i onboard0 -i pci0 oam0
root@solaris11:~# ipmpstat -g
GROUP GROUPNAME STATE FDT INTERFACES
oam0 oam0 ok -- pci0 onboard0
root@solaris11:~#
Langkah berikutnya adalah mengaktifkan virtual IP 172.16.103.100 pada interface IPMP :
root@solaris11:~# ipadm create-addr -T static -a 172.16.103.100/24 oam0/v4
Kita bisa memeriksa status interface oam0
tersebut dengan salah satu perintah berikut ini :
root@solaris11:~# ipmpstat -an
ADDRESS STATE GROUP INBOUND OUTBOUND
:: down oam0 -- --
172.16.103.100 up oam0 onboard0 pci0 onboard0
root@solaris11:~#
root@solaris11:~# ifconfig oam0
oam0: flags=8001000843 mtu 1500 index 5
inet 172.16.103.100 netmask ffffff00 broadcast 172.16.103.255
groupname oam0
root@solaris11:~#
root@solaris11:~# ipadm show-addr
ADDROBJ TYPE STATE ADDR
lo0/v4 static ok 127.0.0.1/8
net3/v4static static ok 172.16.103.10/24
oam0/v4 static ok 172.16.103.100/24
lo0/v6 static ok ::1/128
onboard0/_a static ok fe80::250:56ff:fe36:7c7c/10
pci0/_a static ok fe80::20c:29ff:fe94:8526/10
root@solaris11:~#
Pada langkah ini bisa diliat virtual IP oam0
172.16.103.100 sudah aktif. IPMP hanya menggunakan interface onboard0
untuk menerima data (INBOUND
) & menggunakan kedua interface fisik untuk mengirimkan data keluar (OUTBOUND
).
root@solaris11:~# ipmpstat -an
ADDRESS STATE GROUP INBOUND OUTBOUND
:: down oam0 -- --
172.16.103.100 up oam0 onboard0 pci0 onboard0
root@solaris11:~#
Sampai saat ini sebenarnya IPMP sudah selesai dibuat hanya saja masih menggunakan link-based failure detection. Maksudnya IPMP hanya akan menganggap suatu interface gagal bila koneksi fisiknya putus (misalnya bila kabelnya dicabut).
Solaris 11 menggunakan link-based failure detection sebagai default. Selain link-based failure detection, kita bisa memilih untuk menggunakan probe-based failure detection. Dengan probe-based failure detection, masing-masing interface (onboard0
& pci0
) secara aktif memeriksa konektifitasnya dengan dunia luar. Jadi bisa saja meskipun kabelnya tidak terputus/tercabut, gateway IPnya tidak bisa diakses sehingga interface tersebut menginformasikan gagal koneksi kepada IPMP Group
.
Berikut adalah cara untuk memberi alamat IP (test address) pada masing-masing interface :
root@solaris11:~# ipadm create-addr -T static -a 172.16.103.101/24 onboard0/v4
root@solaris11:~# ipadm create-addr -T static -a 172.16.103.102/24 pci0/v4
Untuk memeriksa masing-masing interface & test address-nya kita bisa menggunakan perintah berikut ini :
root@solaris11:~# ipmpstat -tn
INTERFACE MODE TESTADDR TARGETS
pci0 routes 172.16.103.102 172.16.103.1
onboard0 routes 172.16.103.101 172.16.103.1
root@solaris11:~#
Mari kita periksa sekali lagi semua IP yang sudah kita aktifkan :
root@solaris11:~# ifconfig onboard0
onboard0: flags=9040843 mtu 1500 index 6
inet 172.16.103.101 netmask ffffff00 broadcast 172.16.103.255
groupname oam0
ether 0:50:56:36:7c:7c
root@solaris11:~# ifconfig pci0
pci0: flags=9040843 mtu 1500 index 7
inet 172.16.103.102 netmask ffffff00 broadcast 172.16.103.255
groupname oam0
ether 0:c:29:94:85:26
root@solaris11:~#
root@solaris11:~# ipadm show-addr
ADDROBJ TYPE STATE ADDR
lo0/v4 static ok 127.0.0.1/8
net3/v4static static ok 172.16.103.10/24
oam0/v4 static ok 172.16.103.100/24
onboard0/v4 static ok 172.16.103.101/24
pci0/v4 static ok 172.16.103.102/24
lo0/v6 static ok ::1/128
onboard0/_a static ok fe80::250:56ff:fe36:7c7c/10
pci0/_a static ok fe80::20c:29ff:fe94:8526/10
root@solaris11:~#
Untuk mengetahui bagaimana masing-masing test address memeriksa konektivitas dengan dunia luar, kita bisa gunakan perintah berikut ini :
root@solaris11:~# ipmpstat -p
TIME INTERFACE PROBE NETRTT RTT RTTAVG TARGET
0.87s onboard0 i145 0.56ms 0.82ms 0.51ms 172.16.103.1
1.07s pci0 i137 0.32ms 0.41ms 0.42ms 172.16.103.1
1.65s onboard0 i146 0.34ms 0.43ms 0.50ms 172.16.103.1
1.95s pci0 i138 0.35ms 0.45ms 0.42ms 172.16.103.1
3.02s onboard0 i147 0.33ms 0.43ms 0.49ms 172.16.103.1
3.48s pci0 i139 0.33ms 0.42ms 0.42ms 172.16.103.1
4.72s onboard0 i148 0.33ms 0.42ms 0.48ms 172.16.103.1
4.81s pci0 i140 0.31ms 0.40ms 0.42ms 172.16.103.1
6.28s onboard0 i149 0.29ms 0.38ms 0.47ms 172.16.103.1
6.76s pci0 i141 0.41ms 0.73ms 0.46ms 172.16.103.1
^C
root@solaris11:~#
Terlihat bahwa masing-masing test address secara aktif mengirimkan paket ICP ke target address.
Dengan pengaturan seperti di atas, IPMP akan menggunakan masing-masing interface/test address dalam konfigurasi aktif-aktif.
root@solaris11:~# ipmpstat -i
INTERFACE ACTIVE GROUP FLAGS LINK PROBE STATE
pci0 yes oam0 ------- up ok ok
onboard0 yes oam0 --mbM-- up ok ok
root@solaris11:~#
Seperti dijelaskan di atas, IPMP Group
akan menggunakan menggunakan kedua interface untuk mengirimkan data.
root@solaris11:~# ipmpstat -an
ADDRESS STATE GROUP INBOUND OUTBOUND
:: down oam0 -- --
172.16.103.100 up oam0 onboard0 pci0 onboard0
root@solaris11:~#
Kita punya opsi untuk mengatur hanya salah satu interface yang dipakai & menjadikan interface lainnya dalam posisi standby. Misalnya kita ingin mengatur test address pci0
sebagai standby interface, maka perintahnya seperti berikut ini :
root@solaris11:~# ipadm set-ifprop -p standby=on -m ip pci0
Dengan perintah tersebut maka IPMP Group
hanya akan menggunakan interface onboard0
untuk menerima & mengirimkan data.
root@solaris11:~# ipmpstat -an
ADDRESS STATE GROUP INBOUND OUTBOUND
:: down oam0 -- --
172.16.103.100 up oam0 onboard0 onboard0
root@solaris11:~#
Sekarang mari kita coba untuk mencabut kabel pada interface onboard0
& melihat apa yang terjadi pada IPMP Group
.
root@solaris11:~# tail -0f /var/adm/messages
Feb 4 22:54:24 solaris11 mac: [ID 486395 kern.info] NOTICE: onboard0 link down
Feb 4 22:54:24 solaris11 in.mpathd[155]: [ID 215189 daemon.error] The link has gone down on onboard0
Feb 4 22:54:24 solaris11 in.mpathd[155]: [ID 968981 daemon.error] IP interface failure detected on onboard0 of group oam0
^C
root@solaris11:~# ipmpstat -an
ADDRESS STATE GROUP INBOUND OUTBOUND
:: down oam0 -- --
172.16.103.100 up oam0 pci0 pci0
root@solaris11:~#
Ketika IPMP mendeteksi putusnya koneksi pada interface onboard0
, maka secara otomatis IPMP akan mengalihkan koneksi ke interface pci0
.
Saat kita menyambungkan kembali kabel pada interface onboard0
, IPMP akan mengembalikan koneksi seperti kondisi semula. Lihat contoh log yang muncul & bagaimana IPMP mengembalikan koneksi ke interface onboard0
.
root@solaris11:~# tail -0f /var/adm/messages
Feb 4 22:55:39 solaris11 mac: [ID 435574 kern.info] NOTICE: onboard0 link up, 1000 Mbps, full duplex
Feb 4 22:55:39 solaris11 in.mpathd[155]: [ID 820239 daemon.error] The link has come up on onboard0
Feb 4 22:55:54 solaris11 in.mpathd[155]: [ID 341557 daemon.error] IP interface repair detected on onboard0 of group oam0
^C
root@solaris11:~# ipmpstat -an
ADDRESS STATE GROUP INBOUND OUTBOUND
:: down oam0 -- --
172.16.103.100 up oam0 onboard0 onboard0
root@solaris11:~#
Butuh waktu sekitar 15 detik bagi IPMP untuk menyadari bahwa koneksi pada interface onboard0
sudah kembali normal.
Lalu bagaimana bila pada suatu waktu kabel pada standby interface (pci0
) terputus? Meskipun IPMP tidak sedang menggunakan pci0
, tapi IPMP tetap mendeteksi gagalnya koneksi pada pci0
sehingga IPMP tahu bahwa dia tidak lagi memiliki backup.
root@solaris11:~# tail -0f /var/adm/messages
Feb 4 23:01:42 solaris11 mac: [ID 486395 kern.info] NOTICE: pci0 link down
Feb 4 23:01:42 solaris11 in.mpathd[155]: [ID 215189 daemon.error] The link has gone down on pci0
Feb 4 23:01:42 solaris11 in.mpathd[155]: [ID 968981 daemon.error] IP interface failure detected on pci0 of group oam0
^C
root@solaris11:~# ipadm show-if
IFNAME CLASS STATE ACTIVE OVER
lo0 loopback ok yes --
net3 ip ok yes --
oam0 ipmp ok yes onboard0 pci0
onboard0 ip ok yes --
pci0 ip failed no --
root@solaris11:~#
Bisa dilihat bahwa koneksi in & out tetap aktif melalui interface onboard0
.
root@solaris11:~# ipmpstat -an
ADDRESS STATE GROUP INBOUND OUTBOUND
:: down oam0 -- --
172.16.103.100 up oam0 onboard0 onboard0
root@solaris11:~#
Tapi IPMP Group
menyadari bahwa dia sudah kehilangan backup interface & menyatakan status dirinya DEGRADED
:
We can see that the IPMP group marked as degraded :
root@solaris11:~# ipmpstat -g
GROUP GROUPNAME STATE FDT INTERFACES
dodol2 dodol2 failed -- --
oam0 oam0 degraded 10.00s onboard0 [pci0]
root@solaris11:~#
Bila koneksi kabel pada interface pci0
sudah disambungkan kembali, IPMP akan mendeteksinya juga seperti terlihat pada contoh log berikut ini :
root@solaris11:~# tail -0f /var/adm/messages
Feb 4 23:02:22 solaris11 mac: [ID 435574 kern.info] NOTICE: pci0 link up, 1000 Mbps, full duplex
Feb 4 23:02:23 solaris11 in.mpathd[155]: [ID 820239 daemon.error] The link has come up on pci0
Feb 4 23:02:38 solaris11 in.mpathd[155]: [ID 341557 daemon.error] IP interface repair detected on pci0 of group oam0
^C
root@solaris11:~# ipadm show-if
IFNAME CLASS STATE ACTIVE OVER
lo0 loopback ok yes --
net3 ip ok yes --
oam0 ipmp ok yes onboard0 pci0
onboard0 ip ok yes --
pci0 ip ok no --
root@solaris11:~#
Jadi bisa disimpulkan bahwa IPMP sangat berguna untuk mendapatkan koneksi yang lebih handal (reliable). Semua user sedang mengakses server ini tidak akan mendapat gangguan bila salah satu interface gagal beroperasi, atau bila salah satu kabel terputus.
UPDATE : semua perintah di atas akan langsung tersimpan secara permanen, artinya konfigurasinya tidak akan berubah meskipun kita reboot servernya.