ค้นหาเว็บไซต์

วิธีการตั้งค่า Redis เพื่อความพร้อมใช้งานสูงด้วย Sentinel ใน CentOS 8 - ตอนที่ 2


Redis ให้ความพร้อมใช้งานสูงผ่านระบบแบบกระจาย Redis Sentinel Sentinel ช่วยตรวจสอบอินสแตนซ์ Redis ตรวจจับความล้มเหลว และจะทำการสลับบทบาทโดยอัตโนมัติ จึงทำให้ Redis ปรับใช้เพื่อต้านทานความล้มเหลวทุกประเภท

มีคุณลักษณะการตรวจสอบอินสแตนซ์ Redis (ต้นแบบและแบบจำลอง) รองรับการแจ้งเตือนของบริการ/กระบวนการอื่น ๆ หรือผู้ดูแลระบบผ่านสคริปต์ การเปลี่ยนระบบอัตโนมัติเพื่อเลื่อนระดับแบบจำลองไปยังต้นแบบเมื่อต้นแบบหยุดทำงานและให้ การกำหนดค่าสำหรับลูกค้าเพื่อค้นหาต้นแบบปัจจุบันที่เสนอบริการเฉพาะ

บทความนี้สาธิตวิธีการตั้งค่า Redis เพื่อความพร้อมใช้งานสูงด้วย Redis Sentinel ใน CentOS 8 รวมถึงการกำหนดค่า Sentinel การตรวจสอบสถานะการตั้งค่า และการทดสอบ Sentinel ล้มเหลว

วิชาบังคับก่อน:

  1. วิธีการตั้งค่าการจำลองแบบ Redis (โดยปิดใช้งานโหมดคลัสเตอร์) ใน CentOS 8 - ตอนที่ 1

ทดสอบการตั้งค่าสภาพแวดล้อม

Master Server and Sentinel1: 10.42.0.247
Redis Replica1 and Sentinel2: 10.42.0.21
Redis Replica2 and Sentinel3: 10.42.0.34

ตามเอกสารประกอบของ Redis Sentinel เราต้องการอินสแตนซ์ Sentinel อย่างน้อยสามอินสแตนซ์เพื่อการปรับใช้ที่มีประสิทธิภาพ เมื่อพิจารณาการตั้งค่าของเราข้างต้น หาก ต้นแบบ ล้มเหลว Sentinels2 และ Sentinel3 จะเห็นด้วยกับความล้มเหลวและจะสามารถให้สิทธิ์การเฟลโอเวอร์ได้ ทำให้ การดำเนินงานของลูกค้าสามารถดำเนินต่อไปได้

ขั้นตอนที่ 1: การเริ่มต้นและเปิดใช้งานบริการ Redis Sentinel

1. บน CentOS 8 บริการ Redis Sentinel ได้รับการติดตั้งควบคู่ไปกับเซิร์ฟเวอร์ Redis (ซึ่งเราทำไปแล้วใน การตั้งค่าการจำลองแบบ Redis)

หากต้องการเริ่มบริการ Redis และเปิดใช้งานให้เริ่มโดยอัตโนมัติเมื่อบูตระบบ ให้ใช้คำสั่ง systemctl ต่อไปนี้ นอกจากนี้ ให้ยืนยันว่าเปิดใช้งานแล้วโดยตรวจสอบ สถานะ (ทำสิ่งนี้กับโหนดทั้งหมด):

systemctl start redis-sentinel
systemctl enable redis-sentinel
systemctl status redis-sentinel

ขั้นตอนที่ 2: การกำหนดค่า Redis Sentinel บนโหนด Redis ทั้งหมด

2. ในส่วนนี้ เราจะอธิบายวิธีกำหนดค่า Sentinel บนโหนดทั้งหมดของเรา บริการ Sentinel มีรูปแบบการกำหนดค่าที่คล้ายคลึงกับเซิร์ฟเวอร์ Redis หากต้องการกำหนดค่า ให้ใช้ไฟล์การกำหนดค่า /etc/redis-sentinel.conf ที่มีการจัดทำเอกสารด้วยตนเอง

ขั้นแรก สร้างการสำรองไฟล์ต้นฉบับและเปิดเพื่อแก้ไข

cp /etc/redis-sentinel.conf /etc/redis-sentinel.conf.orig
vi /etc/redis-sentinel.conf

