เราประสบปัญหาอย่างต่อเนื่องกับการสลับอินสแตนซ์ ElastiCache Redis ของเรา ดูเหมือนว่า Amazon จะมีการตรวจสอบภายในที่ไม่แน่นอนซึ่งแจ้งให้ทราบถึงการสลับการใช้งานและเพียงแค่รีสตาร์ทอินสแตนซ์ ElastiCache (ดังนั้นจึงสูญเสียรายการแคชทั้งหมดของเรา) นี่คือแผนภูมิของ BytesUsedForCache (สายสีน้ำเงิน) และ SwapUsage (เส้นสีส้ม) ในอินสแตนซ์ ElastiCache ของเราในช่วง 14 วันที่ผ่านมา:
คุณสามารถดูรูปแบบของการใช้งาน swap ที่เพิ่มขึ้นซึ่งดูเหมือนว่าจะกระตุ้นการรีบู๊ตอินสแตนซ์ ElastiCache ของเราซึ่งเราสูญเสียรายการแคชทั้งหมดของเรา (BytesUsedForCache ลดลงเป็น 0)
แท็บ 'เหตุการณ์แคช' ของแดชบอร์ด ElastiCache ของเรามีรายการที่เกี่ยวข้อง:
รหัสที่มา | ประเภท | วันที่ | เหตุการณ์
cache-instance-id | แคชคลัสเตอร์ อ. ก.ย. 22 07:34:47 GMT-400 2015 | โหนดแคช 0001 รีสตาร์ท
cache-instance-id | แคชคลัสเตอร์ อ. ก.ย. 22 07:34:42 GMT-400 2015 | เกิดข้อผิดพลาดในการรีสตาร์ทเอ็นจินแคชในโหนด 0001
cache-instance-id | แคชคลัสเตอร์ อาทิตย์ 20 กันยายน 11:13:05 GMT-400 2015 | โหนดแคช 0001 รีสตาร์ท
cache-instance-id | แคชคลัสเตอร์ พ.ย. 17 22:59:50 GMT-400 2015 | โหนดแคช 0001 รีสตาร์ท
cache-instance-id | แคชคลัสเตอร์ พุธ Sep 16 10:36:52 GMT-400 2015 | โหนดแคช 0001 รีสตาร์ท
cache-instance-id | แคชคลัสเตอร์ อังคาร 15 ก.ย. , 05:02:35 GMT-400 2015 | โหนดแคช 0001 รีสตาร์ท
(snip รายการก่อนหน้า)
SwapUsage - ในการใช้งานปกติ Memcached หรือ Redis ไม่ควรทำการสลับ
การตั้งค่าที่เกี่ยวข้อง (ไม่ใช่ค่าเริ่มต้น) ของเรา:
- ประเภทอินสแตนซ์:
cache.r3.2xlarge
maxmemory-policy
: allkeys-lru (เราใช้ค่าเริ่มต้นระเหย -lru ก่อนหน้านี้โดยไม่แตกต่างกันมาก)maxmemory-samples
: 10reserved-memory
: 2500000000- ตรวจสอบคำสั่ง INFO ในอินสแตนซ์ที่ฉันเห็น
mem_fragmentation_ratio
ระหว่าง 1.00 และ 1.05
เราได้ติดต่อฝ่ายสนับสนุน AWS และไม่ได้รับคำแนะนำที่เป็นประโยชน์มาก: พวกเขาแนะนำให้ใช้หน่วยความจำสำรองที่เพิ่มมากขึ้น (ค่าเริ่มต้นคือ 0 และเรามีการจอง 2.5 GB) เราไม่มีการจำลองแบบหรือสแนปชอตที่ตั้งค่าไว้สำหรับอินสแตนซ์แคชนี้ดังนั้นฉันเชื่อว่าไม่มี BGSAVE ที่ควรจะเกิดขึ้นและทำให้เกิดการใช้หน่วยความจำเพิ่มเติม
maxmemory
หมวกของ cache.r3.2xlarge เป็น 62495129600 ไบต์และแม้ว่าเราจะตีหมวกของเรา (ลบของเราreserved-memory
) อย่างรวดเร็วก็ดูเหมือนว่าแปลกกับผมว่าโฮสต์ระบบปฏิบัติการจะรู้สึกกดดันที่จะใช้แลกเปลี่ยนมากที่นี่และอื่น ๆ ได้อย่างรวดเร็วเว้นแต่ Amazon ได้ทำการตั้งค่า swappiness ของระบบปฏิบัติการด้วยเหตุผลบางอย่าง ความคิดใดที่ว่าทำไมเราถึงต้องทำให้เกิดการใช้ swap อย่างมากใน ElastiCache / Redis หรือวิธีแก้ปัญหาที่เราอาจลอง?