首先,我们的问题是:在部署Oracle RAC的时候为什么需要修改/etc/hosts文件? 或者具体的说,我们在Linux平台部署Oracle RAC时为什么需要将/etc/hosts文件里的环路地址修改为
127.0.0.1 localhost
格式? 当然,不同操作系统平台需要修改的hosts文件名称和位置,依赖于操作系统本身。如:Windows下需要修改的是C:\Windows\System32\drivers\etc\hosts文件。
接下来,要想搞清楚这个问题不难,了解一些网络相关的基础知识即可。
我们知道,在一个网络环境中,我们可以通过IP地址去精确访问某个网络设备[如主机、pc、打印机],也可以通过这个设备名来访问该设备。
通过IP地址去定位某个设备时,如果网络未遭受诸如ARP攻击的话,则通常都不会出现问题。关于ARP问题不是本篇重点,不再赘述。
而要想通过主机名去访问时,就需要有某种转换规则可以正确的将主机名称与IP地址成功映射。
这种转换规则通常可以有3种途径:
1 hosts配置文件;
2 NIS[Network Information System|Service],网络信息服务,或者称之为”网络黄页”;
3 DNS[Domain Name System],域名系统。
在没有配置NIS、DNS的网络环境下,/etc/hosts文件则成为我们通过主机名来访问该主机的唯一选择了。
这个配置文件里记录着网络中每一台主机名与其对应的IP地址,而且如果出现某个主机名对应多个IP的话,则只有第一条记录生效,可以用于正确的解析主机名,在解析过程中,后面出现的记录将被忽略。该文件的配置格式如下:
IP Address hostname aliases
看个例子,如果保留默认情况下的环路地址:
[root@node1 ~]# hostname node1.oracleonlinux.cn [root@node1 ~]# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 node1.oracleonlinux.cn node1 localhost.localdomain localhost localhost ::1 localhost6.localdomain6 localhost6 # public 172.16.0.33 node1.oracleonlinux.cn node1 172.16.0.34 node2.oracleonlinux.cn node2 # private 192.168.94.11 node1-priv.oracleonlinux.cn node1-priv 192.168.94.12 node2-priv.oracleonlinux.cn node2-priv # virtual 172.16.0.35 node1-vip.oracleonlinux.cn node1-vip 172.16.0.36 node2-vip.oracleonlinux.cn node2-vip # scan-ip 172.16.0.223 scan-cluster.oracleonlinux.cn [root@node1 ~]# ping node1 PING node1.oracleonlinux.cn (127.0.0.1) 56(84) bytes of data. 64 bytes from node1.oracleonlinux.cn (127.0.0.1): icmp_seq=1 ttl=64 time=0.028 ms 64 bytes from node1.oracleonlinux.cn (127.0.0.1): icmp_seq=2 ttl=64 time=0.043 ms 64 bytes from node1.oracleonlinux.cn (127.0.0.1): icmp_seq=3 ttl=64 time=0.041 ms 64 bytes from node1.oracleonlinux.cn (127.0.0.1): icmp_seq=4 ttl=64 time=0.039 ms --- node1.oracleonlinux.cn ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3001ms rtt min/avg/max/mdev = 0.028/0.037/0.043/0.009 ms [root@node1 ~]# ping node1.oracleonlinux.cn PING node1.oracleonlinux.cn (127.0.0.1) 56(84) bytes of data. 64 bytes from node1.oracleonlinux.cn (127.0.0.1): icmp_seq=1 ttl=64 time=0.031 ms 64 bytes from node1.oracleonlinux.cn (127.0.0.1): icmp_seq=2 ttl=64 time=0.042 ms 64 bytes from node1.oracleonlinux.cn (127.0.0.1): icmp_seq=3 ttl=64 time=0.044 ms 64 bytes from node1.oracleonlinux.cn (127.0.0.1): icmp_seq=4 ttl=64 time=0.043 ms --- node1.oracleonlinux.cn ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 2999ms rtt min/avg/max/mdev = 0.031/0.040/0.044/0.005 ms [root@node1 ~]#
我们修改默认环路地址后:
[root@node1 ~]# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost ::1 localhost6.localdomain6 localhost6 # public 172.16.0.33 node1.oracleonlinux.cn node1 172.16.0.34 node2.oracleonlinux.cn node2 # private 192.168.94.11 node1-priv.oracleonlinux.cn node1-priv 192.168.94.12 node2-priv.oracleonlinux.cn node2-priv # virtual 172.16.0.35 node1-vip.oracleonlinux.cn node1-vip 172.16.0.36 node2-vip.oracleonlinux.cn node2-vip # scan-ip 172.16.0.223 scan-cluster.oracleonlinux.cn [root@node1 ~]# ping node1 PING node1.oracleonlinux.cn (172.16.0.33) 56(84) bytes of data. 64 bytes from node1.oracleonlinux.cn (172.16.0.33): icmp_seq=1 ttl=64 time=0.026 ms 64 bytes from node1.oracleonlinux.cn (172.16.0.33): icmp_seq=2 ttl=64 time=0.040 ms 64 bytes from node1.oracleonlinux.cn (172.16.0.33): icmp_seq=3 ttl=64 time=0.050 ms 64 bytes from node1.oracleonlinux.cn (172.16.0.33): icmp_seq=4 ttl=64 time=0.034 ms --- node1.oracleonlinux.cn ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3000ms rtt min/avg/max/mdev = 0.026/0.037/0.050/0.010 ms [root@node1 ~]# ping node1.oracleonlinux.cn PING node1.oracleonlinux.cn (172.16.0.33) 56(84) bytes of data. 64 bytes from node1.oracleonlinux.cn (172.16.0.33): icmp_seq=1 ttl=64 time=0.038 ms 64 bytes from node1.oracleonlinux.cn (172.16.0.33): icmp_seq=2 ttl=64 time=0.044 ms 64 bytes from node1.oracleonlinux.cn (172.16.0.33): icmp_seq=3 ttl=64 time=0.047 ms 64 bytes from node1.oracleonlinux.cn (172.16.0.33): icmp_seq=4 ttl=64 time=0.041 ms --- node1.oracleonlinux.cn ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3001ms rtt min/avg/max/mdev = 0.038/0.042/0.047/0.007 ms [root@node1 ~]#
最后,看完之后,你有答案了吗?现在你知道了部署Oracle RAC时为什么需要将/etc/hosts文件里的环路地址修改为
127.0.0.1 localhost
格式吗?
评论 (6)
dog| 2014年1月10日
127.0.0.1 localhost
好像不修改都有这一句的吧。
admin| 2014年1月10日
@dog 是的,你说的没错。但是,在很多时候,默认情况下,还有很多其它的“冗余”信息,如127.0.0.1 node1.oracleonlinux.cn node1 localhost.localdomain localhost localhost
test| 2014年1月20日
没看懂为啥要写成 127.0.0.1 localhost
,只要这个ip中不要加入了主机名即可,其他可以随意
admin| 2014年1月20日
@test
127.0.0.1 localhost是主机的环路对应地址,约定俗成的“规则”需要这么配置。重点是,在配置RAC环境时127.0.0.1 localhost这一行,切记不要加入其它配置信息,否则就会出问题!
test| 2014年1月20日
我看我们这边的DBA直接将这一行删去,运行也都是正常的
luoyanqing| 2014年6月12日
我之前这个没改,装的11.2.0.3的rac老出错,最后查出来就这个问题