【RAC】如何修改vip 或者vip 对应的hostname

      在oracle 10g 和 11g 的Clusterware 环境中,客户端使用vip(Virtual IP)来连接数据库,客户端应用程序通过vip访问对应的节点上的数据库实例。每个节点都要有一个vip,这些vip是静态的ip地址,必须与公共网络属于同一个子网。每一个vip也要对应一个主机名,而且对于客户端来说,这个主机名应该能够被解析为VIP.VIP通过DNS,/etc/hosts文件来解析(11GR2 可以使用GNS),在安装GI软件时候,会提示为每一个节点填写对应的VIP和VIP对应的hostname,vip信息会存储在OCR和HA架构相关的组件中。
    通常来说,VIP的修改需要在规定的时间窗口内,cluster 停止服务。然而对于某种情况下,是不需要停机时间,比如只是修改一个节点的vip维护操作只要在那个节点上就可以了,而不必停止整个cluster。
从10.2.0.3 以来,oracle 去除了ASM/DATABSE对vip的依赖关系,这样对vip的修改可以在不必停止ASM/DATABASE实例的情况下进行,需要做的仅仅是与这个节点连接的客户端受到影响。
实验环境:
版本:
Clusterware :11.2.0.2
database    :11.2.0.1
修改vip的操作步骤:
旧vip:
10.10.10.201 rac1-vip
10.10.10.202 rac2-vip
新vip:
10.250.7.111  rac1-vip
10.250.7.112  rac2-vip 

子网 10.250.7.0
掩码 255.255.255.0
1 确定vip
对于 10g and 11gR1, 以CRS的属主:
$ srvctl config nodeapps -n -a
比如:
$ srvctl config nodeapps -n racnode1 -a
VIP exists.: /racnode1-vip/101.17.80.184/255.255.254.0/eth1
对于 11gR2, 以Grid 属主:
$ srvctl config nodeapps -a
grid@rac1:/home/grid>srvctl config nodeapps -a   
网络存在: 1/10.250.7.0/255.255.255.0/eth0, 类型 static
VIP 存在: /rac1-vip/10.10.10.201/10.250.7.0/255.255.255.0/eth0, 托管节点 rac1
VIP 存在: /rac2-vip/10.10.10.202/10.250.7.0/255.255.255.0/eth0, 托管节点 rac2
2. 确定VIP的状态
grid@rac1:/home/grid>crs_stat -t  | grep vip                  
Name           Type           Target    State     Host        
------------------------------------------------------------  
ora.rac1.vip   ora....t1.type ONLINE    ONLINE    rac1        
ora.rac2.vip   ora....t1.type ONLINE    ONLINE    rac2        
ora.scan1.vip  ora....ip.type ONLINE    ONLINE    rac1  
grid@rac1:ifconfig -a
.....省略.....
eth0:2    Link encap:Ethernet  HWaddr 00:50:56:8F:25:0A  
          inet addr:10.10.10.201  Bcast:10.250.7.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Base address:0x2400 Memory:d8960000-d8980000 
