【DB笔试面试730】在Oracle中,如果需要修改网卡、子网、网段等信息,那么应该如何操作?

2020-01-20 17:00:41 浏览数 (1)

题目部分

在Oracle中,如果需要修改网卡、子网、网段等信息,那么应该如何操作?

答案部分

Oracle 11g RAC中的IP主要有:Public IP、VIP、SCAN VIP、Private IP这几种。一般这类改IP地址或者网卡名称的需求主要场景有:机房搬迁网络变更、系统上线由测试IP更改为生产IP、系统层面双网卡绑定或者解绑等。

如果修改涉及到了不同的子网(网络掩码)或者网卡,需要将OCR中已经存在的网卡信息删除并重新添加新的信息。在以下的示例中子网从172.16.10.X修改为172.16.20.X,需要执行两个步骤–首先‘delif’,接下来‘setif’;然后,在操作系统层面进行修改。除非OS层面的修改需要重新启动节点,否则不需要重启Oracle集群管理软件。修改可以使用滚动的方式完成。

在这种情况下,一旦公网信息被修改,则与其相关的VIP和SCAN VIP也必须修改。

在修改IP地址之前需要先对OCR和GPNP文件进行备份,然后在OS层面添加修改后的网卡适配器以及配置好相关的IP地址,最后再做相关的修改操作。

(一)备份OCR和GPNP profile文件

在修改RAC的IP地址之前,我们需要先备份一下OCR文件,因为IP地址信息是记录在OCR中的,同时还要注意一点,从Oracle 11.2.0.2之后,private network的配置除了记录在OCR中之外,还会记录在GPNP profile里。如果private network不可用或者配置不正确,就会导致CRSD进程不能启动。

因此在操作之前,必须先手工备份GPNP profile和OCR:

用grid用户执行:

节点1,节点2都要执行

代码语言:javascript复制
[grid@rac1 peer]$ cd $ORACLE_HOME/gpnp/rac1/profiles/peer/
[grid@rac1 peer]$ cp -p profile.xml profile.xml.bak

执行手工OCR的备份

cd 到grid_home

代码语言:javascript复制
[root@rac1 ~]# cd /u01/app/11.2.0/grid/bin/
[root@rac1 bin]# ./ocrconfig -manualbackup
rac1     2018/05/15 09:35:04     /u01/app/11.2.0/grid/cdata/rac-cluster/backup_20180515_093504.ocr

查看OCR的手工备份

节点1执行即可:

代码语言:javascript复制
[root@rac1 bin]# ./ocrconfig -showbackup manual
rac1     2018/05/15 09:35:04     /u01/app/11.2.0/grid/cdata/rac-cluster/backup_20180515_093504.ocr

如果操作出现问题,那么可以通过OCR备份进行恢复。

(二)修改公网IP

Oracle集群中的网络信息(接口,子网及每个网卡的角色)都可以被oifcfg命令管理,但是没有网卡的IP地址除外,oifcfg(Oracle Interface Configuration Tool)命令不能修改IP地址信息。

在以下示例中,eth0和eth1是需要修改的网卡,而eth2和eth3是修改后的网卡:

1. 停止数据库:

代码语言:javascript复制
srvctl stop database -d lhrrac1

2. 获取网段:

代码语言:javascript复制
oifcfg iflist
oifcfg getif -global

例如:

代码语言:javascript复制
[root@raclhr-11gR2-N1 ~]# oifcfg iflist
eth0  192.168.59.0
eth1  192.168.2.0
eth1  169.254.0.0
eth2  192.168.159.0
eth3  192.168.102.0
virbr0  192.168.122.0
[root@raclhr-11gR2-N1 ~]# oifcfg getif -global
eth0  192.168.59.0  global  public
eth1  192.168.2.0  global  cluster_interconnect
[root@raclhr-11gR2-N1 ~]# 

3. 节点1和节点2分别运行:

代码语言:javascript复制
oifcfg delif -global eth0/192.168.59.0
oifcfg setif -global eth2/192.168.159.0:public

修改后校验:

代码语言:javascript复制
oifcfg getif -global

例如:

代码语言:javascript复制
[root@raclhr-11gR2-N1 ~]# oifcfg getif -global
eth1  192.168.2.0  global  cluster_interconnect
eth2  192.168.159.0  global  public

修改成功。

(三)设置VIP

一般而言,只有10.2.0.3之前的版本需要完全的停机。从10.2.0.3开始,ASM和数据库实例对VIP资源的依赖关系已经被删除,所以修改VIP不需要停止ASM和数据库实例,只有当修改VIP时产生的客户端连接会受影响。如果修改只涉及到特定的节点,那么只有连接到对应节点的客户端链接在修改时会受影响。

首先,请确保公网信息被修改。如果在OS层面的网络修改后发生了节点或者集群管理软件重启,VIP将不会被启动,那么需要修改VIP和相关属性后才能启动VIP。

1. 获取当前设置

代码语言:javascript复制
srvctl config nodeapps -a

例如:

代码语言:javascript复制
[root@raclhr-11gR2-N1 ~]# srvctl config nodeapps -a
Network exists: 1/192.168.59.0/255.255.255.0/eth0, type static
VIP exists: /raclhr-11gR2-N1-vip/192.168.59.172/192.168.59.0/255.255.255.0/eth0, hosting node raclhr-11gr2-n1
VIP exists: /raclhr-11gR2-N2-vip/192.168.59.173/192.168.59.0/255.255.255.0/eth0, hosting node raclhr-11gr2-n2

2.验证VIP状态

代码语言:javascript复制
$ crsctl stat res -t

以上命令应该显示VIPs状态为ONLINE

代码语言:javascript复制
$ ifconfig -a

需要注意的是,HP平台请使用netstat–in,Windows平台请使用ipconfig /all。

3.停止nodeapps资源(如果有必要的话,停止存在依赖关系的ASM和数据库资源):

对于版本11gR2,使用Grid Infrastructure的拥有者执行下面的命令:

代码语言:javascript复制
srvctl stop vip -n raclhr-11gR2-N1 -f
srvctl stop vip -n raclhr-11gR2-N2 -f

注意,对于版本11gR2,需要使用-f选项停止listener资源,否则会报以下错误:

代码语言:javascript复制
PRCR-1014 : Failed to stop resource ora.racnode1.vip
PRCR-1065 : Failed to stop resource ora.racnode1.vip
CRS-2529: Unable to act on 'ora.racnode1.vip' because that would require stopping or relocating 'ora.LISTENER.lsnr', but the force option was not specified
...

4.验证VIP现在处于OFFLINE状态,并且VIP不再绑定到公网网卡

需要注意的是,HP平台请使用netstat–in,Windows平台请使用ipconfig /all。

代码语言:javascript复制
$ crs_stat -t (对于版本 11gR2,使用命令 $ crsctl stat res –t)
$ ifconfig -a

5.确定新的VIP地址/子网/网络掩码或者VIP对应的主机名,在OS层面修改网络配置信息,确认新的VIP地址应经注册到DNS或者确认/etc/hosts文件(Unix/Linux平台),WINDOWSSystem32driversetchosts文件(Windows平台)已经被修改。如果网卡信息被修改,确认在修改之前新的网卡在服务器上已经可用。

6.使用root用户修改VIP资源:

节点1上执行:

代码语言:javascript复制
srvctl modify nodeapps -n raclhr-11gR2-N1 -A 192.168.159.72/255.255.255.0/eth2 
srvctl modify nodeapps -n raclhr-11gR2-N2 -A 192.168.159.73/255.255.255.0/eth2
srvctl config nodeapps -a

7.启动nodeapps和其它资源

对于版本11gR2,使用Grid Infrastructure的拥有者执行下面的命令:

代码语言:javascript复制
srvctl start vip -n raclhr-11gR2-N1
srvctl start vip -n raclhr-11gR2-N2

注意:如果网络的属性做了修改,比如netmask等做了修改,需要重新启动nodeapps。

如果启动VIP报如下的错误:

