ข้ามไปยังเนื้อหา

บทความ

อัปเกรดแบบ rolling ของ Couchbase Server ภายใต้ CAO (paced + ประตู pause)

Runbook คัดลอก/วางสำหรับทีมซัพพอร์ตและ SRE: preflight, swap-rebalance ทีละโหนด, กลยุทธ์ XDCR, ทริกเกอร์ rollback และการตรวจ sign-off

  • อ่าน 1 นาที
  • ฐานข้อมูล
  • Kubernetes
  • DevOps
  • SRE

อัปเกรดคือจุดที่ความน่าเชื่อถือของฐานข้อมูลถูกพิสูจน์หรือพัง บทความนี้ให้ runbook แบบควบคุมจังหวะ ที่เป็นมิตรกับซัพพอร์ต สำหรับอัปเกรด Couchbase Server ภายใต้ Couchbase Autonomous Operator (CAO) โดยใช้ฟิลด์เนทีฟ spec.paused เพื่อเกตความคืบระหว่างโหนด ผลลัพธ์: ทีละโหนด หน้าต่างเสถียรระหว่าง swap สัญญาณชัดขึ้น และหน้าต่าง rollback กว้างขึ้น

โทโพโลยีอ้างอิง

โทโพโลยี Couchbase บน AKS ทั่วไป

ลูปอัปเกรดแบบ paced

ลูปอัปเกรดแบบ paced

เป้าหมาย

  • อัปเกรด Couchbase Server ด้วยความเสี่ยงต่ำสุด
  • คงหน้าต่างpause + ทำให้เสถียร + ตรวจสุขภาพระหว่างโหนดอย่างตั้งใจ
  • รักษาตัวเลือกรollbackให้นานที่สุดตามที่เป็นไปได้

เช็คลิสต์ก่อนอัปเกรด (ห้ามข้าม)

  • เขียวทั้งหมด: เฟสคลัสเตอร์ Available ไม่มี rebalance ที่กำลังทำงาน ไม่มี Warning events
  • แบ็กอัปปัจจุบันและกู้คืนได้: แบ็กอัปเต็มเสร็จ; ซ้อมกู้คืนแล้วหรือเข้าใจเวลา
  • บันทึกแท็ก rollback: ตรวจว่าอิมเมจเก่ายังอยู่และดึงได้
  • บันทึกการตัดสินใจ XDCR: ปิดระหว่างอัปเกรดโปรดักชันเพื่อสัญญาณสะอาด (แนะนำ) หรือเปิดไว้ใน pre-prod เพื่อฝึกพฤติกรรม

คำสั่งตรวจยืนยันด่วน

export ENV=dev
export REGION=west
export NS=couchbase-${ENV}-${REGION}

kubectl -n "$NS" get couchbasecluster -o wide
kubectl -n "$NS" get pods -l app=couchbase
kubectl -n "$NS" get events --field-selector type=Warning | tail -20
kubectl -n "$NS" get couchbasecluster "$NS" -o jsonpath='paused={.spec.paused} phase={.status.phase} rebalance={.status.rebalanceProgress}{"\n"}'

เส้นทางดำเนินการ

  • ที่แนะนำ: รันอัปเกรดจาก CI workflow (dry-run ก่อน แล้วค่อยจริง)
  • ทางสำรอง: รันสคริปต์อัปเกรดแบบ paced จาก workstation (dry-run ก่อน แล้วค่อยจริง)

สัญญาณมอนิเตอร์ (ซัพพอร์ตควรดูอะไร)

  • อิมเมจพอด: เปลี่ยนจากเก่า → ใหม่; หนึ่ง swap ต่อครั้งคืออุดมคติ
  • สถานะ pause: spec.paused เป็น true ระหว่างเสถียร; อย่าปล่อย true โดยไม่มีคนเฝ้า
  • Rebalance: กลับเป็น none ระหว่าง swap; สอบสวน rebalance ค้าง
  • XDCR: changes_left พุ่งตอน rebalance และลดตอนเสถียร; ไม่ลดคือสัญญาณเหตุการณ์
  • รีสตาร์ต: รีสตาร์ตที่ไม่คาดคิดหลัง swap คือธงแดง

ทริกเกอร์ rollback

  • โหนดไม่ healthy ภายในหน้าต่าง timeout
  • Rebalance ล้มเหลวและแก้ไม่ได้ด้วย retry ครั้งเดียวหลังสอบสวน
  • อัตราผิดพลาดของแอปเกินความทนทานที่ตกลง
  • XDCR ไม่ฟื้นภายในหน้าต่าง recovery ที่ตกลง
  • bucket ใด ๆ ไม่พร้อมใช้ (vbuckets หาย) — ถือเป็น P1

การตรวจหลังอัปเกรด (sign-off)

  • พอดทั้งหมดใช้อิมเมจเป้าหมาย
  • เฟสคลัสเตอร์ Available
  • ไม่มี Warning events ใหม่เป็นเวลา 30+ นาที
  • แบ็กอัปสำเร็จหลังอัปเกรด
  • XDCR กลับสู่ steady-state (ถ้าใช้)
  • แดชบอร์ดแอปเขียวต่อเนื่อง 30+ นาที

ทิป: ถ้าต้องการเวอร์ชันเล่าเรื่องสั้นก่อน เริ่มจากสรุปบล็อก: อัปเกรด Couchbase ด้วยประตู pause ของ CAO