.....省略.....
Stopping Resources
3. 停止nodeapps资源和所有依赖于VIP的资源(如果有计划的中断所有服务,则停止ASM/DB 实例)
10g and 11gR1,以CRS的属主:
$ srvctl stop asm -n
$ srvctl stop instance -d -i
$ srvctl stop nodeapps -n
比如:
$ srvctl stop asm -n racnode1
$ srvctl stop instance -d RACDB -i RACDB1
$ srvctl stop nodeapps -n racnode1
11gR2,以Grid属主:
$ srvctl stop instance -d -n
$ srvctl stop vip -n -f
grid@rac1:srvctl stop  database -d rac -o immediate
PRCD-1027 : 无法检索数据库 rac
PRCD-1229 : 尝试访问数据库 rac 的配置时被拒绝, 因为其版本 11.2.0.1.0 不同于程序版本 11.2.0.2.0。请改从 /opt/rac/oracle/11.2.0/dbs 运行程序。
oracle@rac1:/home/oracle>srvctl stop  database -d rac -o immediate
grid@rac1:/home/grid>srvctl stop vip -n rac1 -f  -v  
已成功停止 VIP。       
grid@rac1:/home/grid>srvctl stop vip -n rac2 -f  -v  
已成功停止 VIP。
Note: 在 11GR2版本中,-f选项是必须的,否则会报如下错误:
PRCR-1014 : Failed to stop resource ora.rac1.vip
PRCR-1065 : Failed to stop resource ora.rac1.vip
CRS-2529: Unable to act on 'ora.rac1.vip' because that would require stopping or relocating 'ora.LISTENER.lsnr', but the force option was not specified
...
grid@rac1:/home/grid>srvctl stop listener -n rac1 
PRCC-1017 : LISTENER 已在 rac1 上停止
PRCR-1005 : 资源 ora.LISTENER.lsnr 已停止
grid@rac1:/home/grid>srvctl stop listener -n rac2 
PRCC-1017 : LISTENER 已在 rac2 上停止
PRCR-1005 : 资源 ora.LISTENER.lsnr 已停止
为了防止变更未被确认,而asm 或者db 实例的自动启动,需要将此自动重启功能暂时禁用。
$ srvctl disable database -d
$ srvctl disable asm -n  (对于11.2 版本之前的)
$ srvctl disable nodeapps  (使用与 11.2 版本以后的)
而我执行srvctl disable nodeapps命令时遇到如下情况(因为vip服务已经停止了)。不会影响最终的操作。
grid@rac1:/home/grid>srvctl disable nodeapps
PRKO-2409 : GSD 已在节点上禁用: rac1,rac2
PRCR-1071 : 无法注册或更新 资源 ora.rac1.vip
CRS-0245:  User doesn't have enough privilege to perform. the operation
PRCR-1071 : 无法注册或更新 资源 ora.net1.network
CRS-0245:  User doesn't have enough privilege to perform. the operation
4.确认VIP是否已经offline,并且不再绑定到公共网卡上:
grid@rac1:/home/grid>crs_stat -t | grep vip         
ora.rac1.vip   ora....t1.type OFFLINE   OFFLINE               
ora.rac2.vip   ora....t1.type OFFLINE   OFFLINE               
ora.scan1.vip  ora....ip.type ONLINE    ONLINE    rac1   
使用 ifconfig -a
5 修改VIP和对应的属性值,确保先在OS上做相应的变更 比如/etc/hosts 或者DNS。如果网卡改变了,先确保新的网卡可用。
旧vip:
10.10.10.201  rac1-vip
10.10.10.202  rac2-vip
新vip
10.250.7.111  rac1-vip
10.250.7.112  rac2-vip 
子网 10.250.7.0
掩码 255.255.255.0
6. 修改VIP资源
以root用户执行如下命令:
[root@rac1 ~]# /opt/11202/11.2.0/grid/bin/srvctl  modify nodeapps -n rac1 -A rac1-vip/255.255.255.0/eth0
[root@rac1 ~]# /opt/11202/11.2.0/grid/bin/srvctl  modify nodeapps -n rac2 -A rac2-vip/255.255.255.0/eth0 

Note 1: 对于windows平台,如果网卡名称有空格,必须使用 ""
比如:
> srvctl modify nodeapps -n racnode1 -A 110.11.70.11/255.255.255.0/"Local Area Connection 1
Note 2: 从 11.2 开始,VIP依赖于network资源(ora.net1.network),OCR 仅仅只是记录VIP 的hostname或者vip 的ip地址。vip的网络属性比如子网和掩码是记录在network资源里的。
From 11.2.0.2起 , 可以使用srvctl modify network  命令修改网络资源信息
grid@rac1:/home/grid>srvctl modify network  -h
修改 Oracle Clusterware 中的网络配置。
用法: srvctl modify network [-k ] [-S /[/if1[|if2...]]] [-w ] [-v]
    -k             网络编号 (默认编号为 1)
    -S //[if1[|if2...]]  网络的 NET 地址说明
    -w        网络类型 (static, dhcp, mixed)
    -h                       输出用法
    -v                       详细输出
