{"id":1364,"date":"2012-09-06T11:28:27","date_gmt":"2012-09-06T03:28:27","guid":{"rendered":"http:\/\/rmohan.com\/?p=1364"},"modified":"2012-09-06T11:48:59","modified_gmt":"2012-09-06T03:48:59","slug":"ipmp-solaris","status":"publish","type":"post","link":"https:\/\/mohan.sg\/?p=1364","title":{"rendered":"IPMP &#8211; Solaris"},"content":{"rendered":"<div>\u00a0<\/div>\n<div dir=\"ltr\"><strong>IPMP, or IP Multipathing<\/strong>, is used to provide redundant network connections for your Solaris servers.\u00a0 When IPMP was first release it used a probe based method for failure detection.\u00a0 This required an IP address to be placed on all NIC\u2019s in the IPMP group, even if the NIC was just being used a test interface.\u00a0 Also, the probe based methodology for failure detection would send pings out every 2 seconds and would wait for 5 failures before failing over the IP addresses to another NIC in the IPMP group.\u00a0 This means that a network connection would be down for 10 seconds <br \/>before the failover occurred.<\/p>\n<p>Starting with Solaris 9 link-based IPMP was released.\u00a0This uses the interfaces link state to determine the status of the network connection for failover\/failback purposes.\u00a0 With link-based IPMP the failover will occur instantly when a link goes down. Since the failover is instantaneous and no extra IP addresses are required to build test interfaces, link-based IPMP is the preferred way to build redundant network interfaces on Solaris.<\/p>\n<p>IPMP requires that each NIC has a unique MAC address. Before configuring IPMP verify that the local-mac-address? Setting on the system PROM is set to true.<\/p>\n<p># eeprom local-mac-address?<br \/> local-mac-address?=true<\/p>\n<p>If it\u2019s not set to true then run the following command to change the setting and then reboot the system<\/p>\n<p># eeprom local-mac-address?=true<\/p>\n<p>Link based IPMP can be configured as active\/active or active\/passive.\u00a0 Examples of both are provided below.<\/p>\n<p><strong><span style=\"text-decoration: underline;\">Active\/Passive:<\/span><\/strong><\/p>\n<p>If your server is only using 1 IP address you will have to configure your IPMP as Active\/ Passive. Here is a sample configuration.<\/p>\n<p>krishbe$ \/etc\/hostname.e1000g0<br \/> 192.168.3.32 group IPMP-1<\/p>\n<p>krishbe$\/etc\/hostname.e1000g1<br \/> group IPMP-1 standby<\/p>\n<p>The standby keyword is used on the passive interfaces.\u00a0No hostname or IP address should be assigned to this NIC.This configuration will result in the following after a system reboot.<\/p>\n<p>krishbe$ ifconfig -a<br \/> lo0: flags=2001000849&lt;UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL&gt; mtu 8232 index 1<br \/> inet 127.0.0.1 netmask ff000000<br \/> e1000g0: flags=1000843&lt;UP,BROADCAST,RUNNING,MULTICAST,IPv4&gt; mtu 1500 index 2<br \/> inet 192.168.3.32 netmask ffffff00 broadcast 192.168.3.255<br \/> groupname IPMP-1<br \/> ether 0:21:28:27:bc:84<br \/> e1000g0:1: flags=1000843&lt;UP,BROADCAST,RUNNING,MULTICAST,IPv4&gt; mtu 1500 index 2<br \/> inet 0.0.0.0 netmask ff000000 broadcast 0.255.255.255<br \/> e1000g1: flags=69000842&lt;BROADCAST,RUNNING,MULTICAST,IPv4,NOFAILOVER,STANDBY,INACTIVE&gt; mtu 0 index 4<br \/> inet 0.0.0.0 netmask 0<br \/> groupname IPMP-1<br \/> ether 0:21:28:27:bc:85<\/p>\n<p>An attempt to assign an IP address to a standby interface will cause that IP to be configured on another NIC in the IPMP group. Notice in the following example an attempt to assign an IP address to e1000g1 will result in a new logical interface being configured on e1000g0. As long as the link status of one NIC in the IPMP group is good, then the standby interface will not allow any IP addresses to be configured on it.<\/p>\n<p>krishbe$ ifconfig e1000g1 addif 192.168.3.33 up<br \/> Created new logical interface e1000g0:2<\/p>\n<p>In an active\/passive configuration you can setup as many virtual IP address on the active NIC as you want.\u00a0 However, if multiple IP addresses are to be used then it would probably make sense to use an active\/active configuration for load balancing purposes.<\/p>\n<p><strong><span style=\"text-decoration: underline;\">Active\/Active:<\/span><\/strong><\/p>\n<p>If your server uses multiple IP address on the same network you can spread your network load across all NIC\u2019s in your IPMP group.\u00a0 The following example shows 2 IP address on 2 NIC\u2019s.<\/p>\n<p>krishbe$ cat \/etc\/e1000g0<br \/> 192.168.3.32 group IPMP-1<\/p>\n<p>krishbe$ cat \/etc\/e1000g1<br \/> 192.168.3.33 group IPMP-1<\/p>\n<p>This configuration will result in the following after a system reboot.<\/p>\n<p>krishbe$ ifconfig -a<br \/> lo0: flags=2001000849&lt;UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL&gt; mtu 8232 index 1<br \/> inet 127.0.0.1 netmask ff000000<br \/> e1000g0: flags=1000843&lt;UP,BROADCAST,RUNNING,MULTICAST,IPv4&gt; mtu 1500 index 2<br \/> inet 192.168.3.32 netmask ffffff00 broadcast 192.168.3.255<br \/> groupname IPMP-1<br \/> ether 0:21:28:27:bc:84<br \/> e1000g1: flags=1000843&lt;UP,BROADCAST,RUNNING,MULTICAST,IPv4&gt; mtu 1500 index 3<br \/> inet 192.168.3.33 netmask ffffff00 broadcast 192.168.3.255<br \/> groupname IPMP-1<br \/> ether 0:21:28:27:bc:85<\/p>\n<p>To test failover, you can do the hard way of pulling the cables\u00a0 or use if_mpadm command as follows:<\/p>\n<p>To failover:<br \/> krishbe$\u00a0if_mpadm -d bge0<br \/> To failback<br \/> krishbe$ if_mpadm -r bge0<\/p>\n<p><strong><span style=\"text-decoration: underline;\">LAB:<\/span><\/strong><\/p>\n<p>krishbe$ cat \/etc\/hostname.bge0<br \/> sinss00070 group sinss00070-ipmp up<\/p>\n<p>krishbe$ cat \/etc\/hostname.nxge0<br \/> group sinss00070-ipmp standby up<br \/> krishbe$<\/p>\n<p>krishbe$ ifconfig -a<br \/> lo0: flags=2001000849&lt;UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL&gt; mtu 8232 index 1<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inet 127.0.0.1 netmask ff000000<br \/> bge0: flags=1000843&lt;UP,BROADCAST,RUNNING,MULTICAST,IPv4&gt; mtu 1500 index 2<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inet 11.168.34.90 netmask ffffff00 broadcast 11.168.34.255<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 groupname sinss00070-ipmp<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ether 0:14:4f:3a:6f:ff<br \/> bge0:1: flags=1000843&lt;UP,BROADCAST,RUNNING,MULTICAST,IPv4&gt; mtu 1500 index 2<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inet 0.0.0.0 netmask ff000000 broadcast 0.255.255.255<br \/> nxge0: flags=69000842&lt;BROADCAST,RUNNING,MULTICAST,IPv4,NOFAILOVER,STANDBY,INACTIVE&gt; mtu 0 index 3<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inet 0.0.0.0 netmask 0<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 groupname sinss00070-ipmp<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ether 0:21:28:41:76:3a<br \/> krishbe$<\/p>\n<p>krishbe$ if_mpadm -d bge0<br \/> sinss00070:krishbe$ Nov 30 16:17:10 sinss00070 in.mpathd[416]: Successfully failed over from NIC bge0 to NIC nxge0<\/p>\n<p>krishbe$ ifconfig -a<br \/> lo0: flags=2001000849&lt;UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL&gt; mtu 8232 index 1<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inet 127.0.0.1 netmask ff000000<br \/> bge0: flags=89000842&lt;BROADCAST,RUNNING,MULTICAST,IPv4,NOFAILOVER,OFFLINE&gt; mtu 0 index 2<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inet 0.0.0.0 netmask 0<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 groupname sinss00070-ipmp<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ether 0:14:4f:3a:6f:ff<br \/> nxge0: flags=21000843&lt;UP,BROADCAST,RUNNING,MULTICAST,IPv4,STANDBY&gt; mtu 1500 index 3<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inet 0.0.0.0 netmask ff000000 broadcast 0.255.255.255<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 groupname sinss00070-ipmp<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ether 0:21:28:41:76:3a<br \/> nxge0:1: flags=21000843&lt;UP,BROADCAST,RUNNING,MULTICAST,IPv4,STANDBY&gt; mtu 1500 index 3<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inet 11.168.34.90 netmask ffffff00 broadcast 11.168.34.255<br \/> krishbe$<\/p>\n<p>krishbe$ if_mpadm -r bge0<br \/> Nov 30 16:17:58 sinss00070 in.mpathd[416]: Successfully failed back to NIC bge0<\/p>\n<p>krishbe$ ifconfig -a<br \/> lo0: flags=2001000849&lt;UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL&gt; mtu 8232 index 1<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inet 127.0.0.1 netmask ff000000<br \/> bge0: flags=1000843&lt;UP,BROADCAST,RUNNING,MULTICAST,IPv4&gt; mtu 1500 index 2<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inet 11.168.34.90 netmask ffffff00 broadcast 11.168.34.255<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 groupname sinss00070-ipmp<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ether 0:14:4f:3a:6f:ff<br \/> bge0:1: flags=1000843&lt;UP,BROADCAST,RUNNING,MULTICAST,IPv4&gt; mtu 1500 index 2<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inet 0.0.0.0 netmask ff000000 broadcast 0.255.255.255<br \/> nxge0: flags=69000842&lt;BROADCAST,RUNNING,MULTICAST,IPv4,NOFAILOVER,STANDBY,INACTIVE&gt; mtu 0 index 3<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inet 0.0.0.0 netmask 0<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 groupname sinss00070-ipmp<br \/> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ether 0:21:28:41:76:3a<br \/> krishbe$<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p> IPMP, or IP Multipathing, is used to provide redundant network connections for your Solaris servers. When IPMP was first release it used a probe based method for failure detection. This required an IP address to be placed on all NIC\u2019s in the IPMP group, even if the NIC was just being used a test [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39],"tags":[],"_links":{"self":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/1364"}],"collection":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1364"}],"version-history":[{"count":4,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/1364\/revisions"}],"predecessor-version":[{"id":1366,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/1364\/revisions\/1366"}],"wp:attachment":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1364"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}