3. ตามค่าเริ่มต้น Sentinel จะรับฟังพอร์ต 26379 ตรวจสอบสิ่งนี้ในทุกอินสแตนซ์ โปรดทราบว่าคุณต้องปล่อยให้พารามิเตอร์ bind ใส่เครื่องหมายความคิดเห็นไว้ (หรือตั้งค่าเป็น 0.0.0.0)

port 26379

4. ถัดไป บอก Sentinel ให้ตรวจสอบ มาสเตอร์ ของเรา และให้พิจารณาว่าอยู่ในสถานะ "Objectively Down " ก็ต่อเมื่อมีผู้รักษาองค์ประชุมอย่างน้อย 2 คนเห็นด้วย คุณสามารถแทนที่ “mymaster ” ด้วยชื่อที่กำหนดเองได้

#On Master Server and Sentinel1
sentinel monitor mymaster 127.0.0.1 6379 2

#On Replica1 and Sentinel2
sentinel monitor mymaster 10.42.0.247 6379 2

#On Replica1 and Sentinel3
sentinel monitor mymaster 10.42.0.247 6379 2

ข้อสำคัญ: ต้องวางคำสั่ง Sentinel Monitor ก่อนคำสั่ง auth-pass ของ Sentinel เพื่อหลีกเลี่ยงข้อผิดพลาด “No such master with ชื่อที่ระบุ ” เมื่อเริ่มบริการแมวมองใหม่

5. หาก Redis ต้นแบบที่จะตรวจสอบได้ตั้งรหัสผ่านไว้ (ในกรณีของเรา ต้นแบบมี) ให้ระบุรหัสผ่านเพื่อให้อินสแตนซ์ Sentinel สามารถตรวจสอบสิทธิ์กับอินสแตนซ์ที่ได้รับการป้องกันได้

 
sentinel auth-pass mymaster Securep@55Here

6. จากนั้น กำหนดจำนวนมิลลิวินาทีที่ไม่สามารถเข้าถึงต้นแบบ (หรือแบบจำลองหรือ Sentinel ใดๆ ที่แนบมา) เพื่อพิจารณาว่าอยู่ในสถานะ “Subjectively Down

การกำหนดค่าต่อไปนี้หมายความว่าต้นแบบจะถือว่าล้มเหลวทันทีที่เราไม่ได้รับการตอบกลับใดๆ จาก Ping ของเราภายใน 5 วินาที (1 วินาทีเทียบเท่ากับ 1,000 มิลลิวินาที)

sentinel down-after-milliseconds mymaster 5000

7. ถัดไป ตั้งค่าการหมดเวลาเฟลโอเวอร์เป็นมิลลิวินาทีซึ่งกำหนดหลายสิ่ง (อ่านเอกสารประกอบของพารามิเตอร์ในไฟล์การกำหนดค่า)

sentinel failover-timeout mymaster 180000

8. จากนั้นกำหนดจำนวนเรพลิกาที่สามารถกำหนดค่าใหม่เพื่อใช้ต้นแบบใหม่หลังจากการเฟลโอเวอร์ในเวลาเดียวกัน เนื่องจากเรามีแบบจำลองสองแบบ เราจะตั้งค่าแบบจำลองหนึ่งอัน เนื่องจากอีกแบบจำลองหนึ่งจะได้รับการเลื่อนระดับเป็นต้นแบบใหม่

sentinel parallel-syncs mymaster 1

โปรดทราบว่าไฟล์การกำหนดค่าบน Redis Replica1 และ Sentinel2 และ Reddis Replica1 และ Sentinel2 ควรเหมือนกัน

9. ถัดไป เริ่มบริการ Sentinel ใหม่บนโหนดทั้งหมดเพื่อใช้การเปลี่ยนแปลงล่าสุด

systemctl restart redis-sentinel

10. จากนั้น เปิดพอร์ต 26379 ในไฟร์วอลล์บนโหนดทั้งหมดเพื่อเปิดใช้งานอินสแตนซ์ Sentinel เพื่อเริ่มพูดคุย รับการเชื่อมต่อจาก อื่นๆ >อินสแตนซ์ Sentinel โดยใช้ firewall-cmd

firewall-cmd --zone=public --permanent --add-port=26379/tcp
firewall-cmd --reload