代码语言:javascript复制
[root@raclhr-11gR2-N1 ~]# srvctl start vip -n raclhr-11gR2-N1
PRCR-1079 : Failed to start resource ora.raclhr-11gr2-n1.vip
CRS-5017: The resource action "ora.raclhr-11gr2-n1.vip start" encountered the following error: 
CRS-5009: The VIP address 192.168.159.72 does not belong to the subnet 192.168.59.0
. For details refer to "(:CLSN00107:)" in "/u01/app/11.2.0/grid/log/raclhr-11gr2-n1/agent/crsd/orarootagent_root/orarootagent_root.log".

CRS-2674: Start of 'ora.raclhr-11gr2-n1.vip' on 'raclhr-11gr2-n1' failed
CRS-5017: The resource action "ora.raclhr-11gr2-n1.vip start" encountered the following error: 
CRS-5009: The VIP address 192.168.159.72 does not belong to the subnet 192.168.59.0
. For details refer to "(:CLSN00107:)" in "/u01/app/11.2.0/grid/log/raclhr-11gr2-n2/agent/crsd/orarootagent_root/orarootagent_root.log".

CRS-2674: Start of 'ora.raclhr-11gr2-n1.vip' on 'raclhr-11gr2-n2' failed
CRS-2632: There are no more servers to try to place resource 'ora.raclhr-11gr2-n1.vip' on that would satisfy its placement policy

解决:重启网卡:

代码语言:javascript复制
service network restart

8.验证新的VIP状态为ONLINE并且已经绑定到集群公网网卡

代码语言:javascript复制
$ crs_stat -t (对于版本 11gR2,使用命令 $ crsctl stat res –t)
$ ifconfig -a

HP平台请使用netstat–in,Windows平台请使用ipconfig /all。

9.如果需要,修改listener.ora,tnsnames.ora和LOCAL_LISTENER/REMOTE_LISTENER参数反应VIP的改变。

注意:ASM和DB实例的LOCAL_LISTENER参数,是GI自动设置的。VIP的改变,LOCAL_LISTENER会自动识别,并生效。但是由于Bug 22824602,一些特定情况下。LOCAL_LISTENER参数没有反应VIP的改变。workaround解决方法是重启受影响的节点的集群软件。

(四)修改SCAN IP

在集群正常运行的情况下,首先修改所有节点/etc/hosts文件后,再执行如下命令,其中raclhr-scan是修改后的SCAN主机名:

代码语言:javascript复制
srvctl config scan
srvctl stop scan_listener 
srvctl stop scan
srvctl modify scan -n raclhr-scan
srvctl config scan
srvctl start scan 
srvctl start scan_listener

如果SCAN IP的个数改变了,那么还需要执行如下命令进行更新:

代码语言:javascript复制
srvctl modify scan_listener -u

需要注意的是,以上步骤也适用于修改SCAN的IP地址或增加SCAN IP的个数。

修改SCAN的端口号的命令如下所示:

代码语言:javascript复制
srvctl modify scan_listener -p 1522

(五)修改私网IP

当子网掩码被更改,但是子网标识没有改变时,如:子网掩码从255.255.0.0更改至255.255.255.0,私网ip为192.168.0.x,子网标识保持不变192.168.0.0,网卡名字没有改变.关闭所有需要更改的主机oracle clusterware,在操作系统层修改私有网络IP地址(如:操作系统网络配置等等)。并重启集群中所有节点,请注意,这种更改是不能采用轮转方式(rolling manaer)完成的。

当子网掩码被改变,附属的子网标识也经常会被改变,oracle在OCR中只存储网卡名字及子网标识的信息,而不存储子网掩码。可以使用oifcfg命令完成这样的变更,oifcfg命令只需在集群中的一个节点执行,而不是所有节点。

针对于11.2的结构,私有网络配置信息不但保存在OCR中,而且还保存在gpnp属性文件中。如果私有网络不可用或定义错误,则CRSD进程将无法启动,任何随后对于OCR的改变都是不可能完成的,因此需要注意当对私有网络的配置信息进行修改,正确的改变顺序是非常重要的。同时请注意,手动修改gpnp属性文件是不支持的。

在对集群中所有节点操作之前,请先备份profile.xml配置文件。作为grid用户执行:

