設定核心參數後,AlloyDB Omni 就能在處理大量工作負載時,更有效率地使用系統記憶體和 IO 資源。
修課條件
開始之前,請確認 Kubernetes 節點搭載 Linux 核心 6.1 以上版本,特別是支援 MADV_COLLAPSE 和 MADV_POPULATE_WRITE 旗標的核心。如要進一步瞭解這些旗標,請參閱 Linux madwise 說明文件。
將建議的 Kernel 設定套用至 Kubernetes 節點
下表列出執行資料庫叢集 Pod 的 Kubernetes 節點所需的核心參數,以及對應的值:
| 檔案 | 值 |
|---|---|
/sys/kernel/mm/transparent_hugepage/shmem_enabled如要瞭解共用記憶體,請參閱「Transparent Hugepage Support」(透明巨型頁面支援) |
within_size或always |
/proc/sys/vm/max_map_count如要瞭解程序可建立的記憶體對應區域數量,請參閱 /proc/sys/vm 說明文件 |
大於或等於 1073741824 |
如要使用 DaemonSet 設定 Kubernetes 節點的核心參數,請按照下列步驟操作:
按照「為節點新增標籤」一文中的操作說明,為您打算執行資料庫叢集的節點套用標籤。
如要在標示為
LABEL_KEY=LABEL_VALUE的節點上設定核心參數,請建立 DaemonSet:cat << EOF | kubectl apply -f - apiVersion: apps/v1 kind: DaemonSet metadata: name: alloydb-omni-kernel-tuning namespace: DS_NAMESPACE spec: selector: matchLabels: name: alloydb-omni-kernel-tuning template: metadata: labels: name: alloydb-omni-kernel-tuning spec: volumes: - name: host-sys hostPath: path: /sys nodeSelector: LABEL_KEY: "LABEL_VALUE" restartPolicy: Always terminationGracePeriodSeconds: 1 initContainers: - name: enable-thp-mmc image: INIT_IMAGE volumeMounts: - name: host-sys mountPath: /sys securityContext: privileged: true command: ["sh", "-c", "sysctl -w vm.max_map_count=MAX_MAP_COUNT && echo within_size >/sys/kernel/mm/transparent_hugepage/shmem_enabled"] containers: - name: CONTAINER_NAME image: CONTAINER_IMAGE command: ["watch", "-n", "600", "cat", "/sys/kernel/mm/transparent_hugepage/shmem_enabled"] EOF更改下列內容:
DS_NAMESPACE:要部署 DaemonSet 的命名空間,例如default。LABEL_KEY:標籤的 ID,例如workload。LABEL_VALUE:與標籤 ID 相關聯的資料,例如database。INIT_IMAGE:用於 init 容器的映像檔名稱。MAX_MAP_COUNT:程序可建立的記憶體對應區域數量上限,例如1073741824。CONTAINER_NAME:主要容器的名稱,例如main。CONTAINER_IMAGE:主要容器使用的映像檔名稱,例如latest。
部署 DaemonSet 後,如要確認 Kubernetes 叢集中的所有 Pod 都處於
Running狀態,且每個節點都有一個標籤為LABEL_KEY=LABEL_VALUE的 Pod,請使用下列指令:kubectl get pods -l LABEL_KEY=LABEL_VALUE輸出範例如下所示:
NAME READY STATUS RESTARTS AGE alloydb-omni-kernel-tuning-2dkwh 1/1 Running 0 22s alloydb-omni-kernel-tuning-pgkbj 1/1 Running 0 19s如要確認核心旗標已成功套用,請針對部署 DaemonSet 後識別出的每個 Pod,執行下列指令:
kubectl logs POD_NAME將
POD_NAME替換為要檢查記錄檔的 Pod 名稱。輸出內容大致如下:
always [within_size] advise never deny force
使用建議的核心參數,在 Kubernetes 節點上執行資料庫叢集
如要使用建議的核心參數,在 Kubernetes 節點上部署資料庫叢集,請在資料庫叢集資訊清單的下列其中一個區段中,新增 nodeAffinity 區段:
- 主要執行個體:
primarySpec.schedulingConfig - 讀取集區執行個體的
spec.schedulingConfig
nodeaffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: LABEL_KEY
operator: In
values:
- "LABEL_VALUE"
如要進一步瞭解如何在特定 Kubernetes 節點上執行資料庫叢集,請參閱「使用排程功能將節點指派給資料庫叢集」。
確認核心參數已套用
如要確認核心參數已套用至資料庫 Pod,請按照下列步驟操作:
如果已啟用高可用性,也就是
spec.availability.numberOfStandbys設為大於零的值,請確認資料庫自訂資源的「DBCLUSTERPHASE」欄顯示DBClusterReady,且「HAREADYSTATUS」欄顯示True。kubectl get dbcluster -n DBCLUSTER_NAMESPACE DBCLUSTER_NAME更改下列內容:
DBCLUSTER_NAME:要驗證的資料庫叢集名稱。DBCLUSTER_NAMESPACE:資料庫叢集所在的特定命名空間名稱。
輸出內容大致如下:
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE HAREADYSTATUS HAREADYREASON dbcluster-sample 10.29.21.240 Ready DBClusterReady True Ready列出屬於資料庫叢集的 Kubernetes Pod:
kubectl get pods -n DBCLUSTER_NAMESPACE -l alloydbomni.internal.dbadmin.goog/dbcluster=DBCLUSTER_NAME如要檢查共用記憶體資訊,請執行下列指令:
kubectl exec -n DBCLUSTER_NAMESPACE POD_NAME -- grep Shmem /proc/meminfo輸出內容的所有項目都必須包含非零數字。
輸出內容大致如下:
Shmem: 126255872 kB ShmemHugePages: 18403328 kB ShmemPmdMapped: 2961408 kB如果任何項目顯示
0 kB,請重新啟動對應的 Pod:kubectl delete pod -n DBCLUSTER_NAMESPACE POD_NAMEPod 處於
Running狀態後,請重複步驟 1 到 5。