以root用户:
# srvctl modify network -k 1 -S 110.11.70.0/255.255.255.0/eth2
7. 确认变更:
grid@rac1:/home/grid>srvctl config nodeapps -a
网络存在: 1/10.250.7.0/255.255.255.0/eth0, 类型 static
VIP 存在: /rac1-vip/10.250.7.111/10.250.7.0/255.255.255.0/eth0, 托管节点 rac1
VIP 存在: /rac2-vip/10.250.7.112/10.250.7.0/255.255.255.0/eth0, 托管节点 rac2

8. 重新启动nodeapps资源和相关依赖资源
grid@rac1:/home/grid>srvctl enable nodeapps
PRKO-2415 : VIP 已在节点上启用: rac1,rac2
PRKO-2416 : 网络资源已启用。
oracle@rac1:/home/oracle>srvctl enable  database -d rac 
grid@rac1:/home/grid>
grid@rac1:/home/grid>srvctl start listener -n rac2     
grid@rac1:/home/grid>srvctl start listener -n rac1
grid@rac1:/home/grid>
oracle@rac1:/home/oracle>
oracle@rac1:/home/oracle>srvctl start database -d rac
grid@rac1:/home/grid>
9. 查看新的VIP的状态
grid@rac1:/home/grid>crs_stat -t | grep vip         
ora.rac1.vip   ora....t1.type ONLINE    ONLINE    rac1        
ora.rac2.vip   ora....t1.type ONLINE    ONLINE    rac2        
ora.scan1.vip  ora....ip.type ONLINE    ONLINE    rac1        
grid@rac1:/home/grid>
grid@rac1:/home/grid>
grid@rac1:/home/grid>/sbin/ifconfig
eth0      Link encap:Ethernet  HWaddr 00:50:56:8F:25:0A  
          inet addr:10.250.7.225  Bcast:10.250.7.255  Mask:255.255.255.0
          inet6 addr: fe80::250:56ff:fe8f:250a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:560742 errors:0 dropped:0 overruns:0 frame.:0
          TX packets:1472284 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:56118003 (53.5 MiB)  TX bytes:126169027 (120.3 MiB)
          Base address:0x2400 Memory:d8960000-d8980000 

eth0:1    Link encap:Ethernet  HWaddr 00:50:56:8F:25:0A  
          inet addr:10.250.7.210  Bcast:10.250.7.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Base address:0x2400 Memory:d8960000-d8980000 
          
eth0:2    Link encap:Ethernet  HWaddr 00:50:56:8F:25:0A  
          inet addr:10.250.7.111  Bcast:10.250.7.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Base address:0x2400 Memory:d8960000-d8980000 
          
eth1      Link encap:Ethernet  HWaddr 00:50:56:8F:6F:49  
          inet addr:10.10.10.101  Bcast:10.10.10.255  Mask:255.255.255.0
          inet6 addr: fe80::250:56ff:fe8f:6f49/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6842717 errors:0 dropped:0 overruns:0 frame.:0
          TX packets:4120949 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4798726508 (4.4 GiB)  TX bytes:1472194319 (1.3 GiB)
          Base address:0x2440 Memory:d8980000-d89a0000 
eth1:1    Link encap:Ethernet  HWaddr 00:50:56:8F:6F:49  
          inet addr:169.254.51.141  Bcast:169.254.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Base address:0x2440 Memory:d8980000-d89a0000 
grid@rac1:/home/grid>

对于11gR2,只是修改vip的hostname 而不修改其ip地址和vip的其他属性不变:
1.修改VIP 使其指向另一个可用的 hostname,比如rac1
# srvctl modify nodeapps -n racnode1 -A rac2-vip/255.255.255.0/eth2
2.修改 VIP 指定新的hostname
# srvctl modify nodeapps -n racnode1 -A rac1-nvip/255.255.255.0/eth2
3. 确定 USR_ORA_VIP 的值:
# crsctl stat res ora.rac1.vip

上一篇:HyperLedger Fabric超级账本简介(5.2)


下一篇:C# 标签(条码)的打印与设计(一)