Oracle 11g RAC 修改各類IP地址
首先,我們都知道Oracle 11g RAC中的IP主要有:Public IP、VIP、SCAN VIP、Private IP這幾種。
一般這類改IP地址或者網卡名稱的需求主要場景有:
機房搬遷網絡變更、系統上線由測試IP更改為生產IP、系統層面雙網卡綁定或者解綁等。
我這里實驗環境的需求是:
之前在Virtual Box虛擬化環境建設的Oracle 11g RAC,最初選擇的公有網絡網卡類型是“僅主機(host-only)適配器”模式的,這種模式不會受到外界網絡影響。但是現在有局域網絡其他機器訪問這個環境的需求,所以需要將公有網絡網卡的類型修改為“橋接網卡”模式,並修改對應的IP地址為局域網網段的。實際上private IP並沒有必要去修改,但為了演示修改private IP的過程,也做了修改。
原Oracle 11g RAC IP信息如下:
#public ip
192.168.56.150 jyrac1
192.168.56.152 jyrac2
#private ip
10.10.10.11 jyrac1-priv
10.10.10.12 jyrac2-priv
#virtual ip
192.168.56.151 jyrac1-vip
192.168.56.153 jyrac2-vip
#scan ip
192.168.56.160 jyrac-scan
現在根據需求,最終需要修改為:
#public ip
192.168.1.50 jyrac1
192.168.1.52 jyrac2
#private ip
10.10.10.50 jyrac1-priv
10.10.10.52 jyrac2-priv
#virtual ip
192.168.1.51 jyrac1-vip
192.168.1.53 jyrac2-vip
#scan ip
192.168.1.60 jyrac-scan
主要實施步驟如下:
- 1.正常關庫、監聽和CRS
- 2.修改/etc/hosts配置文件
- 3.OS層修改公有網卡地址
- 4.啟動crs
- 5.修改Public IP,VIP,SCAN VIP
- 6.修改Private IP
- Reference
1.正常關庫、監聽和CRS
這里先正常immediate關閉數據庫,然后關閉監聽,最后關閉兩個節點的crs:[grid@jyrac1 ~]$ srvctl stop database -d jyzhao -o immediate
[grid@jyrac1 ~]$ srvctl stop listener
[grid@jyrac1 ~]$ which crsctl
/opt/app/11.2.0/grid/bin/crsctl
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/crsctl stop crs
[root@jyrac2 ~]# /opt/app/11.2.0/grid/bin/crsctl stop crs
注意:這樣再次啟動crs時,就不會自動啟動監聽和數據庫了。
2.修改/etc/hosts配置文件
根據需求,先備份原來的/etc/hosts文件為/etc/hosts.bak[root@jyrac1 ~]# cp /etc/hosts /etc/hosts.bak
[root@jyrac2 ~]# cp /etc/hosts /etc/hosts.bak
然后再vi修改/etc/hosts文件:
將public ip、vip、scan vip修改為如下值:
#public ip
192.168.1.50 jyrac1
192.168.1.52 jyrac2
#virtual ip
192.168.1.51 jyrac1-vip
192.168.1.53 jyrac2-vip
#scan ip
192.168.1.60 jyrac-scan
注意:其他內容不變。關於private ip,等后面修改private ip的時候再一起改。
3.OS層修改公有網卡地址
這部分正常實施應由SA來做,我這里是自己的實驗環境,所以此步驟過程僅供參考:3.1 確認之前的公網網卡信息(這里省略了無關網卡信息輸出):
[root@jyrac1 ~]# ifconfig -a
eth2 Link encap:Ethernet HWaddr 08:00:27:95:22:E3
inet addr:192.168.56.150 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe95:22e3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3549 errors:0 dropped:0 overruns:0 frame:0
TX packets:3378 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:396404 (387.1 KiB) TX bytes:824575 (805.2 KiB)
[root@jyrac2 etc]# ifconfig -a
eth2 Link encap:Ethernet HWaddr 08:00:27:1A:5A:7A
inet addr:192.168.56.152 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe1a:5a7a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2353 errors:0 dropped:0 overruns:0 frame:0
TX packets:2188 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:292753 (285.8 KiB) TX bytes:306602 (299.4 KiB)
3.2 修改虛擬環境的網卡連接方式
按照本次需求,需要在virtual box虛擬機那里將連接方式由“僅主機(host-only)適配器”修改為“橋接網卡”。
3.3 修改Public IP地址
由於已經無法連接,需要到virt box虛擬機管理界面進行主機的對應網卡IP地址修改,之后重新啟動對應的網卡。
主要命令如下:
vi /etc/sysconfig/network-scripts/ifcfg-eth2
ifdown eth2
ifup eth2
ifconfig eth2
ping 192.168.1.50
ping 192.168.1.52
以節點1為例,修改后的網卡信息:
[root@jyrac1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.50
NETMASK=255.255.255.0
[root@jyrac1 ~]# ifconfig eth2
eth2 Link encap:Ethernet HWaddr 08:00:27:95:22:E3
inet addr:192.168.1.50 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe95:22e3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3998 errors:0 dropped:0 overruns:0 frame:0
TX packets:3594 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:440406 (430.0 KiB) TX bytes:861230 (841.0 KiB)
最終使用局域網其他機器配置CRT連接到新修改的IP地址,結果可以正常連接,確認到此主機的Public IP地址在主機層面已經修改完畢。
4.啟動crs
crsctl start crs[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/crsctl start crs
[root@jyrac2 ~]# /opt/app/11.2.0/grid/bin/crsctl start crs
注意:這里如果是按照我上面關閉crs的操作,正常數據庫和監聽是沒有啟動的,對應target和state都應該是offline:
ora.LISTENER.lsnr
OFFLINE OFFLINE jyrac1
OFFLINE OFFLINE jyrac2
ora.jyzhao.db
1 OFFLINE OFFLINE Instance Shutdown
2 OFFLINE OFFLINE Instance Shutdown
5.修改Public IP,VIP,SCAN VIP
5.1 修改Public IP
--查看當前設定:
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/oifcfg getif
eth2 192.168.56.0 global public
eth3 10.10.10.0 global cluster_interconnect
--刪除舊值並設定新值
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/oifcfg delif -global eth2
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/oifcfg setif -global eth2/192.168.1.0:public
--查看驗證修改成功:
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/oifcfg getif
eth3 10.10.10.0 global cluster_interconnect
eth2 192.168.1.0 global public
[root@jyrac2 ~]# /opt/app/11.2.0/grid/bin/oifcfg getif
eth3 10.10.10.0 global cluster_interconnect
eth2 192.168.1.0 global public
5.2 修改VIP
需要停止數據庫、監聽和VIP,如果按照之前操作,目前數據庫和監聽已經是停止狀態。
[grid@jyrac1 ~]$ srvctl stop vip -n jyrac1
[grid@jyrac1 ~]$ srvctl stop vip -n jyrac2
查看VIP當前設置:
[grid@jyrac1 ~]$ olsnodes -s
jyrac1 Active
jyrac2 Active
[grid@jyrac1 ~]$ srvctl config vip -n jyrac1
VIP exists: /jyrac1-vip/192.168.1.51/192.168.56.0/255.255.255.0/eth2, hosting node jyrac1
[grid@jyrac1 ~]$ srvctl config vip -n jyrac2
VIP exists: /jyrac2-vip/192.168.1.53/192.168.56.0/255.255.255.0/eth2, hosting node jyrac2
修改VIP設置:
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/srvctl modify nodeapps -n jyrac1 -A 192.168.1.51/255.255.255.0/eth2
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/srvctl modify nodeapps -n jyrac2 -A 192.168.1.53/255.255.255.0/eth2
再次驗證VIP修改完成:
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/srvctl config vip -n jyrac1
VIP exists: /jyrac1-vip/192.168.1.51/192.168.1.0/255.255.255.0/eth2, hosting node jyrac1
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/srvctl config vip -n jyrac2
VIP exists: /jyrac2-vip/192.168.1.53/192.168.1.0/255.255.255.0/eth2, hosting node jyrac2
啟動vip
[grid@jyrac1 ~]$ srvctl start vip -n jyrac1
[grid@jyrac1 ~]$ srvctl start vip -n jyrac2
啟動監聽:
[grid@jyrac1 ~]$ srvctl start listener
啟動數據庫:
[grid@jyrac1 ~]$ srvctl start database -d jyzhao
確認local_listener信息:
檢查local_listener信息,如果不正確需要修改,我這里查詢是正確的。
--兩個節點分別確認:
show parameter local_listener
--修改:
alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.51)(PORT=1521))' sid='jyzhao1';
alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.53)(PORT=1521))' sid='jyzhao2';
5.3 修改SCAN VIP
查看SCAN VIP當前設置:
[grid@jyrac1 ~]$ srvctl config scan
SCAN name: jyrac-scan, Network: 1/192.168.1.0/255.255.255.0/eth2
SCAN VIP name: scan1, IP: /jyrac-scan/192.168.56.160
停止scan_listener和scan資源
[grid@jyrac1 ~]$ srvctl stop scan_listener
[grid@jyrac1 ~]$ srvctl stop scan
--確認已停止
[grid@jyrac1 ~]$ srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is not running
[grid@jyrac1 ~]$ srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is not running
使用root用戶修改SCAN VIP
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/srvctl modify scan -n jyrac-scan
注意:root用戶執行修改,且確認/etc/hosts映射關系已修改為新的scan VIP。
修改並啟動資源
[grid@jyrac1 ~]$ srvctl modify scan_listener -u
[grid@jyrac1 ~]$ srvctl start scan_listener
注意:執行后確認scan_listener和scan都已經啟動。
確認修改成功
[grid@jyrac1 ~]$ srvctl config scan
SCAN name: jyrac-scan, Network: 1/192.168.1.0/255.255.255.0/eth2
SCAN VIP name: scan1, IP: /jyrac-scan/192.168.1.60
[grid@jyrac1 ~]$ srvctl config scan_listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
查看整個集群狀態正常:
[grid@jyrac1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA1.dg
ONLINE ONLINE jyrac1
ONLINE ONLINE jyrac2
ora.FRA1.dg
ONLINE ONLINE jyrac1
ONLINE ONLINE jyrac2
ora.LISTENER.lsnr
ONLINE ONLINE jyrac1
ONLINE ONLINE jyrac2
ora.OCR1.dg
ONLINE ONLINE jyrac1
ONLINE ONLINE jyrac2
ora.asm
ONLINE ONLINE jyrac1 Started
ONLINE ONLINE jyrac2 Started
ora.gsd
OFFLINE OFFLINE jyrac1
OFFLINE OFFLINE jyrac2
ora.net1.network
ONLINE ONLINE jyrac1
ONLINE ONLINE jyrac2
ora.ons
ONLINE ONLINE jyrac1
ONLINE ONLINE jyrac2
ora.registry.acfs
ONLINE ONLINE jyrac1
ONLINE ONLINE jyrac2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE jyrac1
ora.cvu
1 ONLINE ONLINE jyrac2
ora.jyrac1.vip
1 ONLINE ONLINE jyrac1
ora.jyrac2.vip
1 ONLINE ONLINE jyrac2
ora.jyzhao.db
1 ONLINE ONLINE jyrac1 Open
2 ONLINE ONLINE jyrac2 Open
ora.oc4j
1 ONLINE ONLINE jyrac1
ora.scan1.vip
1 ONLINE ONLINE jyrac1
至此,修改Oracle 11g RAC的public IP、VIP、SCAN VIP就算完成了。
6.修改Private IP
因為很少會遇到修改Private IP的需求,所以將其獨立成一節。6.1 備份並確認CRS集群正常
從Oracle 11.2 GI開始,私有網絡配置不僅僅存在ocr中,還存在gpnp profile中,所以首先需要備份profile.xml
--MOS上的說明:
Please take a backup of profile.xml on all cluster nodes before proceeding, as grid user:
$ cd $GRID_HOME/gpnp/
$ cp -p profile.xml profile.xml.bk
--節點1備份:
[grid@jyrac1 ~]$ cd /opt/app/11.2.0/grid/gpnp/jyrac1/profiles/peer/
[grid@jyrac1 peer]$ cp -p profile.xml profile.xml.bk
--節點2備份:
[grid@jyrac2 ~]$ cd /opt/app/11.2.0/grid/gpnp/jyrac2/profiles/peer/
[grid@jyrac2 peer]$ cp -p profile.xml profile.xml.bk
確認CRS集群在各節點啟動:
[grid@jyrac1 ~]$ olsnodes -s
jyrac1 Active
jyrac2 Active
6.2 設定新的私網信息
oifcfg getif
oifcfg setif -global
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/oifcfg getif
eth3 10.10.10.0 global cluster_interconnect
eth2 192.168.1.0 global public
這里私網網段沒有變化,不用修改。
6.3 root用戶在所有節點關閉並禁用集群
crsctl stop crs
crsctl disable crs
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/crsctl stop crs
[root@jyrac2 ~]# /opt/app/11.2.0/grid/bin/crsctl stop crs
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/crsctl disable crs
[root@jyrac2 ~]# /opt/app/11.2.0/grid/bin/crsctl disable crs
6.4 OS層修改私有網卡地址
ifconfig -a
ping
修改私有網卡IP並重啟:
[root@jyrac1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth3
[root@jyrac1 ~]# ifdown eth3
[root@jyrac1 ~]# ifup eth3
vi /etc/hosts 修改private ip部分為:
#private ip
10.10.10.50 jyrac1-priv
10.10.10.52 jyrac2-priv
6.5 root用戶在所有節點啟用並啟動集群
crsctl enable crs
crsctl start crs
root用戶在所有節點啟用並啟動集群:
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/crsctl enable crs
[root@jyrac2 ~]# /opt/app/11.2.0/grid/bin/crsctl enable crs
[root@jyrac1 ~]# /opt/app/11.2.0/grid/bin/crsctl start crs
[root@jyrac2 ~]# /opt/app/11.2.0/grid/bin/crsctl start crs
6.6 刪除舊值
$ oifcfg delif -global <if_name>[/
這里因為還是用的之前的網段,不需要操作。
檢查集群狀態,測試應用連接,一切正常。
至此,所有工作已經完成,不但完整學習了Oracle 11g RAC各種IP的修改,而且局域網其他機器也可以愉快的訪問到這個測試環境進行測試了,提高了我的工作效率,真是一舉兩得_。
