Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Cơ Sở Dữ Liệu

Hiểu Về Oracle RAC Node Weighting: Hướng Dẫn Thực Tế

Giới thiệu

Trong môi trường Oracle Real Application Clusters (RAC), tất cả các instance hoặc server giao tiếp với nhau bằng high-speed interconnects (kết nối tốc độ cao) trên private network (mạng riêng). Nếu các instance member trong RAC không thể ping hoặc kết nối với nhau qua private interconnect này, tất cả các server vật lý đang up và running (và database instances trên các server đó) có thể rơi vào trạng thái gọi là split-brain.

Trong Oracle cluster (trước phiên bản Oracle RAC 12c Release 2), khi vấn đề split-brain xảy ra do sự cố network hoặc disk, node có node-number thấp nhất sẽ sống sót trong cluster. Tuy nhiên, với Oracle RAC 12c Release 2 mới nhất, đã có thay đổi trong thuật toán chọn node candidate bị evicted (loại trừ) cho trường hợp cụ thể nơi split-brain dẫn đến tạo ra số node bằng nhau trong sub-cluster.

Bài viết này bao gồm các thay đổi của thuật toán node eviction trong Oracle RAC 12c Release 2 dựa trên tính năng node-weighting mới.

Giới thiệu thuật toán Node Weighting

Hình ảnh minh họa thuật toán Node Weighting trong Oracle
Nguồn: https://goo.gl/images/qarxrq

Node Weighting là tính năng mới giới thiệu với Oracle RAC 12c Release 2 xem xét workload được host trong cluster khi fencing (cách ly). Khi tình huống split-brain xảy ra, Oracle Clusterware áp dụng các quy tắc nhất định để chọn surviving cohort (nhóm sống sót), và hệ thống có thể evict node đang chạy với critical resources (tài nguyên quan trọng). Sử dụng tính năng mới này, chúng ta có thể gán weight (trọng số) cho các node nhất định và cứu node đó khỏi việc bị terminated khỏi cluster.

Một tag mới tạo ra, CSS_CRITICAL, có thể được đặt ở các cấp độ hoặc component khác nhau để đánh dấu chúng là "critical" (quan trọng) để cluster cố gắng bảo toàn chúng trong trường hợp failure. Khi Oracle Clusterware quyết định node nào sẽ evict trong trường hợp split-brain, tag CSS_CRITICAL được tôn trọng miễn là không có lý do kỹ thuật nào khác cản trở sự sống sót của node (node có ít nhất một critical component tại thời điểm failure). Khái niệm này cho phép phần lớn công việc không bị ảnh hưởng, nếu mọi thứ khác bằng nhau.

Các tác vụ của thuật toán Node Weighting

Thuật toán node-weighting thực hiện các tác vụ sau:

  • Gán weight cho database instances hoặc services. Chúng ta có thể đặt -css_critical thành yes với lệnh srvctl add database hoặc srvctl add service khi thêm database instance hoặc service. Chúng ta cũng có thể đặt hoặc thay đổi tham số với srvctl modify database và srvctl modify service.
  • Gán weight cho non ora.* resources. Chúng ta dùng tham số -attr CSS_CRITICAL=yes với lệnh *crsctl add resource* và *crsctl modify resource* khi thêm hoặc sửa đổi resources.
  • Gán weight cho server. Chúng ta đặt tham số -css_critical thành yes với lệnh crsctl set server.

Dưới đây là một số ví dụ gán weight cho database instances hoặc services:

$ srvctl modify database –d <dbname> css_critical yes
$ srvctl modify service –db <dbname> -service <service_name> css_critical yes

Nếu weight không được gán cho resource, thuật toán xem xét các yếu tố sau:

  • Node nào có số lượng services được tạo nhiều nhất?
  • Có singleton services được tạo cho instance không?
  • Node có phải là Flex ASM instance được cấu hình không?
  • Có public network failure không?
  • Loại node là gì - hub hay leaf?

Test Case (Trường hợp kiểm tra)

Đoạn code sau kiểm tra trường hợp bond2 được dùng làm private interconnect cho cluster 2-node.

$ oifcfg getif
bond0 147.167.80.0 global public
bond2 10.168.33.32 global cluster_interconnect
$ olsnodes -s -n
node1 1 Active
node2 2 Active
$ crsctl set server css_critical yes
$ crsctl get server css_critical
CRS-5092: Current value of the server attribute CSS_CRITICAL is yes.
$

Hãy dừng bond2 để mô phỏng communication failure giữa node1 và node2:

# ifdown bond2
$ olsnodes -s -n
node1 1 Active
node2 2 Inactive

Output từ OCSSD.trc

2018-01-09 11:01:21.220 : CSSD:1825834752: clssnmrCheckNodeWeight: node(1) has weight stamp(393228187) pebbles (0) goldstars (0) flags (3) SpoolVersion (0)
2018-01-09 11:01:21.220 : CSSD:1825834752: clssnmrCheckNodeWeight: node(2) has weight stamp(0) pebbles (0) goldstars (0) flags (0) SpoolVersion (0)
2018-01-09 11:01:21.727 : CSSD:1825834752: clssnmrCheckNodeWeight: node(1) has weight stamp(393228187) pebbles (0) goldstars (0) flags (3) SpoolVersion (0)
2018-01-09 11:01:21.727 : CSSD:1825834752: clssnmrCheckNodeWeight: node(2) has weight stamp(0) pebbles (0) goldstars (0) flags (0) SpoolVersion (0)
2018-01-09 11:01:21.727 : CSSD:1825834752: clssnmrCheckNodeWeight: Server pool version not consistent
2018-01-09 11:01:21.727 : CSSD:1825834752: clssnmrCheckNodeWeight: stamp(393228187), completed(1/2)

Kết luận

Bắt đầu từ RAC 12c Release 2, thuật toán mới quyết định node bị evicted hoặc retained (giữ lại) (trong kịch bản split-brain) như sau:

  • Nếu sub-clusters có kích thước khác nhau, chức năng giống như các bản phát hành trước.
  • Nếu tất cả sub-clusters có cùng kích thước, chức năng đã được sửa đổi như sau:
    • Nếu sub-clusters có node weights bằng nhau, sub-cluster có node number thấp nhất sống sót để đảm bảo trong cluster 2-node, node có node number thấp nhất sống sót.
    • Nếu sub-clusters có node weights không bằng nhau, sub-cluster có weight cao hơn sống sót để đảm bảo trong cluster 2-node, node có node number thấp nhất bị evicted do weight thấp hơn.

Sử dụng server weight-based node eviction, chúng ta có thêm kiểm soát hơn trên cơ chế failure recovery của Oracle Clusterware bằng cách chọn cluster nodes nào nên bị terminated hoặc evicted trong sự kiện split-brain. Nếu bạn có bất kỳ câu hỏi hoặc cần hướng dẫn về chủ đề này, bạn có thể thêm bình luận ở ô bên dưới.