Trong môi trường Oracle Real Application Cluster (RAC), tất cả các máy chủ hoặc máy chủ giao tiếp với nhau bằng cách sử dụng kết nối tốc độ cao thông qua mạng riêng. Nếu các thành viên cá thể trong RAC không thể ping hoặc kết nối với nhau thông qua kết nối riêng tư này, tất cả các máy chủ đang hoạt động và thiết lập (và các cá thể cơ sở dữ liệu trên các máy chủ đó) sẽ hoạt động trong một tình trạng được gọi là bộ não phân chia .
Trong một cụm Oracle (trước phiên bản Oracle RAC 12c Release 2), khi sự cố asplit-brain xảy ra do sự cố mạng hoặc đĩa, nút có số nút thấp nhất vẫn tồn tại trong cụm. Tuy nhiên, với Oracle RAC 12cRelease 2 mới nhất, đã có một sự thay đổi trong thuật toán mà theo đó các nút ứng cử viên sẽ bị loại bỏ được chọn cho trường hợp cụ thể mà các kết quả phân tách trong việc tạo ra một số lượng nút bằng nhau trong cụm con. .
Bài đăng trên blog này đề cập đến những thay đổi đối với thuật toán loại bỏ nút trong OracleRAC 12c Release 2 dựa trên tính năng trọng số nút mới.
Giới thiệu về thuật toán trọng số nút
Hình ảnh sau đây minh họa đại số trọng số nút.
Cân bằng nút trong OracleNguồn:https://goo.gl/images/qarxrq
Node Weighting là một tính năng mới được giới thiệu với Oracle RAC 12c Release 2 giúp hiển thị khối lượng công việc được lưu trữ trong một cụm trong quá trình đấu kiếm. Khi xảy ra tình trạng phân tách, Oracle Clusterware áp dụng các quy tắc nhất định để chọn nhóm nghiên cứu và hệ thống có thể loại bỏ một nút đang chạy với các nguồn quan trọng. Sử dụng tính năng mới này, chúng tôi có thể gán trọng số cho các nút nhất định và ngăn nút bị kết thúc khỏi cụm.
Một thẻ mới được tạo, CSS\_CRITICAL
, có thể được đặt ở các cấp độ khác nhau hoặc thành phần đánh dấu chúng là "quan trọng" để cụm cố gắng bảo vệ chúng trong trường hợp xảy ra lỗi. Khi Oracle Clusterware đưa ra quyết định về nút nào sẽ loại bỏ trường hợp não bị tách, CSS_CRITICAL
thẻ được tôn trọng miễn là không có lý do kỹ thuật nào khác cấm sự tồn tại của nút (nơi nút có ít nhất một thành phần quan trọng tại thời điểm bị lỗi). 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 đều bình đẳng.
Nhiệm vụ trọng số nút
Thuật toán trọng số nút thực hiện các tác vụ sau:
- Gán trọng số cho các phiên bản hoặc dịch vụ cơ sở dữ liệu. Chúng ta có thể đặt
-css_critical
thànhyes
với cơ sở dữ liệu thêm srvctl hoặc srvctl thêm dịch vụ lệnh khi chúng ta thêm một phiên bản hoặc dịch vụ cơ sở dữ liệu. Chúng tôi cũng có thể đặt hoặc thay đổi tham số bằng cơ sở dữ liệu sửa đổi srvctl và srvctl sửa đổi dịch vụ lệnh. - Gán trọng số cho các tài nguyên không phải hoặc. *. Chúng tôi sử dụng -attr
CSS_CRITICAL=yes
với các lệnh * crsctl thêm tài nguyên * và * crsctl sửa đổi tài nguyên * khi chúng tôi thêm hoặc sửa đổi tài nguyên. - Gán trọng lượng cho máy chủ. chúng tôi đặt
-css_critical
tham số thànhyes
với máy chủ đặt crsctl lệnh.
Sau đây là một số ví dụ về việc gán trọng số cho các phiên bản hoặc dịch vụ cơ sở dữ liệu:
$srvctl modify database –d <dbname> css\_critical yes
$srvctl modify service –db <dbname> -service <service_name> css_critical yes
Nếu trọng số không được chỉ định cho tài nguyên, thuật toán sẽ kiểm tra các vấn đề sau:
- Nút nào có số lượng dịch vụ tối đa được tạo?
- Các dịch vụ singleton có được tạo cho phiên bản này không?
- Nút có phải là phiên bản Flex ASM được định cấu hình không?
- Có sự cố mạng công cộng không?
- Loại nút - trung tâm hay lá?
Trường hợp thử nghiệm
Đoạn mã sau đây sẽ kiểm tra một trường hợp mà bond2 được sử dụng làm kết nối riêng tư cho một cụm hai nút.
$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 lỗi giao tiếp giữa node1 và node2:
#ifdown bond2
$olsnodes -s -n
node1 1 Active
node2 2 Inactive
Đầu ra 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ừ Phiên bản 2 của RAC 12c, thuật toán mới quyết định các nút được kết hợp hoặc giữ lại (trong kịch bản phân chia não) như sau:
-
Nếu các cụm con có kích thước khác nhau, chức năng giống như trong các bản phát hành trước.
-
Nếu tất cả các cụm con có cùng kích thước, chức năng đã được sửa đổi như sau:
- Nếu các cụm con có trọng số nút bằng nhau, thì cụm con có số nút thấp nhất sẽ tồn tại để đảm bảo rằng, trong một cụm hai nút, nút có số nút thấp nhất vẫn tồn tại.
- Nếu các cụm con có trọng số nút không bằng nhau, thì cụm con có trọng số lớn hơn sẽ tồn tại để đảm bảo rằng, trong một cụm hai nút, nút có số nút thấp nhất sẽ bị loại bỏ do trọng số thấp hơn.
Bằng cách sử dụng loại bỏ nút dựa trên trọng lượng máy chủ, chúng tôi có quyền kiểm soát nhiều hơn đối với cơ chế khôi phục lỗi OracleClusterware bằng cách chọn các nút cụm sẽ được kết thúc hoặc loại bỏ trong trường hợp não bị tách. Nếu bạn có bất kỳ câu hỏi nào hoặc cần hướng dẫn về chủ đề này, bạn có thể thêm nhận xét vào trường bên dưới.