เรากำลังย้ายจากการตั้งค่าเว็บเซิร์ฟเวอร์ 1 รายการเป็นการตั้งค่าเว็บเซิร์ฟเวอร์สองรายการและฉันต้องเริ่มต้นแบ่งปันเซสชัน PHP ระหว่างเครื่องโหลดบาลานซ์สองเครื่อง เราได้ติดตั้งmemcachedแล้ว ( และเริ่มต้น ) และดังนั้นฉันจึงประหลาดใจที่ฉันสามารถแบ่งปันเซสชันระหว่างเซิร์ฟเวอร์ใหม่ได้สำเร็จโดยการเปลี่ยนเพียง 3 บรรทัดในphp.ini
ไฟล์ (the session.save_handlerและsession.save_path ):
ฉันแทนที่:
session.save_handler = files
ด้วย:
session.save_handler = memcache
จากนั้นในเว็บเซิร์ฟเวอร์หลักฉันตั้งค่าsession.save_path
ให้ชี้ไปที่ localhost:
session.save_path="tcp://localhost:11211"
และในเว็บเซิร์ฟเวอร์ทาสฉันตั้งค่าsession.save_path
ให้ชี้ไปที่ต้นแบบ:
session.save_path="tcp://192.168.0.1:11211"
งานเสร็จแล้วฉันทดสอบและใช้งานได้ แต่...
เห็นได้ชัดว่าการใช้ memcache หมายถึงเซสชันอยู่ใน RAM และจะหายไปหากรีบูตเครื่องหรือ memcache daemon ขัดข้อง - ฉันกังวลเล็กน้อยจากเรื่องนี้ แต่ฉันกังวลเล็กน้อยเกี่ยวกับการรับส่งข้อมูลเครือข่ายระหว่างสองเว็บเซิร์ฟเวอร์ (โดยเฉพาะอย่างยิ่ง เราขยายขนาดขึ้น) เพราะเมื่อใดก็ตามที่มีใครโหลดสมดุลกับเว็บเซิร์ฟเวอร์ทาสเซสชันของพวกเขาจะถูกดึงข้ามเครือข่ายจากเว็บเซิร์ฟเวอร์หลัก ฉันสงสัยว่าฉันสามารถกำหนดสองsave_paths
เครื่องเพื่อให้ดูในที่เก็บเซสชันของตนเองก่อนที่จะใช้เครือข่าย ตัวอย่างเช่น:
ปริญญาโท:
session.save_path="tcp://localhost:11211, tcp://192.168.0.2:11211"
ทาส:
session.save_path="tcp://localhost:11211, tcp://192.168.0.1:11211"
สิ่งนี้จะช่วยให้ประสบความสำเร็จในการแชร์เซสชันข้ามเซิร์ฟเวอร์และช่วยในเรื่องประสิทธิภาพหรือไม่? ie บันทึกการรับส่งข้อมูลเครือข่าย 50% ของเวลา หรือเป็นเทคนิคนี้สำหรับ failover เท่านั้น (เช่นเมื่อ memcache daemon ไม่สามารถเข้าถึงได้)?
หมายเหตุ : ฉันไม่ได้ถามเฉพาะเกี่ยวกับการจำลองแบบ memcache โดยเฉพาะ - เพิ่มเติมเกี่ยวกับไคลเอนต์ PHP memcache ที่สามารถสูงสุดภายใน memcache daemon แต่ละตัวในพูลกลับเซสชั่นถ้าพบหนึ่งและสร้างเซสชั่นใหม่หากไม่พบ ในร้านค้าทั้งหมด ขณะที่ฉันกำลังเขียนสิ่งนี้ฉันคิดว่าฉันกำลังขออะไรจาก PHP มาก ๆ ฮ่า ๆ ๆ
สมมติว่า : ไม่มีเซสชันแบบติดหนึบ, การปรับสมดุลโหลดรอบ, เซิร์ฟเวอร์ LAMP