代码语言:javascript复制
$ cd $GRID_HOME/gpnp/<hostname>/profiles/peer/
$ cp -p profile.xml profile.xml.bk

1.确保集群中的所有节点都已启动并正常运行

2.使用grid用户:

获取下面信息:

代码语言:javascript复制
$ cd $GRID_HOME/gpnp/<hostname>/profiles/peer/
$ cp -p profile.xml profile.xml.bk

注意以下几点:

① 如果网卡不可用,需要使用–global选项来完成,而不能使用–node选项,它将导致节点被驱逐。

② 如果网卡在服务器上可用,则可以使用下面命令识别子网地址:

代码语言:javascript复制
$oifcfg iflist

它列出了网卡及子网地址,即使oracle集群没有启动,此命令也可以被执行。请注意,子网掩码有可能不是x.y.z.0的格式,它可以是x.y.z.24,x.y.z.64或x.y.z.128等格式。如:

代码语言:javascript复制
$oifcfg iflist
lan1 18.1.2.0
lan2 10.2.3.64<<这是一个私有网络子网地址附属的私有网络ip地址为10.2.3.86

③ 如果需要添加第二个私有网络,而不是替换现有的私有网络,则需要保证两个网卡的MTU值相同,否则实例将无法启动并报如下错误信息:

代码语言:javascript复制
ORA-27504:IPC error creating OSD context
ORA-27300:OS system dependent operation:if MTU failed with status:0
ORA-27301:OS failure message:Error 0
ORA-27302:failure occurred at:skgxpcini2
ORA-27303:additional information:requested interface lan1:801 has a different MTU(1500)than lan3:801(9000),which is not supported.Check output from ifconfig command

④ 对于11gR2或更高版本,不建议在ASM或database的spfile或pfile中设置cluster interconnects参数。无论什么原因如果设置了该参数,则需要在集群关闭之前需将新的私网ip地址设置在spfile或pfile中,否则它会由于私网信息不匹配而导致重启失败。

例如:

代码语言:javascript复制
[root@raclhr-11gR2-N1 ~]# oifcfg setif -global eth3/192.168.102.0:cluster_interconnect
[root@raclhr-11gR2-N1 ~]# oifcfg getif
eth1  192.168.2.0  global  cluster_interconnect
eth2  192.168.159.0  global  public
eth3  192.168.102.0  global  cluster_interconnect
[root@raclhr-11gR2-N1 ~]# 

3.使用root用户关闭集群中所有的节点并禁用集群:

代码语言:javascript复制
#crsctl stop crs
#crsctl disable crs

4.使网络配置信息都已在OS层更改完成,确保更改完成后新的接口在所有的节点都可用有效:

代码语言:javascript复制
vi /etc/hosts #可以修改私网的主机名
ifconfig -a
ping <private hostname>

5.使用root用户激活oracle集群并重新启动集群中的所有节点:

代码语言:javascript复制
crsctl enable crs
crsctl start crs

6.如果需要去除旧接口卡信息:

代码语言:javascript复制
oifcfg getif
oifcfg delif-global eth1/192.168.2.0

例如:

代码语言:javascript复制
[root@raclhr-11gR2-N1 admin]# oifcfg getif
eth1  192.168.2.0  global  cluster_interconnect
eth2  192.168.159.0  global  public
eth3  192.168.102.0  global  cluster_interconnect
[root@raclhr-11gR2-N1 admin]# oifcfg delif -global eth1/192.168.2.0
[root@raclhr-11gR2-N1 admin]# oifcfg getif
eth2  192.168.159.0  global  public
eth3  192.168.102.0  global  cluster_interconnect

7.在OS层删除旧网卡。

& 说明:

有关RAC中修改IP地址的更多内容可以参考:https://ke.qq.com/course/316312?tuin=26507979、http://blog.itpub.net/26736162/viewspace-2157362/、http://blog.itpub.net/26736162/viewspace-2157364/、http://blog.itpub.net/26736162/viewspace-2157372/

本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

---------------优质麦课------------

详细内容可以添加麦老师微信或QQ私聊。

About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● QQ:646634621 QQ群:618766405

● 提供OCP、OCM和高可用部分最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

0 人点赞