ก่อนอื่นให้พูดคุยยาม
Sentinel จัดการเฟลโอเวอร์ไม่ได้กำหนดค่า Redis สำหรับ HA นับเป็นความแตกต่างที่สำคัญ ประการที่สองไดอะแกรมที่คุณโพสต์เป็นการตั้งค่าที่ไม่ถูกต้องคุณไม่ต้องการเรียกใช้ Sentinel บนโหนดเดียวกับโหนด Redis ที่กำลังจัดการ เมื่อคุณสูญเสียโฮสต์นั้นคุณจะเสียทั้งสองอย่าง
ว่า "เปลืองทรัพยากรหรือเปล่า" ขึ้นอยู่กับกรณีการใช้งานของคุณ คุณไม่จำเป็นต้องมีโหนด Redis สามโหนดในการตั้งค่านั้นคุณต้องการเพียงสองโหนด สามเพิ่มความซ้ำซ้อนของคุณ แต่ไม่จำเป็น หากคุณต้องการความซ้ำซ้อนที่เพิ่มเข้ามาก็ไม่เป็นการสิ้นเปลืองทรัพยากร หากคุณไม่ต้องการความซ้ำซ้อนคุณเพียงแค่เรียกใช้อินสแตนซ์ Redis เพียงครั้งเดียวและเรียกมันว่าดีเพราะการทำงานมากขึ้นจะ "สูญเปล่า"
อีกเหตุผลหนึ่งในการเรียกใช้ทาสสองคนคือการแยกการอ่าน อีกครั้งถ้าคุณต้องการมันก็ไม่เป็นการสูญเปล่า
เกี่ยวกับ "มีวิธีที่ดีกว่าในการใช้ทรัพยากรที่มีอยู่อย่างเต็มที่หรือไม่" เราไม่สามารถตอบได้ว่ามันขึ้นอยู่กับสถานการณ์และรหัสเฉพาะของคุณมากเกินไป ที่กล่าวว่าหากปริมาณข้อมูลที่จะจัดเก็บ "น้อย" และอัตราคำสั่งไม่สูงเกินไปโปรดจำไว้ว่าคุณไม่จำเป็นต้องอุทิศโฮสต์ให้กับ Redis
ตอนนี้สำหรับ "Redis จัดคลัสเตอร์เป็นทางเลือกแทน Redis sentinel หรือไม่" มันขึ้นอยู่กับกรณีการใช้งานของคุณจริงๆ Redis Cluster ไม่ใช่โซลูชัน HA แต่เป็นโซลูชันสำหรับเขียนหลายตัว / ขนาดใหญ่กว่าหน่วยความจำ หากเป้าหมายของคุณคือ HA ก็น่าจะไม่เหมาะกับคุณ Redis Cluster มาพร้อมกับข้อ จำกัด โดยเฉพาะอย่างยิ่งเกี่ยวกับการทำงานแบบหลายปุ่มดังนั้นจึงไม่จำเป็นต้องเป็นการดำเนินการแบบ "ใช้คลัสเตอร์" ที่ตรงไปตรงมา
หากคุณคิดว่าการมีโฮสต์สามตัวที่ใช้ Redis (และเจ้าหน้าที่คอยดูแลสามคน) นั้นสิ้นเปลืองคุณก็น่าจะถือ Cluster ได้มากขึ้นเนื่องจากต้องใช้ทรัพยากรมากขึ้น
คำถามที่คุณถามอาจกว้างเกินไปและอิงตามความคิดเห็นที่จะอยู่รอดตามที่เขียนไว้ หากคุณมีกรณี / ปัญหาเฉพาะที่คุณกำลังดำเนินการอยู่โปรดอัปเดตด้วยเพื่อให้เราสามารถให้ความช่วยเหลือและข้อมูลที่เฉพาะเจาะจงได้
อัปเดตเฉพาะ:
สำหรับการจัดการความล้มเหลวที่เหมาะสมในสถานการณ์ของคุณฉันจะใช้ทหารรักษาการณ์ 3 นายคนหนึ่งทำงานบนเซิร์ฟเวอร์ JBoss ของคุณ หากคุณมีโหนด JBoss 3 โหนดให้ใช้โหนดต่อโหนด ฉันมี Redis pod (master + slave) บนโหนดที่แยกจากกันและปล่อยให้ Sentinel จัดการเฟลโอเวอร์
จากนั้นเป็นเรื่องของการเดินสาย JBoss / Jedis เพื่อใช้ Sentinel สำหรับข้อมูลและการจัดการการเชื่อมต่อ เนื่องจากฉันไม่ได้ใช้การค้นหาด่วนเหล่านั้นปรากฎว่า Jedis มีการสนับสนุนคุณเพียงแค่ต้องกำหนดค่าให้ถูกต้อง ตัวอย่างบางส่วนที่ฉันพบคือLooking for an example of Jedis with Sentinelและhttps://github.com/xetorthio/jedis/issues/725ซึ่งพูดถึงJedisSentinelPool
การเป็นเส้นทางในการใช้สระว่ายน้ำ
เมื่อ Sentinel ดำเนินการเฟลโอเวอร์ไคลเอนต์จะถูกตัดการเชื่อมต่อและเจดิสจะ (ควร?) จัดการการเชื่อมต่อใหม่โดยถาม Sentinels ว่าใครคือมาสเตอร์คนปัจจุบัน