Mới gần đây, tôi đã cố gắng áp dụng Bản cập nhật Patch Set (PSU) mới nhất và tốt nhất cho hệ thống Oracle RAC 2 nút. Mọi thứ diễn ra suôn sẻ trên nút đầu tiên. Tôi đã gặp sự cố khi cố gắng áp dụng PSU cho nút thứ hai. Vấn đề không phải với OPatch hay PSU, mà đúng hơn, tôi thậm chí không thể gỡ bỏ Cơ sở hạ tầng lưới (GI) thành công. Và để làm cho vấn đề tồi tệ hơn, nó cũng sẽ không xuất hiện.
Tôi đã theo dõi sự cố của mình trong Grid Inter Process Communication Daemon (gipcd) Khi phát hành ‘crsctl stop crs’, tôi nhận được thông báo cho biết không thể kết thúc thành công gipcd. Khi bắt đầu GI, khởi động đã cố gắng khởi động gipcd và sau đó nó thoát ra. Tôi đã tìm thấy nhiều bài viết hữu ích về Hỗ trợ Oracle của tôi (MOS) và với các tìm kiếm trên Google. Nhiều tài liệu trong số đó có vẻ đúng với vấn đề của tôi, nhưng tôi không thể khôi phục và chạy GI thành công. Khởi động lại nút cũng không giúp được gì. Phần còn lại của bài viết này có thể giúp ích ngay cả khi vấn đề của bạn không phải do gipcd, đó chỉ là điểm mấu chốt đối với tôi.
Vì vậy, vào thời điểm này, tôi đã có một quyết định phải thực hiện. Tôi có thể gửi Yêu cầu dịch vụ (SR) trên MOS. Hoặc tôi có thể "xây dựng lại" nút đó trong cụm. Tôi biết nếu tôi đã nộp SR, tôi sẽ may mắn có được nút hoạt động bất kỳ lúc nào trong tuần tới. Tôi không muốn đợi lâu như vậy và nếu đây là một hệ thống sản xuất, tôi không thể đợi lâu như vậy. Vì vậy, tôi quyết định xây dựng lại nút. Bài đăng trên blog này sẽ trình bày chi tiết các bước tôi đã thực hiện. Ở cấp độ cao, đây là những gì liên quan:
- Xóa nút khỏi cụm
- Dọn dẹp mọi tàn tích GI và RDBMS trên nút đó.
- Thêm nút trở lại cụm.
- Thêm phiên bản và dịch vụ cho nút mới.
- Khởi động phiên bản.
Trong trường hợp có vấn đề, hệ thống này là Oracle 12.1.0.2 (cả GI và RDBMS) chạy trên Oracle Linux 7. Trong ví dụ của tôi, host01 là nút “tốt” và host02 là nút “xấu”. Tên cơ sở dữ liệu là “orcl”. Nếu có thể, lệnh của tôi sẽ có dấu nhắc cho biết nút mà tôi đang chạy lệnh đó từ đó.
Trước tiên, tôi sẽ xóa nút xấu khỏi cụm.
Tôi bắt đầu bằng cách xóa phần mềm RDBMS khỏi kho của nút tốt.
[oracle@host01]$ ./runInstaller -updateNodeList ORACLE_HOME=$RDBMS_HOME "CLUSTER_NODES={host01}" LOCAL_NODE=host01
Sau đó, tôi xóa phần mềm GI khỏi kho.
[oracle@host01]# ./runInstaller -updateNodeList ORACLE_HOME=$GRID_HOME "CLUSTER_NODES={host01}" CRS=TRUE -silent
Bây giờ tôi sẽ xóa nút đó khỏi sổ đăng ký cụm.
[root@host01]# crsctl delete node -n host02
CRS-4661: Node host02 successfully deleted.
Xóa VIP.
[root@host01]# srvctl config vip -node host02 VIP exists: network number 1, hosting node host02 VIP Name: host02-vip VIP IPv4 Address: 192.168.1.101 VIP IPv6 Address: VIP is enabled. VIP is individually enabled on nodes: VIP is individually disabled on nodes: [root@host01]# srvctl stop vip -vip host02-vip -force [root@host01]# srvctl remove vip -vip host02-vip Please confirm that you intend to remove the VIPs host02-vip (y/[n]) y
Sau đó, xóa phiên bản.
[root@host01]# srvctl remove instance -db orcl -instance orcl2 Remove instance from the database orcl? (y/[n]) y
Tại thời điểm này, nút xấu không còn là một phần của cụm, theo quan điểm của nút tốt.
Tiếp theo, tôi sẽ chuyển đến nút bị lỗi và xóa phần mềm cũng như xóa một số tệp cấu hình.
[oracle@host02]$ rm -rf /u01/app/oracle/product/12.1.0.2/ [root@host02 ~]# rm -rf /u01/grid/crs12.1.0.2/* [root@host02 ~]# rm /var/tmp/.oracle/* [oracle@host02]$ /tmp]$ rm -rf /tmp/* [root@host02]# rm /etc/oracle/ocr* [root@host02]# rm /etc/oracle/olr* [root@host02]# rm -rf /pkg/oracle/app/oraInventory [root@host02]# rm -rf /etc/oracle/scls_scr
Tôi đã thực hiện một cách dễ dàng và chỉ cần sử dụng ‘rm’ để xóa phần mềm RDBMS và Grid home. Mọi thứ đã được dọn dẹp sạch sẽ. Nút tốt nghĩ là một phần của một cụm nút đơn và nút xấu thậm chí không biết về cụm. Tiếp theo, tôi sẽ thêm lại nút đó vào cụm. Tôi sẽ sử dụng tiện ích addnode trên host01.
[oracle@host01]$ cd $GRID_HOME/addnode
[oracle@host01]$ ./addnode.sh -ignoreSysPrereqs -ignorePrereq -silent "CLUSTER_NEW_NODES={host02}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={host02-vip}"
Điều này sẽ sao chép nhà GI từ host01 sang host02. Cuối cùng, tôi được nhắc chạy root.sh trên host02. Chạy tập lệnh này sẽ kết nối GI với OCR và đĩa Bầu chọn và hiển thị ngăn xếp phần mềm cụm. Tuy nhiên, tôi cần chạy thêm một quy trình dọn dẹp dưới dạng root trên host02 trước khi có thể tiếp tục.
[root@host02]# cd $GRID_HOME/crs/install
[root@host02]# ./rootcrs.sh -verbose -deconfig -force
Có thể tôi đã chạy phần trên sớm hơn khi dọn dẹp nút. Nhưng đây là nơi tôi thực hiện nó vào lúc này. Bây giờ tôi chạy tập lệnh root.sh theo yêu cầu.
[root@host02]# cd $GRID_HOME
[root@host02]# ./root.sh
Tại thời điểm này, host02 bây giờ là một phần của cụm và GI đang hoạt động. Tôi xác minh bằng “crs_stat -t” và “olsnodes -n”. Tôi cũng kiểm tra VIP.
[root@host02]# srvctl status vip -vip host02-vip VIP host02-vip is enabled VIP host02-vip is running on node: host02
Bây giờ trở lại host01, đã đến lúc sao chép phần mềm RDBMS.
[oracle@host01]$ cd $RDBMS_HOME/addnode
[oracle@host01]$ ./addnode.sh "CLUSTER_NEW_NODES={host02}"
Thao tác này sẽ khởi động OUI. Xem qua trình hướng dẫn để hoàn tất quá trình sao chép.
Bây giờ tôi sẽ thêm lại phiên bản trên nút đó.
[oracle@host01]$ srvctl add instance -db orcl -instance orcl2 -node host02
Nếu mọi thứ diễn ra tốt đẹp, phiên bản sẽ bắt đầu ngay lập tức.
[oracle@host01]$ srvctl start instance -db orcl -instance orcl2
[oracle@host01]$ srvctl status database -d orcl Instance orcl1 is running on node host01 Instance orcl2 is running on node host02
SQL> select inst_id,status from gv$instance;
INST_ID STATUS ---------- ------------ 1 OPEN 2 OPEN
Tuyệt vời! Tất cả những gì còn lại là cấu hình lại và bắt đầu bất kỳ dịch vụ cần thiết nào. Tôi có một cái.
srvctl modify service -db orcl -service hr_svc -modifyconfig -preferred "orcl1,orcl2"
srvctl start service -db orcl -service hr_svc -node host02
srvctl status service -db orcl
Đó là nó. Bây giờ tôi đã có mọi thứ hoạt động.
Hy vọng rằng bài đăng trên blog này đã chỉ ra cách dễ dàng để lấy một nút “xấu” ra khỏi cụm và thêm nó vào lại. Toàn bộ quá trình này mất khoảng 2 giờ để hoàn thành. Nhanh hơn nhiều so với bất kỳ độ phân giải nào tôi từng nhận được từ MOS.
Tôi chưa bao giờ tìm ra nguyên nhân gốc rễ của vấn đề ban đầu của mình. Lấy nút ra khỏi cụm và thêm lại nó đã giúp tôi sao lưu và chạy. Quá trình này sẽ không hoạt động nếu nguyên nhân gốc rễ của sự cố của tôi là do phần cứng hoặc liên quan đến hệ điều hành.
Và phần tốt nhất cho tôi trong tất cả những điều này? Bởi vì host01 đã có PSU áp dụng bo cả các nhà GI và RDBMS, nên việc nhân bản chúng sang host02 có nghĩa là tôi không phải chạy OPatch trên host02. Máy chủ đó đã nhận được bản vá PSU. Tất cả những gì tôi cần làm để hoàn thành bản vá là chạy bản vá dữ liệu dựa trên cơ sở dữ liệu.