Redis Sentinel มอบโซลูชันความพร้อมใช้งานสูง (HA) ที่ใช้งานง่ายและอัตโนมัติสำหรับ Redis หากคุณคุ้นเคยกับการเลือกตั้ง MongoDB ก็ไม่ไกลเกินเอื้อม ในการเริ่มต้น คุณมีต้นแบบที่ได้รับมอบหมายให้จำลองเป็น N จำนวนทาส จากที่นั่น คุณจะมี Sentinel daemons ทำงานอยู่ ไม่ว่าจะเป็นบนเซิร์ฟเวอร์แอปพลิเคชันของคุณหรือบนเซิร์ฟเวอร์ที่ Redis กำลังทำงานอยู่ สิ่งเหล่านี้คอยติดตามสุขภาพของอาจารย์
ถ้า Sentinel ตรวจพบว่า Master ไม่ตอบสนอง มันจะส่งสัญญาณ SDOWN (Subjectively down) ไปยัง Sentinel คนอื่นๆ จากนั้น เมื่อถึงองค์ประชุมที่อาจารย์ไม่ทำงาน มันจะออกอากาศ ODOWN (ลดลงอย่างเป็นกลาง) และจะมีการเลือกต้นแบบใหม่ เนื่องจากคุณต้องมีทหารรักษาการณ์ครบองค์ประชุมหรือส่วนใหญ่จึงจะตกลงที่จะเข้าสู่สถานะ ODOWN แนวทางปฏิบัติที่ดีที่สุดคือให้ Sentinels เป็นจำนวนคี่วิ่งเพื่อหลีกเลี่ยงความสัมพันธ์
หมายเหตุ:ขอแนะนำอย่างยิ่งให้ใช้ Redis เวอร์ชันจากสาขา 2.8 หรือสูงกว่าเพื่อประสิทธิภาพที่ดีที่สุดกับ Sentinel
วิธีการทำงาน
ยามรักษาการณ์จัดการเฟลโอเวอร์โดยการเขียนไฟล์กำหนดค่าของอินสแตนซ์ Redis ที่กำลังทำงานใหม่ มาดูสถานการณ์กัน:
สมมติว่าเรามีเจ้านาย "A" ที่เลียนแบบทาส "B" และ "C" เรามี Sentinels สามตัว (s1, s2, s3) ที่ทำงานบนแอปพลิเคชันเซิร์ฟเวอร์ของเรา ซึ่งเขียนถึง Redis ณ จุดนี้ “A” เจ้านายคนปัจจุบันของเราออฟไลน์ ทหารรักษาการณ์ของเราทุกคนเห็นว่า "A" ออฟไลน์ และส่งข้อความ SDOWN ถึงกันและกัน จากนั้นพวกเขาทั้งหมดเห็นพ้องกันว่า "A" ไม่ทำงาน ดังนั้น "A" จะถูกกำหนดให้อยู่ในสถานะ ODOWN จากที่นี่ การเลือกตั้งจะเกิดขึ้นเพื่อดูว่าใครนำหน้ามากที่สุด และในกรณีนี้ "B" จะถูกเลือกให้เป็นปรมาจารย์คนใหม่
ไฟล์กำหนดค่าสำหรับ "B" ถูกตั้งค่าเพื่อไม่ให้เป็นทาสของใครอีกต่อไป ในขณะเดียวกัน ไฟล์ปรับแต่งสำหรับ "C" ถูกเขียนใหม่เพื่อไม่ให้เป็นทาสของ "A" อีกต่อไป แต่เป็น "B" จากนี้ไปทุกอย่างก็ดำเนินไปตามปกติ หาก “A” กลับมาออนไลน์ Sentinels จะรู้จักสิ่งนี้ และเขียนไฟล์การกำหนดค่าใหม่เพื่อให้ “A” เป็นทาสของ “B” เนื่องจาก “B” เป็นต้นแบบปัจจุบัน
การกำหนดค่า
การกำหนดค่า Sentinels ไม่ยากอย่างที่คิด อันที่จริง สิ่งที่ยากที่สุดอย่างหนึ่งคือการเลือกว่าจะวางกระบวนการ Sentinel ไว้ที่ใด โดยส่วนตัวแล้วฉันแนะนำให้เรียกใช้บนเซิร์ฟเวอร์แอปของคุณหากเป็นไปได้ สมมุติว่าคุณกำลังตั้งค่านี้ คุณกังวลเกี่ยวกับความพร้อมในการเขียนถึงอาจารย์ของคุณ ด้วยเหตุนี้ Sentinels จึงให้ข้อมูลเชิงลึกว่าแอปพลิเคชันเซิร์ฟเวอร์ของคุณสามารถพูดคุยกับต้นแบบได้หรือไม่ คุณสามารถเรียกใช้ Sentinels บนเซิร์ฟเวอร์อินสแตนซ์ Redis ได้เช่นกัน
หากต้องการเริ่มต้นด้วยขั้นตอนการกำหนดค่า โปรดอ้างอิงไฟล์ตัวอย่างที่นี่ นี่เป็นตัวอย่าง sentinel.conf ที่พบใน Redis 2.8.4 บน Ubuntu 14.04 แต่ควรใช้งานได้กับ Redis เวอร์ชัน 2.8.x ฉันได้ใช้เสรีภาพในการเพิ่มสองบรรทัดที่ด้านบนซึ่งฉันชอบใช้ในทางปฏิบัติ:
daemonize yes
logfile /var/log/redis/redis-sentinel.log
ซึ่งจะทำให้กระบวนการ Sentinel อยู่ในโหมด daemonize และบันทึกข้อความทั้งหมดไปยังไฟล์บันทึกแทน stdout
มีตัวเลือกที่กำหนดค่าได้มากมายที่นี่ และส่วนใหญ่แสดงความคิดเห็นได้ดีมาก อย่างไรก็ตาม สำหรับโพสต์นี้เราจะเน้นแค่สองส่วนเท่านั้น
ส่วนที่สำคัญที่สุดคือการบอก Sentinels ว่าเจ้านายคนปัจจุบันของคุณอาศัยอยู่ที่ใด มีการอ้างอิงในบรรทัดนี้:
sentinel monitor mymaster 127.0.0.1 6379 2
สิ่งนี้บอกให้ Sentinel ตรวจสอบ "mymaster" (นี่คือชื่อที่กำหนดเอง โปรดตั้งชื่อตามที่เห็นสมควร) และ IP ที่กำหนดบนพอร์ตที่กำหนด ตลอดจนจำนวน Sentinels ที่ต้องใช้เพื่อให้ครบองค์ประชุมสำหรับกรณีเฟลโอเวอร์ ( ขั้นต่ำคือ 2). ส่วนที่คุณอาจต้องการเปลี่ยนที่นี่คือที่อยู่ IP ของมาสเตอร์และเป็นพอร์ต หากไม่ได้ทำงานบนพอร์ตมาตรฐาน 6379
ถัดไป คุณอาจต้องการเปลี่ยนบรรทัดต่อไปนี้:
sentinel down-after-milliseconds mymaster 30000
นี่คือระยะเวลาที่คุณต้องการให้ผู้รักษาการณ์รอก่อนที่จะประกาศนายใน SDOWN ค่าเริ่มต้นคือ 30 วินาที โดยทั่วไปแล้วฉันต้องการลดค่านี้ลงเล็กน้อยเหลือ 10 วินาที คุณไม่ต้องการที่จะลดสิ่งนี้ให้ต่ำเกินไป มิฉะนั้น คุณอาจมีปัญหากับเฟลโอเวอร์ที่เกิดขึ้นบ่อยเกินไป
อย่าลังเลที่จะดูตัวเลือกอื่น ๆ สิ่งที่น่าสนใจสำหรับผู้ใช้จำนวนมากคือสคริปต์การแจ้งเตือน หากคุณต้องการติดตามการเฟลโอเวอร์เมื่อเกิดขึ้น
เมื่อคุณกำหนดค่า Sentinel.conf ตามที่เห็นสมควรแล้ว ให้เริ่ม daemon ด้วยคำสั่งต่อไปนี้:
redis-server /path/to/sentinel.conf --sentinel
การทดสอบเฟลโอเวอร์
เมื่อคุณมีทหารรักษาการณ์ออนไลน์ทั้งหมดแล้ว เป็นไปได้ที่จะดำเนินการแบบแห้งเพื่อเฟลโอเวอร์เพื่อให้แน่ใจว่ามีการกำหนดค่าทั้งหมดอย่างถูกต้อง
สิ่งแรกคือสิ่งแรก เชื่อมต่อกับ Sentinel ของคุณผ่าน redis-cli:
redis-cli -p 26379
หากคุณต้องการรับข้อมูลเกี่ยวกับ Sentinel เพียงเรียกใช้คำสั่งนี้:
127.0.0.1:26379> INFO
ข้อมูลนี้จะให้ข้อมูลแก่คุณ เช่น ใครคือเจ้านายคนปัจจุบัน มีทาสกี่คน และมีทหารรักษาการณ์กี่คนที่คอยติดตามเรื่องนี้
หากต้องการทดสอบเฟลโอเวอร์ เพียงดำเนินการ:
127.0.0.1:26379> SENTINEL failover mymaster
การดำเนินการนี้จะบังคับให้ ODOWN บนต้นแบบปัจจุบันและทำให้เกิดการเฟลโอเวอร์ หลังจากนั้นไม่นาน หากคุณเรียกใช้คำสั่ง “INFO” อีกครั้ง ตอนนี้คุณควรเห็นรายการต้นแบบใหม่
บทสรุป
หวังว่านี่จะเป็นประโยชน์ในการทำให้ Redis และ Sentinel กระจ่างขึ้น หากคุณมีคำถามใดๆ โปรดโพสต์ด้านล่างได้เลย!