11. แบบจำลองทั้งหมดจะถูกค้นพบโดยอัตโนมัติ ที่สำคัญ Sentinel จะอัปเดตการกำหนดค่าโดยอัตโนมัติพร้อมข้อมูลเพิ่มเติมเกี่ยวกับการจำลอง คุณสามารถยืนยันสิ่งนี้ได้โดยเปิดไฟล์การกำหนดค่า Sentinel สำหรับแต่ละอินสแตนซ์แล้วพิจารณาดู

ตัวอย่างเช่น เมื่อคุณดูที่ส่วนท้ายของไฟล์การกำหนดค่าของต้นแบบ คุณควรเห็นคำสั่ง known-sentinels และ known-replica ดังที่แสดงในภาพหน้าจอต่อไปนี้

ควรเป็นกรณีเดียวกันใน replica1 และ replica2

โปรดทราบว่าการกำหนดค่า Sentinel จะถูกเขียนใหม่/อัปเดตทุกครั้งที่แบบจำลองได้รับการเลื่อนระดับเป็นสถานะหลักในระหว่างการเกิดข้อผิดพลาด และทุกครั้งที่ค้นพบ Sentinel ใหม่ในการตั้งค่า

ขั้นตอนที่ 3: ตรวจสอบสถานะการตั้งค่า Redis Sentinel

12. ตอนนี้ให้ตรวจสอบสถานะ/ข้อมูล Sentinel บนต้นแบบ โดยใช้คำสั่ง info sentinel ดังต่อไปนี้

redis-cli -p 26379 info sentinel

จากผลลัพธ์ของคำสั่งดังที่เห็นในภาพหน้าจอต่อไปนี้ เรามีเรพลิกา/สลาฟสองตัวและเซนทิเนลสามตัว

13. หากต้องการแสดงข้อมูลโดยละเอียดเกี่ยวกับ ต้นแบบ (เรียกว่า mymaster) ให้ใช้คำสั่ง ต้นแบบแมวมอง

redis-cli -p 26379 sentinel master mymaster

14. หากต้องการแสดงข้อมูลโดยละเอียดเกี่ยวกับ ทาส และ ผู้พิทักษ์ ให้ใช้คำสั่ง ทาสผู้พิทักษ์ และ ผู้พิทักษ์ คำสั่งรักษาการณ์ตามลำดับ

redis-cli -p 26379 sentinel slaves mymaster
redis-cli -p 26379 sentinel sentinels mymaster

15. ถัดไป ถามที่อยู่ของต้นแบบตามชื่อจากอินสแตนซ์ทาสโดยใช้คำสั่ง sentinel get-master-addr-by-name ดังต่อไปนี้

ผลลัพธ์ควรเป็นที่อยู่ IP และพอร์ตของอินสแตนซ์หลักปัจจุบัน:

redis-cli -p 26379 sentinel get-master-addr-by-name mymaster

ขั้นตอนที่ 4: ทดสอบความล้มเหลวของ Sentinel

16. สุดท้ายนี้ มาทดสอบการเฟลโอเวอร์อัตโนมัติในการตั้งค่า Sentinel กัน บนต้นแบบ Redis/Sentinel ให้ทำให้ Redis ต้นแบบ (ทำงานบนพอร์ต 6379) เข้าสู่โหมดสลีปเป็นเวลา 60 วินาที . จากนั้นสอบถามที่อยู่ของต้นแบบปัจจุบันบนเรพลิกา/สเลฟดังนี้

redis-cli -p 6379
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379>  debug sleep 60
redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
redis-cli -p 26379 sentinel get-master-addr-by-name mymaster

จากผลลัพธ์สำหรับการสืบค้น ขณะนี้ต้นแบบใหม่เป็น replica/slave2 พร้อมที่อยู่ IP 10.42.0.34 ดังที่เห็นในภาพหน้าจอต่อไปนี้

คุณสามารถรับข้อมูลเพิ่มเติมได้จากเอกสาร Redis Sentinel แต่หากคุณมีความคิดเห็นใดๆ ที่จะแบ่งปันหรือมีข้อสงสัย แบบฟอร์มคำติชมด้านล่างจะเป็นประตูสู่เรา

ในส่วนถัดไปและส่วนสุดท้ายของชุดนี้ เราจะดูวิธีตั้งค่าคลัสเตอร์ Redis ใน CentOS 8 โดยจะเป็นบทความอิสระจากสองบทความแรก