ความแตกต่างของ Cluster mode ใน ElastiCache for Redis
สวัสดีครับ สึคุโบชิ ครับ
ช่วงนี้ผมได้โอกาสจับ ElastiCache for Redis บ่อย และพึ่งจะได้ศึกษาเกี่ยวกับ Cluster mode
เลยจะมาแชร์ความรู้ที่ผมได้ไปศึกษามาให้ทุกคนได้ฟังกันครับ
คำศัพท์ที่เราจะได้เจอใน Cluster mode
ในการจะทำความเข้าใจ Cluster mode จำเป็นต้องทำความเข้าใจคำศัพท์เหล่านี้ก่อนครับ
คำศัพท์ | คำอธิบาย |
---|---|
Redis Cluster | กรุ๊ปที่รวม Shard หนึ่ง หรือ หลาย จำนวน |
Shard | Node group ที่รวม Primary node 1 ตัว + Replica node 0-5 ตัว ใน Redis Cluster จะมีอย่างน้อย 1 Shard |
Primary node | Node ที่สามารถอ่านและเขียนได้ ใน 1 Shard จะถูกสร้างแน่นอน 1 ตัว |
Replica node | Node ที่สามารถอ่านได้ ใน 1 Shard จะสามารถสร้างได้ 0-5 ตัว กรณีที่เปิดการใช้งาน Multi AZ จำเป็นต้องสร้างอย่างน้อย 1 ตัว |
พอเรานำมาเขียนเป็นแผนภาพจะได้ดังนี้ครับ
ในกรณีที่ Off Cluster mode
ในกรณีที่ Off Cluster mode จำนวน Shard จะถูกล็อกให้อยู่ที่ 1 เท่านั้น
นอกจากนี้จะการให้บริการ Enpoint 2 ประเภทคือ Reader Endpoint และ Writer Endpoint สำหรับใช้ Access ไปยัง Redis Cluster
สถานการณ์ที่ควร Off Cluster mode ได้แก่กรณีต่อไปนี้ครับ
1.ต้องการแบ่ง Endpoint ให้เป็น Reader Endpoint และ Writer Endpoint
ในกรณีที่ Off Cluster mode เราจะสามารถแบ่ง Endpoint ให้เป็นส่วนของ Reader และ Writer ได้ครับ
เช่น เรามีแอปพลิเคชันที่จำนวนการอ่านกับ Redis เป็นจำนวนมาก แล้วกังวลว่าจะส่งผลกระทบต่อการประมวลผลการเขียนด้วย เราจึงแบ่ง Endpoint ให้เป็น Reader Endpoint และ Writer Endpoint เพื่อแบ่งการโหลดโดยที่ไม่ต้องเพิ่ม Node ใน Redis Cluster
2.อยากใช้ Redis เวอร์ชั่นที่เก่ากว่า 3.2
Redis เวอร์ชั่นที่เก่ากว่า 3.2 จะไม่รองรับการใช้งาน Cluster mode ครับ
ทำให้หากเราอยากจะใช้ Redis ที่เวอร์ชั่นเก่ากว่า 3.2 จำเป็นต้อง Off Cluster mode ไว้ครับ
2.อยากใช้ฟังก์ชัน AOF(Append-Only File) ของ Redis
Redis จะมีฟังก์ชันที่เรียกว่า "Append-Only File" ที่จะใช้รับประกันความทนทานของข้อมูล
การจะใช้ฟังก์ชันนี้ได้จำเป็นต้อง Off Cluster mode และ ปิดการใช้งาน Multi AZ
นอกจากนี้ AOF ยังไม่รองรับการใช้งานใน Redis ที่เวอร์ชั่นใหม่ว่า 2.8.22 เพราะเวอร์ชั่นใหม่กว่าจะแนะนำให้ใช้ Multi AZ แทน
รายละเอียดเพิ่มเติมเกี่ยวกับ AOF ได้เขียนไว้ใน AWS Official Document แล้ว ใครสนใจก็เข้าไปอ่านกันได้ครับ
ในกรณีที่ On Cluster mode
ในกรณีที่ On Cluster mode เราสามารเพิ่มหรือลดจำนวน Shard node ได้ที่ 1-15 ตัว
และจะมีการให้บิรการแค่ Endpoint เดียวสำหรับการเชื่อมต่อไปยัง Redis Cluster
และหากต้องการ On Cluster mode จำเป็นต้องเปิด Multi AZ ครับ
สถานการณ์ที่ควร On Cluster mode ได้แก่กรณีต่อไปนี้ครับ
1.ต้องการ Scale out node ที่อยู่ใน Redis Cluster
ในกรณีที่คิดว่า การโหลดของ Writer/Reader ที่จะเกิดขึ้นใน Redis มีโอกาสที่จะเพิ่มมากขึ้น แล้วเราต้องการที่จะ Scale out node เราจะ On Cluster mode เพิ่มให้สามารถเพิ่มหรือลดจำนวนของ Shard ได้
โดยเฉพาะ Primary node ที่ไว้สำหรับ Writer จะสามารถสร้างได้ 1 ตัวต่อ 1 Shard เราจึงสามารถ Scale out ได้แค่การเพิ่มจำนวน Shard เท่านั้น
และ Replica node ที่ไว้สำหรับ Reader ก็สามารถสร้างได้มากสุดแค่ 5 ตัวต่อ 1 Shard หากเราต้องการเพิ่มให้มากกว่า 5 ตัว สามารถทำได้แค่การเพิ่มจำนวน Shard เท่านั้น
2.ต้องการลด Downtime ของ Primary node ให้เหลือน้อยที่สุด
Redis Cluster ที่ทำการเปิดการใช้งาน Multi AZ นั้น เมื่อเกิดปัญหาใน AZ ที่ทำให้ Primary node ที่อยู่ใน Shard เกิดการ Down ละก็ ElastiCache จะทำการตรวจจับปัญหานั้นแล้วเลื่อนขั้นให้ Replica node กลายเป็น Primary node เพื่อฟื้นฟู Service ให้กลับมาทำงานได้อย่างปกติ
แต่ว่า หากมี Shard แค่ 1 แล้วเกิดปัญหาใน AZ ล่ะก็ Primary node จะคงสภาพมีอยู่ 0 ตัวจนกว่า จะเลื่อนขั้น Node เสร็จ ทำให้ระหว่างนั้นจะไม่สามารถประมวลผลการเขียนข้อมูลได้
หากเราไม่ต้องการให้เกิดปัญหาเหล่านี้ขึ้น ผมแนะนำให้เรา On Cluster mode และสร้างจำนวน Shard หลายๆตัวไว้ และติดตั้ง Primary node ไว้ในหลายๆ AZ
พอทำเช่นนี้แล้ว จะทำให้สามารถลด Downtime ของ Primary node ให้เหลือน้อยที่สุด เพราะหากเกิดปัญหาใน AZ ทำให้ Primary node ที่อยู่ใน Shard เกิดการ Down เราก็จะยังสามารถใช้ Primary node ตัวอื่นได้อยู่นั่นเอง
ทิ้งท้าย
หวังว่าท่านผู้อื่นจะได้ความรู้เกี่ยวกับการเปิด/ปิด Cluster mode ไปได้ไม่มากก็น้อยกันนะครับ
ซึ่งฟังก์ชันนี้เป็นฟังก์ชันเฉพาะของ Redis ที่ไม่มีใน Service ทำให้หลายคนอาจจะไม่เข้าใจกันได้ยากบ้าง(ผมเองตอนแรกก็งงเหมือนกันครับ)
จึงเขียนบทความนี้ขึ้นมาเพื่อสรุปให้ทุกคนเข้าใจกันได้ง่ายๆนั่นเองครับ
แล้วเจอกันในบทความต่อไป ต้า ครับ สวัสดีครับ
บทความต้นฉบับ
ElastiCache for Redisのクラスターモードについて調べてみる | DevelopersIO
บทความอ้างอิง
- การเชื่อมต่อ ElasticCache จาก EC2 | DevelopersIO
- Amazon ElastiCache คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS ในปี 2022 | DevelopersIO
- Amazon ElastiCache – บริการแคชที่มีการจัดการ – Amazon Web Services
- How to work with Cluster Mode on Amazon ElastiCache for Redis | AWS Database Blog
- Replication: Redis (Cluster Mode Disabled) vs. Redis (Cluster Mode Enabled) - Amazon ElastiCache for Redis