【博客文章2023】在线把基于DNS的RAC集群改为基于GNS的RAC集群 Author: Bo Tang
1. 操作原理和步骤概览:
以下操作步骤适用于Oracle Database 12.2.0/18c/19c。操作在一套基于DNS的MAA双集群中进行,参与的4台主机分别是:station3(192.168.0.3),station4(192.168.0.4),station5(192.168.0.5)和station6(192.168.0.6)。 前台业务0暂停地将基于DNS的RAC集群改为基于GNS的RAC集群,操作开始前的DNS集群的基本情况如下:
操作结束后的GNS集群的基本情况如下:
2. 操作准备:
以grid用户检查RAC集群:
以grid用户检查DNS代理子域给GNS是否配置好:首先查看一下DNS服务器的正向域配置文件example.com.zone:
; Specify the time-to-live( TTL ) for the zone $TTL 86400 ; 1 Day ( we could have used 1D )
; Begin Start Of Authority resource record
example.com. IN SOA server1.example.com. root.server1.example.com. (
2003040100 ; serial number
1H ; refresh slave
5M ; retry query
1W ; expire
1M ; negative TTL
)
; Specify our name servers
; !!WARNING: You can not use CNAMEs for RDATA here !!
; owner TTL CL type RDATA
@ IN NS server1.example.com.
; Specify our mail exchangers
; !!WARNING: You can not use CNAMEs for RDATA here !!
; owner TTL CL type RDATA
@ IN MX 10 server1.example.com.
; This is broken and against RFC but must be done to placate the masses
; owner TTL CL type RDATA
example.com. IN A 192.168.0.254
; List our CNAME records ( aliases ) here
; owner TTL CL type RDATA
mail.example.com. 3600 IN CNAME server1.example.com.
kerberos.example.com. 3600 IN CNAME server1.example.com.
; List our A records ( hosts ) here
; owner TTL CL type RDATA
server1.example.com. IN A 192.168.0.254
station3 IN A 192.168.0.3
station4 IN A 192.168.0.4
station5 IN A 192.168.0.5
station6 IN A 192.168.0.6 ; 必须注释掉所有DNS里头的scan配置
; scan3 IN A 192.168.0.103
; scan3 IN A 192.168.0.104
; scan3 IN A 192.168.0.153
; scan5 IN A 192.168.0.105
; scan5 IN A 192.168.0.106
; scan5 IN A 192.168.0.155
gns.cluster3.example.com. IN A 192.168.0.154
gns.cluster5.example.com. IN A 192.168.0.156
cluster3.example.com. IN NS gns.cluster3.example.com.
cluster5.example.com. IN NS gns.cluster5.example.com. |
其次查看一下DNS服务器的反向域配置文件192.168.0..zone:
两个域名zone文件中,蓝色的部分支持基于DNS的集群,红色的部分支持转换之后的GNS集群。 如果报告/var/tmp下面存在socket或者grid infrastructure的ORACLE_HOME没有写权限这样的错误。可以忽略。3. 操作:
在开始操作前,建议删除dataguard broker配置,如果有的话。 以root用户使用srvctl命令配置GNS资源,-domain填写的是DNS代理给GNS负责解析的域名,-vip是GNS服务器的地址:
以上的命令中的-domain取值为GNS的代理子域。举例:如果最终GNS解析的域名为cluster3.example.com,那么-domain的取值就是example.com。特别注意-doamin不能写成cluster3.example.com,否则最后的vip和scan都会变成:vip.cluster3.cluster3.example.com或scan.cluster3.cluster3.example.com。也就是说cluster的名字是GNS规则自动添加的。 station3以root用户启动GNS:
station5以root用户启动GNS:
由于还没有完全转变成VIP由DHCP获取的状态,所以VIP仍然是由/etc/hosts来手工指定。目前需要改动CRS来支持混合的静态和动态DHCP的网络地址模式,station3以root用户执行:
station5以root用户执行:
此时SCAN-VIP已经从dhcp服务器获得,并启动;而VIP仍然由手工设定。 4. 操作后的检查: 由于集群做了相应的改动,需要使用grid用户再次检查集群。查看其是否在启用GNS:
5. 最后的操作: 以root用户在station3上配置的VIP:
#srvctl stop vip -n station3 -force
#srvctl modify vip -n station3 -address station3-vip.cluster3.example.com/255.255.255.0
#srvctl start vip -n station3 #srvctl stop vip -n station4 -force
#srvctl modify vip -n station4 -address station4-vip.cluster3.example.com/255.255.255.0
#srvctl start vip -n station4 |
以root用户在station5上配置的VIP: 继续之前,尤其重要的是:四个节点都要修改/etc/hosts,把所有vip的声明都注释掉。 以root用户在station3上更新GNS解析的SCAN名字:
以root用户在station5上更新GNS解析的SCAN名字: 以root用户在station3上把网络改成完全由DHCP来获取VIP和SCAN-VIP:
以root用户在station5上把网络改成完全由DHCP来获取VIP和SCAN-VIP:
最后还要修改RAC数据库的remote_listener参数,以反映新的scan的名字。不要去管RAC数据库的local_listener参数。 |