IPMP Pada Solaris 11

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 onboard0pci0 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.

Leave a Reply